• 装饰者模式


    装饰者模式

    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();

      运行结果是:

      

  • 相关阅读:
    自制编译器 青木峰郎 笔记 Ch8 AST生成
    自制编译器 青木峰郎 笔记 Ch7 JavaCC的action和AST
    POJ 3349-Snowflake Snow Snowflakes-字符串哈希
    POJ 2112-Optimal Milking-二分答案+二分图匹配
    POJ 1258 -Agri-Net- 最小生成树
    POJ 1125-Stockbroker Grapevine-最短路
    POJ 3621-Sightseeing Cows-最优比率环|SPFA+二分
    POJ2976-Dropping tests-01分数规划
    POJ 3020 -Antenna Placement-二分图匹配
    POJ 3041-Asteroids-二分图匹配
  • 原文地址:https://www.cnblogs.com/liangstudyhome/p/4032762.html
Copyright © 2020-2023  润新知