码迷,mamicode.com
首页 > 编程语言 > 详细

Java 设计模式—装饰者模式

时间:2015-07-26 20:54:57      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:装饰者模式

在Java编程语言中,嵌套了很多设计模式的思想,例如IO流中的缓冲流就使用到下面要介绍的装饰者设计模式。


示例代码:

 * 抽象构件角色:定义一个抽象接口,来规范准备附加功能的类
 * @author Admin
 *
 */
public interface Drink {             //被装饰者的基类
	public String description();
	public int price();
}


/**
 * 具体构件角色:将要被附加功能的类,实现抽象构件角色接口
 * @author Admin
 *
 */
public class SoyaBeanMilk implements Drink{       //被装饰者的具体类

	public String description() {
		return "豆浆";
	}
	
	public int price() {
		return 2;
	}

}

/**
 * 抽象装饰者角色:持有对具体构件角色的引用(被装饰者)并实现抽象构件角色一致的接口
 * @author Admin
 *
 */
public class Decorator implements Drink{           //装饰者的基类
	private Drink drink;
	public Decorator(Drink drink) {
		this.drink = drink;
	}
	
	public String description() {
		return drink.description();
	}

	public int price() {
		return drink.price();
	}
}


/**
 * 具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能.
 * @author Admin
 *
 */
public class Sugar extends Decorator{       //装饰者具体类
	public Sugar(Drink drink) {
		super(drink);
	}
	public String description() {
		return super.description()+" 糖";
	}
	public int price() {
		return super.price()+1;
	}
}



/**
 * 具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能.
 * @author Admin
 *
 */
public class BlackBean extends Decorator{
	public BlackBean(Drink drink) {
		super(drink);
	}
	public String description() {
		return super.description()+" 黑豆";
	}
	public int price() {
		return super.price()+3;
	}

}

/**
 * 测试类(测试装饰者模式)
 * @author Admin
 *
 */
public class Test {

	public static void main(String[] args) {
		Drink drink = new SoyaBeanMilk();       //被装饰者(豆浆)
		System.out.println(drink.description()+"花费:"+drink.price());
		Drink drink1 = new Sugar(drink);        //糖是装饰者类,用来装饰豆浆
		System.out.println(drink1.description()+"花费:"+drink1.price());
		Drink drink2 = new BlackBean(drink);    //用黑豆来装饰豆浆
		System.out.println(drink2.description()+"花费:"+drink2.price());
		Drink drink3 = new BlackBean(drink1);   //用黑豆来装饰糖豆浆
		System.out.println(drink3.description()+"花费:"+drink3.price());
	}

}


实验结果:

技术分享






版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 设计模式—装饰者模式

标签:装饰者模式

原文地址:http://blog.csdn.net/u012432475/article/details/47071169

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!