装饰器模式的设计
我们首先创建一个接口,它为将用于装饰器的类创建蓝图。然后仅仅实现该接口的基本功能。到目前为止我们得到了一个将带有装饰器的蓝图类��?创建一个包��?聚合关系)该接口类型的一个属性。该类的构造方法将该类型接口的实例赋值给该属性��? 该类为装饰器的基类。现在你可以扩展该类,然后创建你所需的具体的装饰器类。具体的装饰器类将添加它自己的方法。在之前或之后执行它自己的方法,然后具体的装饰器类将调用基实例的方法��? 装饰器模式的关键是将方法和基类实例绑定是在运行时将基类的实例传入到构造方法中。因此可以动态的定制特定实例的行为而不影响其他的实例��?/P>
package decorate;
interface IceCream
{
public String makeIceCream();
}
class SimpleIceCream implements IceCream
{
public String makeIceCream()
{
return "SimpleIcecream";
}
}
abstract class IceCreamDecorator implements IceCream
{
IceCream ice = null;
public IceCreamDecorator(IceCream specialicecream)
{
this.ice = specialicecream;
}
public String makeIceCream()
{
return ice.makeIceCream();
}
}
class NuttyDecorator extends IceCreamDecorator
{
public NuttyDecorator(IceCream specialicecream) {
super(specialicecream);
}
public String makeIceCream()
{
return addNuts();
}
private String addNuts()
{
return "IceCream+nuts";
}
}
class HoneyDecorator extends IceCreamDecorator
{
public HoneyDecorator(IceCream specialicecream) {
super(specialicecream);
}
public String makeIceCream()
{
return addHoney();
}
private String addHoney()
{
return "IceCream+honey";
}
}
public class Decorator {
public static void main(String args[])
{
IceCream ice = new SimpleIceCream();
System.out.println(ice.makeIceCream());
NuttyDecorator nuttyicecream = new NuttyDecorator(new SimpleIceCream());
System.out.println(nuttyicecream.makeIceCream());
HoneyDecorator honeyicecream = new HoneyDecorator(new SimpleIceCream());
System.out.println(honeyicecream.makeIceCream());
}
}
/*
*
* 结构:
* IceCream(接口) 定义类与装饰类的接口
* |--SimpleIceCream(类)//定义一个只有基本功能的类(被装饰的)
* |--IceCreamDecorator(抽象装饰类)//定义所有装饰类的抽象类
* |--NuttyDecorator(装饰类)
* |--HoneyDecorator(装饰类)
* 在定义装饰类的抽象里面最重要的一个步骤就是
* 1.定义一个 IceCream ice = new SimpleIceCream 属性
* 2.在抽象装饰类的构造方法中传入被装饰的对象,然后赋值内部属性
* */
http://javasight.net/2011/05/decorator-design-pattern/