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

    装饰模式
    装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

     示图代码如下:

    1 public abstract class Component {
    2     public abstract void operation();
    3 }
    Component
    1 public class ConcreteComponent extends Component {
    2 
    3     @Override
    4     public void operation() {
    5         System.out.println("具体对象的操作");
    6     }
    7 
    8 }
    ConcreteComponent
     1 public abstract class Decorator extends Component {
     2     protected Component component;
     3     
     4     public Component getComponent() {
     5         return component;
     6     }
     7 
     8     public void setComponent(Component component) {
     9         this.component = component;
    10     }
    11 
    12     @Override
    13     public void operation() {
    14         if(component!=null){
    15             component.operation();
    16         }
    17 
    18     }
    19 
    20 }
    Decorator
     1 public class ConcreteDecoratorA extends Decorator {
     2     String addedState;
     3     @Override
     4     public void operation() {
     5         super.operation();
     6         addedState = "New State";
     7         System.out.println("具体装饰对象A的操作");
     8     }
     9 
    10 }
    ConcreteDecoratorA
     1 public class ConcreteDecoratorB extends Decorator {
     2 
     3     @Override
     4     public void operation() {
     5         super.operation();
     6         addedBehavior();
     7         System.out.println("具体装饰对象B的操作");
     8     }
     9     
    10     private void addedBehavior(){
    11         System.out.println("--咕噜噜---");
    12     }
    13 }
    ConcreteDecoratorB
     1 public class TestDecorator {
     2     public static void main(String[] args) {
     3         ConcreteComponent con = new ConcreteComponent();
     4         ConcreteDecoratorA d1 = new ConcreteDecoratorA();
     5         ConcreteDecoratorB d2 = new ConcreteDecoratorB();
     6         
     7         d1.setComponent(con);
     8         d2.setComponent(d1);
     9         d2.operation();
    10         
    11     }
    12 }
    test
    具体对象的操作
    具体装饰对象A的操作
    --咕噜噜---
    具体装饰对象B的操作
    测试打印

    装饰模式利用setComponent来对对象进行包装的,这样每个装饰对象实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,就不需要关心如何被添加到队形链当中
    如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类。同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator,而可以把Decorator和ConcreteDecorator的责任合并成一个类。

  • 相关阅读:
    小程序动态添加input(一)
    vue样式穿透
    小程序判断用户是否授权位置信息
    【超详细】MySQL学习笔记汇总(四)之排序查询
    【超详细】MySQL学习笔记汇总(三)之进阶1、2测试
    【超详细】MySQL学习笔记汇总(二)之条件查询
    【超详细】MySQL学习笔记汇总(一)之基础查询
    【超详细】MakeDown(Typora)+PicGo+Gitee实现图床
    JavaDOC生成文档
    学习Hive遇到的问题
  • 原文地址:https://www.cnblogs.com/cai170221/p/13446105.html
Copyright © 2011-2022 走看看