在学习第四章的学习中,主要讲解了面向复用性的编程,其中介绍了许多面向复用编程的设计模式,需要我们多加注意,以及在实践中高效使用。
在这一章节一共讲解了三种 结构型模式(Structural Patterns) 和三种 行为型模式(Behavioral Patterns) ,我们下面依次进行介绍。
首先介绍三种行为型模式:
适配器模式(Adapter Pattern)
解决的问题:将已有的对象放置到新的环境中时接口不适配的问题。
解决方法:通过将一个类的接口转换为客户希望的接口形式复用已经拥有的类。
组成成分:
1. 目标接口(Target):客户端所要求的接口;
2. 适配者类(Adaptee):当前已拥有的需要适配的类;
3. 适配器类(Adapter):需要实现目标接口,通过继承或委派适配者类,实现功能的转换。让客户端能通过目标接口的形式访问适配者类。 **
处理方式:用户调用适配器类,适配器负责将功能委托给已有的接口,实现相应的功能。
我们可以实现类适配器或对象适配器**,具体实现后的uml图如下:
装饰器模式(Decorator Pattern)
解决的问题:在动态地给一个类添加新的功能的时候,会由于多次继承引入大量的静态特征,导致代码爆炸。
解决方法:对具体功能划分,继承指定的“装饰器”抽象类
组成成分:
1. 抽象构件(Component):需要被装饰的类所实现的接口;
2. 具体构件(ConcreteComponent):实现了抽象构件接口的类;
3. 抽象装饰(Decorator):一个实现了具体构建的抽象类,其中维护着一个构件类型的对象,以及各种对应的抽象装饰方法。
4. 具体装饰(ConcreteDecorator):实现了抽象装饰接口的类。
处理方式:用户将具体的对象传入装饰器类进行装饰,装饰器类会返回一个具有附加功能的对象。
实现装饰器模式后的uml图如下:
外观模式(Facade Pattern)
解决的问题:随着软件开发的过程,子系统的数量会慢慢增多,客户端需要访问更多的子系统,这提高了客户访问系统的复杂度,外观模式提供了一个统一的接口,降低客户访问子系统时的复杂度。
解决方法:提供了一个高级接口,其中包含了对各个子系统的引用(委派),客户端可以通过外观接口访问子系统。
组成成分:
1. 外观类(Facade):提供了访问各个子系统的接口,再通过委派将功能委托给各个子系统;
2. 子系统类(SubSystem):各有功能的子系统类;
处理方式:用户申请一个外观类的对象,即可调用外观对象中的方法对子系统的功能进行调用。
实现外观模式后的uml图如下: