一.分类
1.创建性:对象实例化的模式,解耦对象的实例化过程
2.结构性模式:把类或对相结合在一起形成一个更大的结构
3.行为性模式:类和对象如何交互及划分责任和算法
二 . 实现
1.单例模式
优点:该类只存在一个实例,节省系统资源;对于需要频繁创建销毁的对象,使用单例模式可以提高系统性能。
缺点:不能外部实例化(new),调用人员不清楚调用哪个方法获取实例时会感到迷惑,尤其当看不到源代码时
2.工厂模式
提供一个产品类的接口。产品类均要实现这个接口(也可以是abstract类,即抽象产品)。
提供一个工厂类的接口。工厂类均要实现这个接口(即抽象工厂)。
由工厂实现类创建产品类的实例。工厂实现类应有一个方法,用来实例化产品类。
3.抽象工厂模式
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
4.建造者模式
适用于创建复杂对象,将复杂对象分解成若干部分,各部分用一定的算法构成,建造者把复杂对象的表示与创建分离,并且不暴露产品内部结构
5.代理模式
为其他对象提供一种代理以控制对这个对象的访问
静态代理:静态定义代理类,我们自己静态定义的代理类。比如我们自己定义一个明星的经纪人类
动态代理:通过程序动态生成代理类,该代理类不需要我们自己定义,是程序自动生成
6.装饰模式
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
动态的给一个对象添加功能,以及动态的撤销该功能
装饰模式:侧重给一个实现类动态添加功能,不会对实现类的方法进行过滤拦截
代理模式:侧重将一个实现类的功能,委托给代理类来处理,可以对实现类的方法进行过滤拦截(某种情况下,可能不执行实现类的方法)
7.观察者模式
当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系
Java中观察者模式需要被观察者继承java.util.Observable类,需要观察者实现java.util.Observer接口。其中Observer接口中有一个update方法,它在被观察者的某些位置发生改变时会被自动调用。