装饰者模式-星巴克
来源:互联网 发布:数据库主键和外键 编辑:程序博客网 时间:2024/04/30 00:50
例子一、咖啡的制作
例子二、io流的装饰
/** * 饮料类 */public abstract class Beverage {//描述String description = "Unknown Beverage";public String getDescription(){return description;}//价格public abstract double cost();}
/** * 调料类 */public abstract class CondimentDecorator extends Beverage{//所有的调料装饰者都必须重新实现该方法public abstract String getDescription();}
/** * 浓咖啡,是一种饮料 */public class Espresso extends Beverage{public Espresso(){description = "Espresso";}@Overridepublic double cost() {return 1.99;}}
/** * 混合咖啡 */public class HouseBlend extends Beverage{public HouseBlend(){description = "House Blend Coffee";}@Overridepublic double cost() {return 0.89;}}
/** * 摩卡,一种调料 */public class Mocha extends CondimentDecorator{Beverage beverage;public Mocha(Beverage beverage){this.beverage = beverage;}@Overridepublic String getDescription() {return beverage.getDescription() + ",Mocha";}@Overridepublic double cost() {return 0.20 + beverage.cost();}}
/** * 星巴克咖啡的制作 */public class StarbuzzCoffee {public static void main(String[] args) {Beverage beverage1 = new Espresso();//浓咖啡,不需要调料System.out.println(beverage1.getDescription() + " $" + beverage1.cost());Beverage beverage2 = new HouseBlend();//混合咖啡,需要调料beverage2 = new Mocha(beverage2);System.out.println(beverage2.getDescription() + " $" + beverage2.cost());}/** * 运行结果: * Espresso $1.99 House Blend Coffee,Mocha $1.09 */}
例子二、io流的装饰
import java.io.FilterInputStream;import java.io.IOException;import java.io.InputStream;/** * 编写自己的java IO装饰者 * 把流内的所有大写字符转成小写 * FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源, * 它可以直接传输数据或提供一些额外的功能。FilterInputStream 类本身只 * 是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。 */public class LowerCaseInputStream extends FilterInputStream{/** * @param in */protected LowerCaseInputStream(InputStream in) {super(in);}//重写,转化为小写@Overridepublic int read() throws IOException {int c = super.read();return (c == -1 ? c : Character.toLowerCase((char)c));}//重写,转化为小写@Overridepublic int read(byte[] b, int off, int len) throws IOException {int result = super.read(b, off, len);for(int i = off; i < off + result; i++){b[i] = (byte)Character.toLowerCase((char)b[i]);}return result;}}
import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;/** * 测试java IO装饰者 */public class TestLowerCaseInStr {public static void main(String[] args) throws IOException {int c;InputStream in = new LowerCaseInputStream(new BufferedInputStream(new FileInputStream("C:\\Format.txt")));while((c = in.read()) >= 0){System.out.println((char)c);}in.close();}}
- 装饰者模式-星巴克
- 装饰者模式-星巴克
- [装饰者模式]经典的星巴克咖啡问题解决方案
- 3.4 《硬啃设计模式》 第13章 星巴克的饮料计价系统 - 装饰者模式(Decorator Pattern)
- 星巴克“奢侈”的用户体验思维模式
- 垃圾星巴克
- 星巴克的胜利
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- boost.asio系列——socket编程
- Java堆、栈、内存分配
- ArrayList和LinkedList的区别解析
- linux安全-用户行为监控
- 第7篇 面向对象的陷阱
- 装饰者模式-星巴克
- 【一天一篇CPP】对象与指针与数组 对象和const和指针和引用
- 计算机视觉与模式识别 code
- 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
- 项目开发过程----记录如何在2.3.3版本调试slidingmenu(一)
- eclipse环境import工程出现中文乱码问题的解决方案
- hdu 2818 Building Block 并查集(边搜索边更新)
- VC6.0下打开文件失败的解决方法
- Java关键字static、final使用小结