设计模式成书较早,所以很多想法是从原始的代码水平出发的,会出现很多显而易见的结论却被看起来很弱智的写成一个模式。
设计模式一直用来跟继承做比较,所以说明设计模式的时候一定要相比于继承。否则看不出优势。
命令模式:适用于 工具项目
装饰模式:只能用于增强方法不适用于扩展类,没法用于 mysqldao,实际的例子 sitemesh
策略模式:常常跟工厂模式混用,因为不同的算法总是从工厂模式来的
适配器模式:用来对接不同系统,对接新旧系统的时候很有用
责任链模式:struts的拦截器,用aop也可以实现
外观模式/门面模式:就像苹果的理念一样,已经有多个模块,整合在一起变成新的类
迭代器模式:就是 iterator,场景很特定
中介者模式:类似总线的设计,可以统一接口
工厂方法:太明了了,不说
抽象工厂:比工厂模式更深一层,这回连工厂的实现类都不知道了,说是不同的人可以拿到不同的工厂类(感觉很少会用到)
生成器模式(Builder):适合做框架,把几个条件分别输入后,调用一下build方法就出来
原型模式(prototype):将一个类新建出来后clone他,所以重点在于复制动作,所以 prototype接口基本都有clone方法,没有clone就不是原型模式
单例模式:显而易见,不提
组合模式:Ext 大量使用 组合模式,组合模式适用于做界面 swing ext 之类的框架
桥接模式:将同一件事情(流程)的各个部分开放成可以设置的接口组件,在使用的时候动态组合(但是又不是组合模式)
状态模式:让一个类可以切换模式,J5Service中设定为启动和暂停就是状态模式
模板方法模式(Template Method Pattern):跟桥接非常类似,不同点在于模板方法侧重的是静(页面或者一个稳定的实体),而桥接侧重的是动(一个流程),可以说桥接模式就是动得模板方法模式。模板方法模式也用于实现钩子方法,钩子就是在特定的地方放一个抽象接口实现,用具体的钩子类去实现。
代理模式:访问一个类却通过另外一个类,基本是用反射实现,适合做框架的时候,拦截,比如aop之类的。或者做客户端,负责处理掉中间的网络传输和相应文本的简单处理
享元模式(Flyweight):翻译者应该是想说 共享元素吧。共同的元素在构造函数里面可以直接声明一个对象,减少传参的数量。优点说是节省内存的开销,但是在java这种重视结构超过效率的语言下好像没啥用处
访问者模式(Visitor):适合做采集器,对采集下来的不同网站的网页进行处理和分析。
备忘录模式(Memento):记录下程序在某个时刻的状态,并在以后的某个时间恢复到现在这个状态。用于游戏的保存和读取,或者是任务的暂停和恢复。主要实现是 save() 和 restore(Memento memo) 。 要跟数据库结合。可以用来实现 undo 操作
解释器模式(Interpreter):适合做框架的时候,定义一套指令集语法,用户输入之后翻译。 实现接口方法为 parse(context) 和 execute。在java语言中使用较少。