装饰器模式

装饰器模式

意图:动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式相比生成子类更加灵活;

动机:我们希望给某个对象添加而不是整个类添加一些功能;

下面看个例子:

package com.google;  
/* 
 * 创建一个对象的抽象也就是接口 
*/  
public interface Basket {  
    public void show();   
}

2.被装饰的对象,也就是对接口的一个实现,注意可以有多个实现:

package com.google;
  
/** 
 *身份:被装饰的对象 
 *一个对接口的实现,这个对象表示要我们将来要修饰的篮子里装内容,如果想修饰篮子的造型,还可以创建其他类实现Basket的接口,比如Shape 
 * 不理解的话可以查看java语言的接口抽象机制 
*/  
public class Original implements Basket{  
    public void show(){  
      System.out.println("The original Basket contains");  
    }  
}

3.下面是三个装饰器的实现:

package com.google;
/** 
 *身份:装饰器 
 *为原来的类添加新的功能 
*/  
public class AppleDecorator implements Basket{  
    private Basket basket;  
    public AppleDecorator( Basket basket){  
      super();  
      this.basket = basket;  
    }  
      
    public void show(){  
      basket.show();  
      System.out.println("An Apple");  
    }       
}

package com.google;
  
/** 
 *身份:装饰器 
*/  
public class BananaDecorator implements Basket{  
    private Basket basket;  
    public BananaDecorator(Basket basket){  
        super();  
        this.basket = basket;  
    }  
      
    public void show(){  
        basket.show();  
        System.out.println("A Banana");  
    }  
}

package com.google;  
  
/** 
 *身份:装饰器 
*/  
public class OrangeDecorator implements Basket{  
    private Basket basket;  
    public OrangeDecorator(Basket basket){  
        super();  
        this.basket = basket;  
    }  
      
    public void show(){  
        basket.show();  
        System.out.println("An Oranage");  
    }  
}

4.实现的效果,我们三个修饰器全部用到,装满了篮子,当然也可以只装一个苹果或香蕉

/* 
 * 设计模式:装饰器模式 
 * java 简单的演示 
*/  
package com.google;  

import uni.pattern.decorator.Original;  
import uni.pattern.decorator.*;  
  
public class DecoratorPattern {  
    public static void main(String[] args) {  
        Basket basket = new Original();  
        //一个装饰的过程  
        Basket myBasket =new AppleDecorator(new BananaDecorator(new OrangeDecorator(basket)));   
        myBasket.show();  
    }  
}

运行结果:

run:
The original Basket contains
An Oranage
A Banana
an Apple

原文地址:https://www.cnblogs.com/suncoolcat/p/3331124.html