package pattern;
public class StarbuzzCoffee {
public static void main(String args[]) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription() + "$" + beverage.cost(0.5));
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription() + "$" + beverage2.cost(0.5));
Beverage beverage3 = new HouseBlend();
beverage3.setDiscounts(true);
beverage3.setSize(beverage.TALL);
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
System.out.println(beverage3.getDescription() + "$" + beverage3.cost(0.5));
}
}
abstract class Beverage {
public static int TALL = 10;
public static int GRANDE = 20;
public static int VENTI = 30;
public int size = VENTI;
public boolean isDiscounts=false;
public int getSize() {
return size;
}
public void setSize(int insize) {
size = insize;
}
String description = "Unknown Beverage";
public String getDescription() {
return description;
}
public abstract double cost(double discounts);
public boolean isDiscounts() {
return isDiscounts;
}
public void setDiscounts(boolean isDiscounts) {
this.isDiscounts = isDiscounts;
}
}
abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
class Espresso extends Beverage {
public Espresso() {
description = "Espresso";
}
public double cost(double discounts) {
if(isDiscounts){
return 1.99*discounts;
}
return 1.99;
}
}
class DarkRoast extends Beverage {
public DarkRoast() {
description = "DarkRoast";
}
public double cost(double discounts) {
if(isDiscounts){
return 0.99*discounts;
}
return 0.99;
}
}
class HouseBlend extends Beverage {
public HouseBlend() {
description = "House Blend Coffee";
}
public double cost(double discounts) {
if(isDiscounts){
return .89*discounts;
}
return .89;
}
}
class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ",Mocha";
}
public double cost(double discounts) {
return .20 + beverage.cost(discounts);
}
}
class Whip extends CondimentDecorator {
Beverage beverage;
public Whip(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ",Whip";
}
public double cost(double discounts) {
return .20 + beverage.cost(discounts);
}
}
class Soy extends CondimentDecorator {
Beverage beverage;
public Soy(Beverage beverage) {
this.beverage = beverage;
}
public int getSize() {
return beverage.getSize();
}
public String getDescription() {
return beverage.getDescription() + ",Soy";
}
public double cost(double discounts) {
double cost = beverage.cost(discounts);
if (getSize() == Beverage.TALL) {
cost += .10;
} else if (getSize() == Beverage.GRANDE) {
cost += .15;
} else if (getSize() == Beverage.VENTI) {
cost += .20;
}
return cost;
}
}
装饰着模式--动态地讲责任附加到对象上。想要扩展功能,装饰着提供有别于继承的另一种选择。
继承属于扩展形式之一,但是不见得是达到弹性设计的最佳方案。
在我们的设计中,应该允许行为可以被扩展,而无须修改现有代码。
组和合委托可用于在运行时动态地加上新的行为。
除了继承装饰着模式也可以让我们扩展行为。
装饰者模式意味着一群装饰者类,这些类用来包装具体组件。
装饰者 可以在被被装饰者的行为前面或者与后面加上自己的行为,甚至将被装饰者的行为整个替换,而达到特定的目的。
可以用无数的装饰者包装一个组件。
装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。
装饰者会导致设计中出现很多小对象,如果过度使用,会让程序变得复杂。
装饰者模式 有点类似墙壁和染料,墙壁类似被装饰者,染料类似装饰者,我们可以给墙上涂上无穷的染料,而改变墙壁的颜色。或者类似人和衣服, 人为被装饰者 ,衣服为装饰者,衣服不停装饰人,人的外形就会改变,如果衣服有飞的功能,那么人就会飞了。
分享到:
相关推荐
设计模式1,包含了设计模式的基本介绍,以及状态机模式的读书笔记
移动应用 UI 设计, 读书笔记, 记录摘取书籍中重点信息,有助于页面设计,原型设计等
USB读书笔记 USB读书笔记 USB读书笔记 USB读书笔记
JAVA模式笔记,JAVA模式的读书笔记,JAVA模式的读书笔记。
HeadFirst设计模式 读书 笔记
毕业论文读书笔记格式,教会你怎么写毕业论文读书笔记格式
《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》读书笔记《嵌入式Linux C语言应用程序设计》...
计算机技术的读书笔记10篇计算机技术的读书笔记10篇计算机技术的读书笔记10篇计算机技术的读书笔记10篇计算机技术的读书笔记10篇
读书笔记读书笔记读书笔记
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
深入浅出MFC读书笔记3 深入浅出MFC 读书笔记
深入浅出MySQL-读书笔记byCZF深入浅出MySQL-读书笔记byCZF深入浅出MySQL-读书笔记byCZF
r和统计学读书笔记 r和统计学读书笔记 r和统计学读书笔记 r和统计学读书笔记 r和统计学读书笔记
管理者读书笔记PPT模板.ppt
读书笔记