在开发过程中,为了扩展一个类的功能我们通常使用继承一个子类来实现。但是当扩展的功能过多时,则可能出现子类过多,类图过于膨胀。所以我们使用装饰者模式来避免这个问题。 装饰者模式提供了一种给一个类添加职责的方法,它比使用继承更加灵活,因为它能将职责加到类的指定实例中,它也允许定制一个类,而无需在继承层次结构中创建高层次子类。 装饰者模式的缺点: 1 Decorator和它包含的组件是不一样的,这样,检测对象类型时会失败。 2 装饰模式会使一个系统带有“大量的小对象”,对于维护代码的程序员来说,它们看起来都差不多,维护起来很困难。
装饰者模式图:
举例:如何实现广告推介功能
桥接模式:很容易理解,为了扩展类的功能,通过在抽象类中加入一个扩展功能接口。
举例:如为了让手机在通话功能基础上再拥有上网功能,我们简单的在手机类中加入上网接口模块,在让智能手机类在创建时就实现该接口功能。
适配者模式:相应的分为类适配器模式和对象适配器模式。为了扩展功能或是替换掉相应的功能,我们加入了一个新的有特殊功能的适配者类来实现功能扩展。
总结:类适配器模式类似于装饰者模式,为了实现功能的扩展新建了一个功能扩展类,将产品类在初始化时将扩展类传入来替换掉相应的功能函数。
如类适配器模式为了实现不同功能的Request()函数,将Adapter类对象的request()函数替换成其父类Adaptee的SpecificRequest()函数。
而装饰者模式则是在子类中存有基类对象,Decorator类初始化时传入基类对象变量(但实际上可能是另一个子类对象),然后进行的功能扩展。
装饰者模式与桥接模式的相同点在于他们都存在一个扩展功能对象。不同点在于扩展的对象与原基类之间的关系。
装饰者模式与对象适配器模式的相同之处在于都在存在一个扩展功能对象。但是装饰者模式是在基类中添加,而对象适配器则是在子类中添加。