设计原则:把应用中可能需要变化的,把它们独立起来,不要和那些不需要变化的混在一起
封装:把变化的独立起来叫封装,好让其他部分不受影响
设计原则:针对接口编程,不针对实现编程
设计原则:多用组合,少用继承
1.开闭原则:只对扩展开发,对修改关闭
2.里氏替换原则:子类必须能够替换父类,否则就不应该设计成子类,子类只能扩展基本而不能隐藏覆盖基累
3.依赖倒置原则:设计应该依赖抽象而不是具体化
4.将大的接口打散成一些小的接口
5.多用组合,少用继承
6.一个对象尽可能少的去了解别的对象,松耦合。
1策略模式:定义了算法族,分别分装起来,让他们之间可以相互替换,让算法的变化独立于使用算法的客户
比如 Collection中的Comparator
2观察者模式:定义了对象之间一对多依赖,当对象一个状态改变时,他所有的依赖者都会得到通知并自动更新
设计原则:为了交互对象的松耦合设计而努力
java.util.Observer和java.util.Observable就是一种观察模式
view的Listener就是观察者模式
MVC 中的Model和View 也是构成观察者模式,一个Model可能对应两个以上的view,当Model发生改变的时候,对应的view也得到了更新
设计原则:类应该对扩展开放,对修改关闭
装饰器模式可以在被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的
3装饰者模式:动态地将责任附加在对象上,若要扩展功能,装饰器比继承提供了更有弹性的替代方案
Java I/O 装饰器模式
简单工厂:定义了一个创建对象的方法
factory (String type){
if(type .equals(){
return new product;
}
工厂方法和抽象工厂都是基于继承
4工厂方法:定义了创建对象的接口,但由子类决定实例化类的哪一个,工厂方法让类把实例化延迟到子类
超类定义create接口,由子类实现改方法
设计原则:要依赖抽象,不要依赖具体类
5抽象工厂:提供一个接口,用来创建相互依赖对象的家族,而不需要明确指定具体类
定义了一个工厂的接口,然后工厂子类实现接口方法
6单例模式:Singleton Pattern 用来创独一无二的,只能有一个实例的对象的入场券
确保一个类只有一个实例,并提供一个全局访问点
同步一个方法比不同步效率下降100倍,当频繁使用getInstance时候就要考虑 同步getInstace的代价
如果应用程序总是创建并使用单件实例,或者创建和运行时方面的负担不太繁重 可以使用static instance 来急切初始化,JVM在加载
这个类的时候马上创建单例的实例,保障在任何线程访问之前一定创建好
private volatile static Singleton uninqueInstance;
private Singletor(){};
public static Singleton getInstance(){
if( uniqueInstance == null)(
synchronized (Singleton.class){
if(uniqueInstance ==null){
uniqueInstance = new Singleton();
return uniqueInstance;
双重检查加锁,首先检查是否实例已经创建了,如果尚未常见, 才进行同步,这样一来,只有第一次会同步
7命令模式:将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销操作。
命令只暴露一个execute方法
NoCommand对象是一个空对象,当你不想返回一个有意义的对象时,空对象就是有用
线程池,日程安排,工作队列,线程调用execute
8适配器模式:将一个类的接口,转换成客户期望的另一个类的接口,适配器让原本接口不兼容的类可以合作
Iterator android 的view的 Adapter
类适配器和接口适配器
9外观模式:提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用
外观模式可以使得我们和子系统紧耦合
设计原则:只和你的密友谈话
10模板方法模式:在一个方法定义一个算法的框架,而将一些步骤延迟到子类中,模板方法可以使子类不改变算法结构的同时,重新顶一个算法的步骤
好莱吾原则:别调用我,我会调用你
各种callback,activity 的回调方法
模板方法主要以继承为主,而策略模式是对象的组合
11迭代器模式:interface iterator hasNext next
提供一种方法顺序访问一个聚合对象中的各元素,而又不暴露其内部表示
设计原则:一个类只有一个引起变化的原因
12组合模式:容许你讲对象组合成树结构以表现“整体\部分”层次结构,组合使得客户能以一致的方式处理个别对象和对象组合
menu
查询目录和文件
13状态模式:容许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类
状态机
14代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的的访问
binder机制
15生成器模式:封装一个产品的构造过程,并容许按步骤来构造 Builder Patten
StringBuilder
16蝇量模式:某个类的实例用来提供一些虚拟实例
String,Integer
17原型模式 Prototype:当创建给定类的实例很昂贵或很复杂时,就使用原型模式
clone
18桥接模式:分为功能层和实现层 bridge
19.访问者 Visitor
20.责任链模式 chain of responsibilty
21.中介者 Mediator
22 备忘录 Memento
23 解释器 Iterpreter :xml解析
}