首页 > 代码库 > 设计模式学习总结

设计模式学习总结

本文是对各处设计模式示例的总结概括和简化,主要参考

http://blog.csdn.net/zhangerqing/article/details/8194653

直接看本文估计比较枯燥无聊,因为没图~~??,建议对设计模式有兴趣的先看看上面的博文,或者基础比较好可直接移到最底下看下我的各模式一句话概括总结,有什么意见建议欢迎提出~~~~~~~~~~

 

总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

 1、适配器模式:

适用:将某个类的接口转换成客户端期望的另一个接口表示,实现接口兼容。
类继承方式:
利用适配器类继承目标类,并实现被适配者方法,通过方法调方法实现目标类调用被适配者方法。
对象组合方式:适配器继承目标类,并引入被适配者引用,则可以调用被适配者方法。
接口适配器:用抽象类作为中间类,子类不必调用全部接口的方法
2、原型模式:利用clone来进行浅拷贝和深拷贝,提高循环new对象的资源利用,防止线程并发。浅拷贝会拷贝基本数据类型,String虽是引用类型,但这里也会被拷贝。其他如数组和引用类型不会被拷贝,需要手动把每个对象.clone()

3、代理模式:(Proxy)
用代理类来调用主类的方法,还可以对其前后添加修改,为AOP常用方法。

4、单例模式:

适用:只需要一个实现类的地方,避免多次创建,比如Calendar.getInstance()就是典型,可以参考源码。

5、工厂模式:

封装一个对象复杂的实现过程,使用相同接口创建不同的子类对象,便于扩展。

6、抽象工厂模式:

是对工厂模式的扩展,对工厂进行更高层的抽象,便于更换添加工厂和实现类。

7、建造者模式:(builder)

将多个类复合起来管来,不同类的组装,组装顺序不同等因素都可能导致结果不同。

适用:需要多个复杂的部分组合起来的返回对象。

8、装饰器模式:(Decorator)
给对象动态的增加一些新的功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。
适用场景:需要扩展一个类的功能。动态为一个对象增加功能,动态撤销。
缺点:产生过多相似对象,不易排错。

9、外观模式:(Facade)
为了解决类与类之间的依赖关系,将多各类的关系封装在另一个类中,降低类间的耦合度。

10、桥接模式:(Bridge)
把事物和其其具体实现分开,使他们可以各自独立的变化。
用意:将抽象化和实现化解耦,使二者可以独立变化,和jdbc桥DriverManager同一个道理
11、组合模式:(Composite)
又叫部分-整体模式,在处理类似树形结构的问题时比较方便。
例子:类中包含全局属性本身类的集合,对其进行增加删除等操作
12、享元模式:(Flyweight)
享元模式主要目的实现对象的共享,即共享池。可以减少频繁的创建对象销毁对象。
通常和工厂模式一起使用,类似于数据库连接池的创建过程。
行为模型
13、策略模式:(Strategy)
定义一系列算法封装,使他们可以相互替换。在变动上往往只需要改变接口实现的算法类即可完成替换。
我的总结:通过替换接口实现类来实现算法的替换。
14、模板方法模式:(Template Method)
在抽象类中定义一个主方法,再定义1...n个方法,可以抽象或者实际的方法,之后定义一个类,继承该抽象类重写抽象方法,父类通过调用抽象类,实现对子类的调用。
15、观察者模式:(Observer)
当一个对象变化时,其它依赖该对象的对象都会受到通知,并随着变化
16、迭代子模式:(Iterator)
模拟集合的迭代
17、责任链模式:(Chain of Responsibility)
有多个对象,每个对象持有对下一个对象的引用,形成一条链,请求在这条链上传递,知道某一对象处理该请求。
请求方并不知道之后到底哪个对象处理了该请求。
18、命令模式:(Command)
命令发出者和执行者之间解耦,将请求和执行分开,通过中间类进行传递。
19、备忘录模式:(Memento)
主要目的是保存一个对象的某个状态,以便在适当的时候恢复。
例如:类A有各种属性,它决定需要保存哪些属性,设个方法保存到类B中,则B就是备忘录,而类C则用来储存类B。
20、状态模式:(State)
当对象的状态发生变化时,同时改变其行为。
例如:状态类State,包含状态的行为类Action。状态改变,行为类中动作根据状态改变。
即设置不同参数,相同行为产生不同后果。

21、访问者模式:(Visitor)

把数据结构和作用于结构上的操作解耦,使得操作集合可以相对自由地演化。适用于数据结构相对稳定算法又易变化的系统。访问者模式使得算法操作增加变得容易。
总结:用于扩展修改目标类的方法和属性等。
22、中介者模式:(Mediator)
用来降低类类之间的耦合,使用中介者模式,只需关心和Mediator中介者类的关系,具体类类之间的关系及调度交给中介类就行。
23、解释器模式:(Interpreter)
一般用在OOP开发中的编译器开发,比如正则表达式的解释器等等

 -------------------------------------------------------------------------------------------------------------------------------

总结设计模式学习,一句话概括(有些不全面的地方见谅,欢迎提意见建议)
设计原则
(1)开闭原则:对扩展开放,对修改关闭。
(2)里氏代换原则:任何基类可以出现的地方,子类一定可以出现。
(3)依赖倒置原则:针对接口编程,依赖抽象而不依赖具体。
(4)接口隔离原则:拆分大接口,使用多个隔离接口,降低类间耦合。
(5)迪米特法则:最少知道原则,实体间尽量少的发生相互作用
(6)合成复用原则:尽量使用合成/聚合的方式,而不是继承。
设计模式
(1)工厂方法模式:创建同一接口的封装对象。
(2)单例模式:类只实例化一次
(3)建造者模式:用来创建复合对象,隐藏实现细节。
(4)原型模式:对象复制,减少对象创建。
(5)适配器模式:类、对象、接口适配器,将接口转换成另一个目标接口,消除不兼容问题。
(6)装饰模式:给对象添加动态的添加功能。
(7)代理模式:用另一个类来代替原对象执行操作。
(8)外观模式:将多个类放到一个类中,降低类间耦合度。
(9)桥接模式:事物内部抽象类具体实现不同,相同方法产生不同结果,分离抽象和实体。
(10)组合模式:部分整体的结构,类似树形结构
(11)享元模式:对象共享池
(12)策略模式:相同接口,不同实现类,同一方法结果不同,实现策略不同。
(13)模板方法模式:父类执行子类功能,但由子类实现。
(14)观察者模式:子类的动作,观察者能即使发现做出反应。
(15)迭代子模式:顺序遍历对象。
(16)责任链模式:每个类持有下个对象的引用,形成链条。
(17)命令模式:调用者通过中间类让接受者执行指令。
(18)备忘录模式:备份模式,记录自生参数,需要的时候恢复。
(19)状态模式:改变状态参数,相同方法不同实现
(20)访问者模式:通过接收访问者类,让访问者类改变主类的行为。
(21)中介者模式:通过中介者类管理另外几个类的关系。
(22)解释器模式:解释一种模式,比如正则表达式的解释器。

设计模式学习总结