摘要: 代码模式为一个对象提供代码,并由代理控制对原对象的引用。在一定的情况下,客户不想或不能操作原对象,就可以通过代理以中介的方式控制。比如 windows 快捷方式模式图总结1. 代理既可以提供对原对象的原始接口引用,也可以扩展原始对象的功能或设置上下文(如上图) 阅读全文
posted @ 2014-05-23 22:30 周卓 阅读(116) 评论(0) 推荐(0) 编辑
摘要: visitor 设计模式封装了施加于对象的操作,不同的对象对应不同的操作。对象的识别需要 instanceof() 的帮助。模式图:代码:总结1. 破坏封装性2. 面对修改开放 阅读全文
posted @ 2014-05-23 22:22 周卓 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 桥接模式将抽象化与实例化脱耦,使两者可以独立的变化。一般模式图:更清晰的,一个设计modem的模式图代码:总结1. 桥接模式和策略模式有点相似,但策略模式只是将算法的实现部分抽象出来。桥接模式更加注重抽象化和实例化的分离,往往,策略模式的一部分是纯粹的抽象方法,另一部分是纯粹的实现 阅读全文
posted @ 2014-05-23 22:14 周卓 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 策略模式,将一组算法抽象成子类,继承同一个基类,实现相同的接口。将算法的具体实现和需要算法处理的数据分开,是一个解耦合的过程。当需要新的算法或删除某个算法时,不需要做太多的修改。模式图:代码: 阅读全文
posted @ 2014-05-23 21:52 周卓 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 观察者模式定义了一种一对多的依赖关系,让多个观察者可以同时监听某一个主题对象。这个主题对象发生变化时,就会通知所有的观察者,使他们能够更新自己。模式图:代码: 阅读全文
posted @ 2014-05-23 13:24 周卓 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 装饰者模式用来扩展类的功能,是继承的替代方案。相比于继承,装饰者模式更加灵活。模式图:装饰者模式的实现有两个要点:1. 装饰者和具体的组件类继承同一个抽象组建类2. 装饰者以组合的形式持有抽象或具体的组件类 阅读全文
posted @ 2014-05-23 12:57 周卓 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 适配器模式把一个类的接口变换成客户端期待的另一个类的接口,使原本接口不匹配的两个类能够在一起工作。适配器有两张实现形式,分别为类的适配器模式和对象的适配器模式类的适配器模式:我们的目标是将SpecificRequest()转化到Request()。类的适配器解决方案是创建一个类Adaptor继承Ad... 阅读全文
posted @ 2014-05-23 11:20 周卓 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 对于某些类,我们需要保证系统中只能有一个实例,这种类的设计用到singleton模式模式。单线程的singleton模式是 straightforward的,下面给出Java和C++11的线程安全singleton实现Java:public class Singleton { private sta... 阅读全文
posted @ 2014-05-23 10:59 周卓 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 有时候,我们要求工厂创建一组具有某些属性的产品,比如来一桌法式大餐。具体的菜式属于产品,而法式属于产品的属性。将这两个概念抽象一下,就有了产品族和产品等级结构的概念:同一列的所有产品继承同一个父类,同一行的产品构成一个产品族。模式图从图中看出,抽象工厂可以同时依赖于两个产品类,这两个产品类构成一个产... 阅读全文
posted @ 2014-05-23 10:45 周卓 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 当增加新的产品时,我们就需要修改简单工厂类,这违反了涉及模式中的 “对扩展开放,对修改关闭”。解决方案是抽象工厂类,让抽象工厂类的子类去实例化具体产品。在这种设计下,每增加一个产品就需要增加一个对应的具体工厂,看似繁琐,但扩展性好。类图代码 阅读全文
posted @ 2014-05-23 10:00 周卓 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 将类的创建任务委托给工厂,包含具体创建哪个类的信息作为参数(通常为String)提交给简单工厂优缺点:1. 工厂模式含有必要的判断逻辑,可以决定在什么时候创建哪一个产品的实例,客户端可以免除直接创建产品的责任,而仅仅需要消费产品。简单工厂通过这种做法实现了责任的分割。缺点:1.系统扩展困难,一旦添加... 阅读全文
posted @ 2014-05-23 09:33 周卓 阅读(232) 评论(0) 推荐(0) 编辑