设计模式学习笔记(六)—Decorator装饰模式
《设计模式》一书对Decorator是这样描述的:
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式比生成子类更为灵活。
也就是说:动态地给对象添加一些额外的功能。它的工作原理是:创建一个始于Decorator对象(负责新功能的对象)终止于原对象的一个对象的“链”。例如,我们要为超市的收银台设计一个打印票据的程序,有的需要打印票据的头信息,有的需要打印票据的页脚信息,有的只需要打印票据的内容。如果针对每一种情况都修改一次程序,势必会很麻烦。这时我们可以考虑使用Decorator模式。其结构类图如下:

代码如下:
abstract class Component{ abstract public void printTicket();}class SalesTicket extends Component{ public void printTicket() { System.out.println("打印出salesTicket的内容"); }}abstract class TicketDecorator extends Component{ private Component myTrailer; public TicketDecorator(Component myComponent){ myTrailer=myComponent; } public void callTrailer(){ if(myTrailer!=null) myTrailer.printTicket(); }}class Header extends TicketDecorator{ public Header(Component myComponent){ super(myComponent); } public void printTicket(){ System.out.println("打印salesTicket的头信息"); super.callTrailer(); }}class Footer extends TicketDecorator{ public Footer(Component myComponent){ super(myComponent); } public void printTicket(){ super.callTrailer(); System.out.println("打印salesTicket的页脚信息"); }}public class Client { public static void main(String[] args) { System.out.println("===================================="); new Header(new Footer(new SalesTicket())).printTicket(); System.out.println("===================================="); new Footer(new Header(new SalesTicket())).printTicket(); System.out.println("===================================="); }}