装饰者模式
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://sophi.blog.51cto.com/340461/66332 |
/* * 装饰者模式 * 动态地将责任附加到对象上。 * 想要扩展功能,装饰者提供有别于继承的另一种选择 */ public class Decorator { public static void main(String[] args) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() + " $" + beverage.cost()); Beverage beverage2 = new HouseBlend(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Milk(beverage2); System.out.println(beverage2.getDescription() + " $" + beverage2.cost()); } } //元件的抽象类 abstract class Beverage{ String description = ""; public String getDescription(){ return description; } abstract public void print(); public abstract double cost(); } //装饰类的抽象类,作用是统一装饰类的接口,方便代码的重用 abstract class CondimentDecorator extends Beverage{ public abstract String getDescription(); } //具体的元件类 class Espresso extends Beverage{ public Espresso(){ description = "Espresso"; } public void print(){ System.out.println("Espresso"); } public double cost(){ return 1.99; } } class HouseBlend extends Beverage{ public HouseBlend() { description = "HouseBlend"; } public void print(){ System.out.println("HouseBlend"); } public double cost(){ return 0.89; } } //具体的装饰者类,注意要持有一个元件类 class Mocha extends Beverage{ Beverage beverage; public Mocha (Beverage beverage) { this.beverage = beverage; } public String getDescription() { return beverage.getDescription() + ",Mocha"; } public double cost() { return 0.20 + beverage.cost(); } public void print(){ beverage.print(); System.out.println("Mocha"); } } class Milk extends Beverage{ Beverage beverage; public Milk (Beverage beverage) { this.beverage = beverage; } public String getDescription() { return beverage.getDescription() + ",Milk"; } public double cost() { return 0.40 + beverage.cost(); } public void print(){ System.out.println("Milk"); beverage.print(); } } 本文出自 ““技”忆” 博客,请务必保留此出处http://sophi.blog.51cto.com/340461/66332 本文出自 51CTO.COM技术博客 |


huixianmaomao
博客统计信息
热门文章
最新评论
友情链接