转自 http://blog.csdn.net/jason0539/article/details/22713711
汉堡基类(被装饰者)
- package decorator;
- public abstract class Humburger {
- protected String name ;
- public String getName(){
- return name;
- }
- public abstract double getPrice();
- }
- package decorator;
- public class ChickenBurger extends Humburger {
- public ChickenBurger(){
- name = "鸡腿堡";
- }
- @Override
- public double getPrice() {
- return 10;
- }
- }
配料的基类(装饰者,用来对汉堡进行多层装饰,每层装饰增加一些配料)
- package decorator;
- public abstract class Condiment extends Humburger {
- public abstract String getName();
- }
生菜(装饰者的第一层)
- package decorator;
- 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 decorator;
- public class Chilli extends Condiment {
- Humburger humburger;
- public Chilli(Humburger humburger){
- this.humburger = humburger;
- }
- @Override
- public String getName() {
- return humburger.getName()+" 加辣椒";
- }
- @Override
- public double getPrice() {
- return humburger.getPrice(); //辣椒是免费的哦
- }
- }
测试类
- package decorator;
- public class Test {
- /**
- * @param args
- */
- 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