ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

装饰者模式Decorator Pattern(3/4)

来源:网络整理     时间:2015-10-08     关键词:对象,装饰者模式

本篇文章主要介绍了"装饰者模式Decorator Pattern",主要涉及到对象,装饰者模式方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 装饰者模式MM们要过生日了 ,怎么也得表示下吧。最起码先送个蛋糕。蛋糕多种多样了。巧克力,冰淇淋,奶油等等。这都是基本的了 ,再加点额外的装饰,如蛋糕里放点花。...

再看看装饰器的抽象类

OtherDecorator
package decorator.demo;  

/** 
 * 其他用来添加蛋糕的东西 
 * @author Nicholas 
 * 
 */  
public abstract class OtherDecorator extends Cake{  
    Cake cake;  
    /** 
     * 引用一个Cake. 
     * 让被装饰者进入装饰者之中。这里用的是构造方法注入。 
     * 这样就可以调用Cake实例的方法了。 
     * @param cake 
     */  
    public OtherDecorator(Cake cake){  
        this.cake=cake;  
    }  
    /** 
     * 让装饰器的子类都去实现getRemark方法。业务需要每个装饰器都要有描述。 
     */  
    public abstract String getRemark();  
}  

下面让我们实现一个蛋糕吧。^_^。。

package decorator.demo;  
/** 
 * 乳酪蛋糕 
 * @author Nicholas 
 * 
 */  
public class CheeseCake extends Cake{  
    /** 
     * 乳酪蛋糕的构造方法 
     */  
    public CheeseCake(){  
        super.remark="乳酪蛋糕";//修改乳酪蛋糕的描述。  
    }  

    /** 
     * 实现了Cake抽象类的getImpression 
     * 吃乳酪蛋糕的感觉。。 
     */  
    public String getImpression() {  
        return "香甜感受";  
    }  

}  

其他实现Cake的类就不列出了,道理是一样的。

下面我们要开始实现具体的装饰器了。

package decorator.demo;  

/** 
 * 给蛋糕添加的花 
 * @author Nicholas 
 * 
 */  
public class FlowerDecorator extends OtherDecorator{  

    /** 
     * 构造函数 
     * 传入一个cake实例,也就是前面所实现的Cake的子类,如奶酪蛋糕,巧克力蛋糕等等。 
     * @param cake 
     */  
    public FlowerDecorator(Cake cake){  
        super(cake);//调用父类的构造方法,可以获取Cake的实例了。就可以调用Cake实例的方法.  
        super.remark="一朵玫瑰花";  
    }  

    /** 
     * 实现了装饰器抽象类的getImpression方法。 
     */  
    public String getImpression() {  
        //这是重点。我们通过构造方法传入的cake实例。对cake进行了装饰,增加了新的功能。  
        return cake.getImpression()+","+"看到一朵花真是happy";  
    }  

    public String getRemark() {  
        return cake.getRemark()+"+"+super.remark;  
    }  
}  

到现在终于大功告成了。。这样方便了很多,可以通过装饰器生成很多种类的蛋糕。

相关图片

相关文章