设计原则:
- 找出应用中可能需要 变化的地方,取出并封装起来,不要和那些不需要变化的代码混在一起;
- 针对接口编程,而不是 针对实现编程;(利用多态执行时会根据实际情况执行真正的行为);
- 多用组合 ,少用继承;( 很有弹性,运行时动态的改变行为)
- 设计原则:类应该对扩展开发;对修改关闭;目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为;可以弹性的应对改变,可以接受新的功能来应对改变的需求。
- 设计原则: 要依赖抽象,不要依赖具体类;(不能让高层组件依赖低层组件)1.变量不可以持有具体类的引用; 2.不要让类派生自具体类;3. 不要覆盖 基类中已实现的方法;
- 好莱坞原则: 别调用我们,我们会调用你;
设计模式:
1.策略模式 :
定义了算法族,分别封装起来,让他们之间可以相互替换,使得算法的变化独立于使用算法的客户;
2.观察者模式:
定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知,并自动更新;
主题和观察者之间松耦合; 主题只知道观察者实现了某个接口,主题不需要知道观察者的具体类是谁,做了什么;
改变主题或观察者不会影响另一方;因为两者是松耦合的;
设计原则:为了交互对象的松耦合设计而努力;
3.装饰者模式;
动态的将责任附加到对象上。若想扩展功能;装饰者提供比继承更有弹性的方案;
Java I/O 装饰着(装饰着和被装饰着有相同的超类型 可以用一个或者多个装饰着包装一个对象;装饰者可以在被委托装饰着的行为之前或之后加上自己的行为;以达到特定的目的)
4.工厂方法模式:
定义一个创建对象的接口。但由子类决定要实例化的类是哪一个;工厂方法让类把实例化推迟到子类;
( 工厂方法模式 封装具体类型的实例化;)
识别变化的方面;封装创建对象的代码;使用静态方法,不需要创建对象的方法来实例化对象;但是不能够 通过继承改变方法的行为;
5.抽象工厂模式:
提供一个接口 用于创建相关或依赖对象的家族;而不需要明确指定具体类;抽象工厂允许客户使用抽象的接口来创建一组相关的产品;抽象工厂的任务是定义一个负责创建一组产品的接口。这个接口内的每个方法都负责创建一个具体产品,同时我们利用实现抽象工厂的子类来提供实现这些具体的做法。总结:抽象工厂模式相对于工厂方法模式来说,每个具体工厂可以生产一族产品(即多种产品);而工厂方法模式是具体工厂生产相应的具体产品,只能生产一种产品。当产品族中只有一种产品时抽象工厂模式退化成工厂方法模式。
6.单例模式:
确保一个类只有一个实例,并提供一个全局访问点;
加上getInstancesynchronized方法使得每个线程在进入这个方法前,先等候别的线程离开改方法;不会有两个线程同时进入这个方法;JVM加载类时,创建唯一单间实例;
7.命令模式 :封装调用
将请求 封装成对象,以便使用不同的请求,队列来参数化其他对象;命令模式可支持撤销;对象数组,为了避免每次都检查对象是否为空,添加一个不做事情的命令;
public class NoCommand implements Commond{
public void execute(){}
}
public interface Command (){
public void execute();
public void undo();
}
撤销的命令;操作反过来;命令模式将发出的请求对象和执行请求的对象解耦;在被解耦的两者之间是通过命令对象进行沟通的命令对象封装了接收者和一个或一组动作;
8.适配器模式:
将一个接口转换成另一个接口,以符合客户的期望;
所谓对象适配器,简单的说就是适配器实现我们的目标接口,但是并不继承需要被适配的类。而是通过在适配器的构造函数中将需要被适配的类传递进来从而进行适配。
类包含目标对象,实现相同的接口; 对象适配器;
如果一段时间后想改变接口,适配器可以将改变的部分封装起来,客户不会为了应对不同的接口而每次跟着修改;类的适配器;通过继承实现;
9.外观模式:
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用;(计算机启动)
设计原则:减少对象之间的交互:只与你的密友谈话;
10.模板方法
定义了一个算法的步奏,并允许子类为一个或多个步奏提供实现;
模板方法模式:在一个方法中定义了一个算法的骨架 ,而将一些步奏延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步奏;
创建算法的模板,就是一个方法; 将算法定义成一组步奏;其中任何步奏都可以是抽象的,由子类实现;保证算法结构不变。同时由子类提供部分实现;
hook(); 默认不做事的方法;钩子方法;
11.迭代器模式
提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露内部表示。
12.组合模式
允许你将对象组合成树形结构来表现整体部分的层次结构组合能让客户以一致的方式处理个别对象及对象组合。
13.状态模式
允许对象在内部状态改变时改变它的行为,对像看起来好像修改了它的类
将状态封装为独立的类,并将动作委托到当前的对象;