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

    装饰者模式

    1.动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。[由于继承的静态特质使其缺乏灵活性;且随着子类的增多、组合,会导致更多子类的膨胀。类应设计的对扩展开放,对修改关闭。装饰的意思:就是包装一下。

      简短的意思就是:原有的类或对象的功能不能买足要求,需要对对象进行扩展就可以用到装饰者模式

    2.应用场景

      1)需要扩展一个类的功能,或给一个类增加附加责任。

      2)需要动态地给一个对象增加功能,这些功能可以再动态地撤销。

      3)需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。

    3. UML图

    3.代码:

      Component:

    1 public interface Component {
    2     public void operator();
    3     
    4 }

      ConcreteComponent:

    1 public class ConcreteComponent implements Component {
    2 
    3     @Override
    4     public void operator() {
    5         System.out.println("ConcreteComponent");
    6     }
    7 
    8 }

      Decorator:

     1 public class Decorator implements Component {
     2 
     3     protected Component component;
     4 
     5     public Decorator(Component component) {
     6         this.component = component;
     7     }
     8 
     9     @Override
    10     public void operator() {
    11         
    12     }
    13 
    14 }

      ConcreteDecorator:

      

     1 public class ConcreteDecorator extends Decorator {
     2 
     3     public ConcreteDecorator(Component component) {
     4         super(component);
     5     }
     6 
     7     @Override
     8     public void operator() {
     9         super.operator();
    10         component.operator();
    11         addMethod();
    12     }
    13 
    14     // 要给被装饰的类扩展的方法
    15     private void addMethod() {
    16         System.out.println("addMethod");
    17     }
    18 
    19 }

      运行代码:

    1 Component component = new ConcreteDecorator(new ConcreteComponent());
    2 component.operator();

      运行结果是:

      

  • 相关阅读:
    学习数据结构基础
    epoll
    pthread_create
    设置套接字选项
    5中I/O模型
    数据仓库一些整理(列式数据库)
    mysql分区方案的研究
    订单表的分库分表方案设计(大数据)
    从源码角度理清memcache缓存服务
    性能,不是不重要,而是,它没有可维护性重要
  • 原文地址:https://www.cnblogs.com/liangstudyhome/p/4032762.html
Copyright © 2011-2022 走看看