一、设计原则
模式一:策略模式
定义了算法族,分别封装起来,让他们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。
原则1:将会变化的部分取出并封装起来,使得让其他部分不会受到影响
原则2:针对接口编程,而不是针对实现编程。
2.1「针对接口编程」真正的意思是「针对超类型(supertype)编程」
2.2 接口编程的实例:
原则3:多用组合,少用继承
收获:
模式二:观察者模式(Observer)
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
原则1.为了交互对象之间的松耦合设计而努力。
(一)松耦合的威力
当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节。
观察者模式提供了一种对象设计,让主题和观察者之间松耦合。
模式三:装饰者模式:
动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
原则1、类应该对扩展开放,对修改关闭。
实例:
四、工厂方法模式:
定义一个创建对象的接口,但由子类来决定要实例化的类是哪一个。工厂方法把实例化推迟到了子类。
依赖倒置原则:要依赖抽象,不要依赖具体类。
1.简单工厂和工厂方法
工厂方法使用的方法是继承。
2.抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体的类。使用对象的组合。
3.抽象工厂模式-与-工厂方法模式区别 -wyxhd2008的专栏 - 博客频道 - youkuaiyun.com
http://blog.youkuaiyun.com/wyxhd2008/article/details/5597975
五、单件模式:确保一个类只有一个实例,并提供一个全局访问点。
1.用来创建独一无二的,只能有一个实例的对象的入场券。
2.构造器的声明是私有的,使用一个静态的getInstance();
3.解决多线程下单件模式问题
(1)变成同步(synchronized)方法(会影响性能)。
(2)不使用延迟实例化的做法,使用“急切”创建实例
(3)使用“双重检查加锁”,
java中volatile关键字的含义- God Is Coder - 博客园
http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html
六、命令模式:把方法调用封装起来
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。命令模式也支持撤销的操作。
七、适配器模式(将接口转化为客户期望的接口)
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
八、外观模式(简化接口)
提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
(使得客户和子系统之间避免紧耦合)
干货:
1.“最少知识”设计原则
2.适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
九、模板方法模式
在一个算法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
1.模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。
十、迭代器模式
提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
十一、组合模式
允许将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。