zoukankan      html  css  js  c++  java
  • 装饰设计模式

    装饰设计模式:Decorator Pattern,又称装饰者模式。特点是可以在不改变这个类的情况下,动态的为其添加新的功能,在运行时动态对对象进行扩展。主要实现方式是通过将其包装成另一个对象并添加新的功能来实现动态的添加功能。也就是说,是通过另一个类来将本来的对象包裹其中。

    在实现的时候需要注意使装饰对象和真实对象使用相同的接口,这样可以使客户端对象在使用的时候用相同的接口来实现交互。

    适用的场合:

    需要扩展一个类的功能,并动态的赋予对象新的特性时。

    需要动态的为对象添加新的功能,且需要动态的撤销这些功能时。

    需要增加一些基本功能的排列组合产生大量功能时。

    优点:

    虽然直接继承同样可以实现装饰模式的功能,但是装饰模式可以提供比直接的继承方式更多的灵活性。并且可以根据不同的排列组合产生不同的结果。

    缺点:

    比普通的继承复杂度更高。

    会产生过多的类,如果过度使用,会使项目的复杂性提高。

    UML图如下:

    clip_image002

    下面是代码:

    public class test
    {
    public static void main(String args[])
    {
    Component com=new Component();
    DecortorA a=new DecortorA();
    DecortorB b=new DecortorB();
    a.add(com);
    b.add(a);
    b.show();
    System.out.println();
    }
    }
    class Component
    {
    String name="com";
    void show()
    {
    System.out.println(name);
    }
    }
    class DecortorBase extends Component
    {
    Component com;
    void show()
    {
    System.out.println("Decortor");

    }
    }
    class DecortorA extends DecortorBase
    {
    void add(Component c)
    {
    com=c;
    }
    void show()
    {
    System.out.println("A");
    com.show();
    }
    }
    class DecortorB extends DecortorBase
    {
    void add(Component c)
    {
    com=c;
    }
    void show()
    {
    System.out.println("B");
    com.show();
    }
    }

    运行结果如下:

    联系我:renhanlinbsl@163.com

    2016-7-31

    19:44

  • 相关阅读:
    【Tools__技巧】软件技巧整理归纳
    【JS__框架】主页面F5刷新iframe框架页面
    为类型增加选择属性
    单元测试mock当前时间
    silverlight属性改变事件通知
    修改博客园推荐人数增加W效果
    Enum扩展特性,代替中文属性
    Python爬虫-萌妹子图片
    吐槽下魅族
    使用openXML 不用插件导出excel
  • 原文地址:https://www.cnblogs.com/ives/p/decortor_pattern.html
Copyright © 2011-2022 走看看