小菜学设计模式——设计模式总结之行为型(2)

1、设计模式总结

设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下:

1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、职责链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

2、行为型设计模式

1)备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

备忘录模式可以避免暴露一些只应由对象A管理却又必须存储在对象A之外的信息。备忘录模式把可能很复杂的对象A的内部信息对其他对象屏蔽起来,从而保持了封装边界。

2)状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

状态模式提供了一个更好的办法来组织与特定状态相关的代码,决定状态转移的逻辑不在的单块的if或switch当中,而是分布在各个状态子类之中,由于所有与状态相关的代码都存在于某个状态子类中,所以通过定义新的子类可以很容易地增加新的状态和转换。

3)访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

访问这种增加具体的Element是困难的,但增加依赖于赋值对象结构的构件操作就变得容易。仅需要增加一个新的访问者即可在一个对象结构上定义一个新的操作。如果你还记得那个男人和女人的状态,你们你就会知道Element就是男人和女人,那么这种结构一旦确定是很难更改的,但是你却可以新增访问者,比如结婚、生子等新的操作。

4)中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

将集体行为封装一个单独的中介者对象来避免大量对象相互连接的问题,中介者负责控制和协调一组对象间的交互。中介者充当一个中介以时组中对象不再相互显示引用。这些对象仅仅知道中介者,从而减少相互连接是数目。其实是迪米特原则(最少知识原则)的充分体现。

5)解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

如果一个特定类型的问题发生频率足够高,那么就可以考虑将该问题的各个实例表述为一个简单语言中的句子,也就是说通过构建一个解释器,该解释器解释这些句子来解决该问题。

时间: 2024-08-27 14:32:53

小菜学设计模式——设计模式总结之行为型(2)的相关文章

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

螃蟹学PHP设计模式之建造者模式

2.建造者模式 螃蟹今天要学习建造者模式了,昨天的适配器记得还是很清楚的.对于建造者模式,螃蟹的理解是你有10部iphone手机要充电,假设充电器额定电压都是220v,但是外电压不稳定,可能是220v,也可能是240v,或是300v,这个时候怎么办,可行的方法是购置一个家用变压器,把充电器都连在变压器上,不需要直接连在外电网上,无论外电压如何变化,只需要操作变压器即可.这个比喻可能有些牵强,不过还是能够说明建造者模式的用途,就是原对象可能是可变的,包括接收的参数或是方法等,但是如果我们已经在程序

螃蟹学PHP设计模式之适配器模式

之前对java的设计模式略有了解,但是螃蟹目前是靠PHP吃饭,所以对于进阶学习php设计模式还是很有必要.螃蟹虽然做开发两年了,但是在老鸟眼中还是菜鸟,为了自己写的代码更容易维护和进行团队协作,所以我要搞定设计模式.希望螃蟹今年能创业成功或找个好工作. 1.适配器模式 螃蟹的理解是你买了港行的iphone手机,发现自家的插座和手机自带的插头不配,怎么办呢,就需要一个转换器(适配器).可能原来系统的类不是你设计的,但是现在你要使用原来的类,发现有问题,但原来的类又不能动,或者不需要动,这样你写一个

一起学java设计模式--代理模式(结构型模式)

代理模式 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法.使用代理模式模拟该过程,绘制类图并编程实现. package ProxyPattern; interface Software { void run(); } class Application implements Software { public void run() { Syste

螃蟹学PHP设计模式之数据访问对象模式

3.数据访问对象模式 今天又要上班了,不过公司的事情倒不多,先花点时间回忆之前学的两个设计模式吧......好,复习完了,开始学习新的数据访问对象模式.螃蟹发现其实之前的项目基本都用上了数据访问对象模式,因为在程序中手写sql实在是效率不高且不易于维护.这就好比你有个亲戚在美国,你每个月都想送点东西给他,然后你每次都要做飞机汽车跑到他哪儿去,东西给他再风尘仆仆地回来,结果有一天你突然发现有快递这服务,你每次把东西交给快递就啥事不管了,由此感叹真方便啊.其实螃蟹也觉得数据访问对象模式真的如同快递员

浅析设计模式(六)——创建型模式之Abstract-Factory(抽象工厂模式)

抽象工厂模式Abstract-Factory 本文的套路: 抽象工厂模式的定义 抽象工厂模式的参与者及其角色 抽象工厂模式的类图 抽象工厂模式的示例 参考 抽象工厂模式的定义 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 前面[浅析设计模式(四)--创建型模式之Simple-Factory(简单工厂方法,非设计模式)]中介绍的简单工厂方法,虽然已经对变化的部分进行了封装,但是这里只由一个对象负责所有的具体类的实例化,因此每次有新增对象类型时,都需要改变工厂的源码进行扩展.

设计模式之策略模式(行为型)

一.模式定义 策略模式:定义一系列算法,然后将每一个算法封装起来,并将它们可以互相替换.也就是将一系列算法封装到一系列策略类里面.策略模式是一种对象行为型模式.策略模式符合"开闭原则" Strategy Pattern: Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently fro

设计模式——设计模式与设计原则

设计模式--设计模式与设计原则 一.设计模式  1.设计模式简介 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石. 模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再

[设计模式]设计模式

在进行控件封装时,通常会定义一个通用操作的接口,只要满足此接口,都可以使用控件承载其功能,但是当需要扩展控件基本功能的时候,难免会在此接口中添加其他的定义,那么实现了此接口的所有类定义都必须的添加新的方法,改动非常大. 通常的做法是使用一个抽象类实现此接口,其他需要扩展此接口的类都继承自此抽象类,而非直接继承接口本身,这样就算接口添加再多的方法,只需要在抽象类中添加对应方法即可,不影响子类. 伪代码描述: interface CustomeViewInterface { void Click()

小菜学设计模式——设计模式总结之创建型

1.面向过程与面向对象 1)面向过程通过划分功能模块,通过函数间相互调用来实现,但需求变化时就需要更改函数,而你改动的函数有多少地方在调用她呢?关联多少数据,这是很不容易弄得清楚地地方.或许开发者本人弄得清楚,但是下一个维护人员未必能够吃透.所以,由于这种强耦合性直接导致程序的扩展性和可维护性降低,后期维护的成本自然增高了不少. 2)面向对象关注的是对象,对象的优点在于,可以定义自己负责的事务,做要求它自己做的事情.对象应该自己负责自己,而且应该清楚的定义责任. 3)一般面向对象开发只是关心这么