装饰模式
来源:互联网 发布:silverlight mac 编辑:程序博客网 时间:2024/04/28 07:24
/**
* @(#)store.java
*这是headfirst中的讲装饰模式的例子
*用不同的原料(比如mocka来丰富(装饰)咖啡)
*特别注意:抽象类可以有自己的构造函数,但不能显示的调用,可以用子类调用它
*若将Beverage类的price()函数改为普通函数,同样可以实现多态,所以多态不需要虚函数
* @author
* @version 1.00 2008/9/25
*/
abstract class Beverage {//饮料类
public Beverage() {
}
public void description(){//对饮料的描述
System.out.println("饮料的父类!");
}
abstract public double price();
}
abstract class decorate extends Beverage{//裝飾著類,跟飲料類是同一類型
Beverage beverage;
public decorate(Beverage beverage){//装饰者父类的带参构造函数
this.beverage=beverage;
System.out.println("这里是decorate类");
}
public void description(){//对饮料的描述
System.out.println("装饰的父类!");
}
}
class mocha extends decorate{//裝飾著類的子類
public mocha(Beverage beverage){
super(beverage);//在这类调用父类的带参构造函数
System.out.println("这里是mocha类");
}
public double price(){
return 0.20+beverage.price();
}
}
class Espresso extends Beverage{//濃縮咖啡類,繼承自飲料
public void description(){
System.out.println("浓缩咖啡!");
}
public double price(){
return 1.99;
}
}
class HouseBlend extends Beverage{//綜合咖啡,繼承自飲料
public void description(){
System.out.println("综合咖啡");
}
public double price(){
return 0.89;
}
}
public class store //主類
{
public static void main(String argv[]){
System.out.println("Welcome to StarBuzz!");
Espresso espresso=new Espresso();//濃縮咖啡的實例
System.out.println(espresso.price());
HouseBlend hb=new HouseBlend();//
mocha mo=new mocha(espresso);//用摩卡類來裝飾濃縮咖啡
mo=new mocha(mo);//再次裝飾
System.out.println(mo.price());
}
}
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- Hibernate继承映射的两种策略
- 原来pmplayer-advance的工程在google code上面
- JS StringBuffer
- JS Map
- 学习SQL SERVER的存储过程-之一认识存储过程语法
- 装饰模式
- 解决Cannot create JDBC driver of class '' for connect URL 'null'
- 病了……
- 敏捷过程在中国软件企业的实践——前言
- Cannot create JDBC driver of class '' for connect URL 'null'解决方法2——对我有效
- 如何制作网站
- 调用局域网其他计算机程序的脚本
- 女朋友就是JAVA私有变量,只有我这个类才能调用
- 敏捷过程在中国软件企业的实践——XP价值观