第四章 结构型模式
4.1适配器模式
- 代码重用的方案,即将已有的代码适配或者包装到一些新接口中,而这些接口是在最初设计代码的时候没有考虑到的。
4.2 代理模式
- 目的是为真实对象提供一个代理对象,二者占用的内存一样,在调用前后执行其他操作时,由代理对象代理原对象完成。
- 适配器模式和代理模式之间的主要区别在于代理模式提供了完全相同的接口。装饰器模式增强了接口,适配器模式更改了接口。
- 代理对象没有业务逻辑,它在建立起一个句柄后,会将业务请求委托给真实对象来处理。
4.3 装饰器模式
- 有时需要在现有代码中添加或删除一些功能,同时对现有的代码结构不会造成影响,并且这些删除或者增加的功能又不足以做成一个子类。
- 装饰器模式的目的是动态扩展现有对象的功能而不更新原有代码。它能够适配原始接口,并且使用组合而不是子类化来扩展功能。
public static void main(String[] args) {
final String text = "text";
final PrintText object = new PrintAsciiText();
final PrintText printer = new PrintTextHexDecorator(object);
object.print(text);
printer.print(text);
}
interface PrintText{
public void print(String text);
}
static class PrintAsciiText implements PrintText{
public void print(String text){
System.out.println("Print ASCII: "+text);
}
}
static class PrintTextHexDecorator implements PrintText{
private PrintText inner;
public PrintTextHexDecorator(PrintText inner){
this.inner = inner;
}
public void print(String text){
String hex = text.chars().boxed().map(x->"0x"+Integer.toHexString(x)).collect(Collectors.joining(" "));
inner.print(text+"-> HEX:"+hex);
}
}
4.4 桥接模式
- 桥接模式的目的是将抽象与实现解耦,使得二者可以独立地变化。
4.5 组合模式
4.6外观模式
- 目的是为复杂的子系统提供单一的统一接口。通过为最重要的用例提供接口,能够简化大型和复杂系统的使用。
4.7享元模式