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

12 篇文章 0 订阅
12 篇文章 6 订阅

属于结构型模式,装饰模式就是动态的给一个对象增加一些功能。

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

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+"元");

	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值