您的位置:首页 > 编程语言 > Java开发

java设计模式之装饰模式(7)

2014-07-30 10:36 411 查看
属于结构型模式,装饰模式就是动态的给一个对象增加一些功能。

要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

java的IO流的实现就是装饰模式。可以轻松的把一种流装饰成为另一种流。

举个例子:计算牛奶的价格。 纯牛奶3.0元。加糖1.0元,加食用颜料2.0元。等等。

我们需要根据顾客点的内容,动态的计算价格。下面看代码:(借用了一个很流行的例子)



package com.pattern.struct.decorator;

public interface Milk {

	public float price();
	
}




package com.pattern.struct.decorator;
public class PureMilk implements Milk {//纯牛奶
	@Override
	public float price() {
		return 3.0f;
	}
}




package com.pattern.struct.decorator;

public class Decorator implements Milk {
	private Milk milk;
	
	public Decorator(Milk milk){
		this.milk = milk;
	}
	@Override
	public float price() {
		return this.milk.price();
	}

}




package com.pattern.struct.decorator;

public class ColorDecorator extends Decorator {//颜料

	public ColorDecorator(Milk milk){
		super(milk);
	}
	@Override
	public float price() {
		return super.price()+2.0f;
	}
	
	
}




package com.pattern.struct.decorator;

public class SugarDecotator extends Decorator{//糖

	public SugarDecotator(Milk milk){
		super(milk);
	}

	@Override
	public float price() {
		return super.price()+1.0f;
	}
	
	
}




package com.pattern.struct.decorator;

public class Client {

	public static void main(String[] args) {
		Milk milk = new SugarDecotator(new ColorDecorator(new PureMilk()));//是不是很像 IO流

		float price = milk.price();
		
		System.out.println("一共"+price+"元");

	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: