Decorator

装饰模式,他的本质是对核心对象的行为进行封装。比方说ClassA一个方法OperationA(),如果想要在执行OperationA之前想要执行OperationB(),同时又不影响ClassA,这个时候就可以使用装饰模式,设计ClassB,里面有OperationB(),执行完OperationB内容之后再来执行类A的operationA()操作。这里面的类B维持一个对类A的引用,这样可以保证对于操作B执行完毕之后调用类A的OperationA()

image

这就好像是给ClassA穿上了意见衣服,或者说加上了一个装饰的感觉,其实就是对行为一种封装。这种封装的好处是对于原始类(ClassA)没有任何影响。

对于拨号猫,有的希望他的拨号声音很大,有的希望拨号声音正常,对于拨号音量调节这个行为具有不定性,那么可以使用装饰模式,来实现定制化:
image

对于HayesModem以及ZoomModem直接继承自Modem,可以理解为他们是目标类(被操作类)。他们有了一个设置音量的行为,对于LoudDialModem而言,他是作为类(操作类),他会调用其中某一种Modem,但是在调用他们的Dial的方法之前,它会设置一下音量为11(大声),这样就对于拨号这个行为进行了修饰。所以对于“修饰”模式而言,保持对于基类接口的引用很重要。所以操作类本质是对目标类的一个封装,进而实现对于目标类行为的二次封装。

原文地址:https://www.cnblogs.com/xiashiwendao/p/3209406.html