1、适配器模式
适配器模式将一个借口转化为客户希望的另一个接口,从而使借口不兼容的类可以一起工作。
2、桥接模式
桥接模式将实现和抽象分离,使他们都可以独立变化
首先,如果不使用桥接模式,写出代码要适应两个方面的变化,抽象变化和实现变化都会导致代码的变化。比如说描述不同车走在不同路面上,可以形成如下架构:
显然,如果路的类型增加修改,会新增很多代码,而且很多是重复的,应用桥接模式如下:
显然,在这里,客户端需要同时和abstractroad和abstractcar相互耦合。这可以用创建类模式解决。
3、组合模式
通过组合多个对象形成树形结构。在一个模式对于单个的对象和容器对象的使用具有一致性。
在组合模式中,容器对象和叶子对象进行递归组合,使用户在使用过程中无需区分,可以对他们进行一致的处理。
4、装饰模式
装饰模式是一种对象结构型模式,可以给一个动态对象增加额外的职责,就增加对象功能而说,装饰模式比生成子类更加灵活
比如说星巴克提供咖啡,不同种类的咖啡还可以添加一到多种不同种类配料,但是种类实在太多,这时候如果使用类的继承,就会产生类爆炸的结果。
可以采用如下架构
客户端调用代码如下
public class StarbuzzCoffee {
/**
* @param args
*/
public static void main(String[] args) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription() + " $" + beverage.cost());
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription() + " $" + beverage2.cost());
}
}
装饰者模式是一个非常聪明的设计,装饰者类继承于饮料类,却将饮料类的对象作为自己的数据成员,实现了对饮料类的对象的封装,可以对其进行修改。
5、代理模式
代理模式就是利用第三者,连接客户端和目标对象,减少客户端和对象之间的耦合
6、外观模式
适配器模式的目的在于解决接口都不兼容的问题,而外观模式的目的在于简化接口
在上图所示架构中,将诸多功能封装在一个简单的类中,统一对外提供简明的功能
7、享元模式
享元模式就是系统共享技术有效地支持大亮粗粒度对象的复用,适用于系统使用少量对象,且比较相似,状态变化小
内部状态:在享元内部不随外界环境改变的共享部分,存储在享元对象内部
外部状态:随着环境而改变,不能够共享,应该由客户端负责
享元类的核心在于享元工厂类,它创建了一个存储享元对象的享元池,用户需要是可以从中获取。
如图所示,调用享元对象的外部状态需要客户手动传入参数。