Java--设计模式心得体会
1、策略模式:
策略模式就是将能够通用的算法,封装成不同的组件,实现同一个接口,使之可以互换。
例子:SpringMVC的9大组件,都采用策略模式。比如HandlerMethodArgumentResolver,有非常多不同的实现类,这些实现类都可以互相替换来处理不同类型的参数,这就是策略模式。
策略模式与模板方法模式的区别:比如一个抽象类有一个抽象方法,每个实现该抽象方法的具体实现都不同,就是模板方法模式,一般在抽象类中会有逻辑处理,只是用到了抽象的模板方法时,交给具体的子类去不同实现。
如果一个模板方法,被子类实现时,实现方式大都相同,比如模板方法为处理字符(10个子类可能只有两种实现,一种是处理为UTF-8,一种是处理成GBK),那么这个模板方法就应该使用策略模式。
2、观察者模式:
观察者模式就是将“观察者”注册给“被观察者”,当被观察者发生改变时,能够及时的通知所有观察者。
例子:比如listener或者事件触发等,都是观察者模式
3、装饰者模式:
装饰者模式就是在不必改变原类文件和使用继承的情况下,动态的扩展对象的的功能。比如你有一个真实对象,有一个包装对象,两个对象都必须实现同一个接口A;但是在进行包装的时候,包装对象需要引用真实对象,然后在真实对象的基础上进行功能扩展,最后返回的都是接口A的对象。但是已经被包装过了,扩展了功能。
例子:Java里面的Inputstream与OutputStream就是典型的装饰者模式。
4、工厂方法模式
工厂方法模式就是定义一个创建对象的接口,里面有一个创建对象的方法。通过继承或者实现,将对象的创建交给子类。而调用者只用使用接口就可以了,不用关心具体的对象是怎么创建出来的。
5、抽象工厂模式
抽象工厂模式就是定义一个为创建一组(多个)相关或者相依赖的对象的接口,而调用者无需关心具体的创建对象的实现类。
工厂方法模式与抽象工厂模式的区别:当抽象工厂模式定义的接口中只能创建一个对象,那么“抽象工厂模式”就退化成为了“工厂方法模式”。
6、单例模式
单例模式这个就不多说了,哈哈,地球人都知道。
7、命令模式
命令模式就是把请求封装成命令对象,“调用者”就是将“命令对象”传递给“处理对象”。
8、适配器模式
适配器模式就是将一个接口转换成为另一个接口。
9、外观模式
外观模式提供了一个统一的接口,用来访问系统中的一群接口。外观模式定义了一个高层接口,让使用变得更加容易(不用再去调用一群接口,外观接口已经将一群接口封装好了)。
10、模板方法模式
模仿方法模式定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
(让子类来实现具体的抽象方法)
11、迭代器模式
迭代器模式就是Iterator接口,使得客户可以顺序得访问对象中的各个元素,又不暴露对象内部的细节。
12、组合模式
当你将对象的组合(多个对象)组成树结构来展现,那么不管你这个对象是节点(还包含子节点),还是叶子节点(不包含子节点),都可以用一致的方式进行处理。
13、状态模式
状态模式是指当前对象把处理自己不同状态的的行为对象,都封装成为自己的属性。当状态发生改变时,调用不同的行为对象,执行不同的操作。(看起来就好像类发生了改变一样)
14、代理模式
为另一个对象提供一个替身或占位符以访问这个对象(包装一个对象,并控制对它的访问)
15、复合模式
复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。(MVC模式就是典型的符合模式;其中Model是观察者模式,发生改变后通知View;View是组合模式,通过各种不同的组件嵌套组成一个完整的View展现用户界面;Controller是策略模式,不同的View可以使用不同的Controller处理不同的业务)
16、桥接模式
17、建造者(生成器)模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Spring里面的FactoryBean就是建造者模式
18、责任链模式
使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。(责任链就是一个链表结构,头结点处理完成以后再决定是否要交由下一个节点继续处理,直到没有下一个节点或者其中对象终止责任链)
19、蝇量模式(享元模式)Flyweight Pattern
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
应用实例: JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。
20、解释器模式
21、中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
22、备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
应用实例: 1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。
23、原型模式
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
应用实例: 1、细胞分裂。 2、JAVA 中的 Object clone() 方法。3、Java序列化与反序列化可以实现深度克隆
24、访问者模式
访问者模式拥有访问者类,与被访问元素类。元素类通过接受访问者类对象,并且将自身的引用交给访问者,这样访问者就可以使用元素类。
/** *ComputerPart就是被访问的元素 *ComputerPart通过accept方法接收访问者 *ComputerPartVisitor就是访问者 */ public interface class ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); } /** *Keyboard就是被访问的元素 *Keyboard实现ComputerPart接口,通过accept方法接收访问者 *Keyboard通过回调访问者computerPartVisitor的visit方法,将自身对象*传给访问者,访问者便可以使用被访问的元素了 */ public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }