ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 软件工程 >> 设计模式(九)装饰者模式(Decorator Pattern)

设计模式(九)装饰者模式(Decorator Pattern)(2/3)

来源:网络整理     时间:2016-03-28     关键词:

本篇文章主要介绍了"设计模式(九)装饰者模式(Decorator Pattern)",主要涉及到方面的内容,对于软件工程感兴趣的同学可以参考一下: 一、引言  在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如S...

class Customer
    {
        staticvoid Main(string[] args)
        {
            // 我买了个苹果手机            Phone phone = new ApplePhone();
            // 现在想贴膜了            Decorator applePhoneWithSticker = new Sticker(phone);
            // 扩展贴膜行为            applePhoneWithSticker.Print();
            Console.WriteLine("----------------------\n");
            // 现在我想有挂件了            Decorator applePhoneWithAccessories = new Accessories(phone);
            // 扩展手机挂件行为            applePhoneWithAccessories.Print();
            Console.WriteLine("----------------------\n");
            // 现在我同时有贴膜和手机挂件了            Sticker sticker = new Sticker(phone);
            Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker);
            applePhoneWithAccessoriesAndSticker.Print();
            Console.ReadLine();
        }

从上面的客户端代码可以看出,客户端可以动态地将手机配件增加到手机上,如果需要添加手机外壳时,此时只需要添加一个继承Decorator的手机外壳类,从而,装饰者模式扩展性也非常好。

2.3 装饰者模式的类图

实现完了装饰者模式之后,让我们看看装饰者模式实现中类之间的关系,具体见下图:

设计模式(九)装饰者模式(Decorator Pattern)

在装饰者模式中各个角色有:

  抽象构件(Phone)角色:给出一个抽象接口,以规范准备接受附加责任的对象。
  具体构件(AppPhone)角色:定义一个将要接收附加责任的类。
  装饰(Dicorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
  具体装饰(Sticker和Accessories)角色:负责给构件对象 ”贴上“附加的责任。


三、装饰者模式的优缺点

相关图片

相关文章