package com.henu.Decorator;
/**
* 汉堡基类
* @author rock
*/
public abstract class Humburger {
protected String name;
public String getName(){
return name;
}
public abstract double getPrice();
}
package com.henu.Decorator;
/**
* 鸡腿堡类(被装饰者的初始状态,有些自己的简单装饰,相当于上面的Person)
* @author rock
*/
public class ChickenBurger extends Humburger{
@Override
public double getPrice() {
// TODO Auto-generated method stub
return 10.0;
}
public ChickenBurger(){
name = "鸡腿堡";
}
} package com.henu.Decorator;
/**
* 配料的基类(装饰者,用来对汉堡进行多层装饰,每层装饰增加一些配料,相当于上面Decorator)
* @author rock
*
*/
public abstract class Condiment extends Humburger{
public abstract String getName();
}
package com.henu.Decorator;
/**
* 生菜(装饰者的第一层,相当于上面的decorator_zero)
* @author rock
*
*/
public class Lettuce extends Condiment{
Humburger humburger;
public Lettuce(Humburger humburger){
this.humburger = humburger;
}
@Override
public String getName() {
return humburger.getName();
}
@Override
public double getPrice() {
return humburger.getPrice()+1.5;
}
}
package com.henu.Decorator;
/**
* 辣椒(装饰者的第二层)
* @author rock
*
*/
public class Chilli extends Condiment{
Humburger humburger;
public Chilli(Humburger humburger){
this.humburger = humburger;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return humburger.getName()+"+辣椒";
}
@Override
public double getPrice() {
// TODO Auto-generated method stub
return humburger.getPrice(); //辣椒是免费的
}
} public class Test {
public static void main(String[] args) {
Humburger humburger = new ChickenBurger();
System.out.println(humburger.getName()+" 价钱:"+humburger.getPrice());
Lettuce lettuce = new Lettuce(humburger);
System.out.println(lettuce.getName()+" 价钱:"+lettuce.getPrice());
Chilli chilli = new Chilli(humburger);
System.out.println(chilli.getName()+" 价钱:"+chilli.getPrice());
Chilli chilli2 = new Chilli(lettuce);
System.out.println(chilli2.getName()+" 价钱:"+chilli2.getPrice());
}
}
鸡腿堡 价钱:10.0
鸡腿堡 价钱:11.5
鸡腿堡+辣椒 价钱:10.0
鸡腿堡+辣椒 价钱:11.5