装饰模式---早餐加料

这篇博客介绍了如何利用装饰模式来丰富小吃店的早餐选择。通过Breakfast、Mian、Fen、PeiLiao等类的设计,可以灵活地为面条和粉类添加牛肉、鸡蛋或猪肉等配料,实现早餐的个性化定制。示例代码展示了如何在Client.java中组合不同的食品和配料,以满足不同顾客的需求。

有一个小吃店,餐牌如下:

素面  10元

加牛肉  5元

素粉  9元

加猪肉  3元

 

加蛋    2元

 

Breakfast.java

package Eat;

public abstract class Breakfast {
	 String name = "点餐";
	public String getName() {
	       return name;
	 }
	 
  public abstract double price() ;
  
}

Mian.java

package Eat;

public class Mian extends Breakfast {
	
	String name="素面";
	public String getName() {
	       return name;
	 }
	@Override
	public double price() {
		// TODO Auto-generated method stub
		return 10;
	}

}

 

Fen.java

package Eat;

public class Fen extends Breakfast {
	
	String name="素粉";
	public String getName() {
	       return name;
	 }
	@Override
	public double price() {
		// TODO Auto-generated method stub
		return 9;
	}

}

PeiLiao.java

package Eat;

public  class PeiLiao extends Breakfast {
	private Breakfast breakfast;
	public PeiLiao(Breakfast breakfast) {
		this.breakfast=breakfast;
	}
	public  String getName() {
		return breakfast.getName();
	}
	public  double price() {
		return breakfast.price();
	}
}

 

Beef.java

package Eat;

public class Beef extends PeiLiao {
	public Beef(Breakfast breakfast) {
        super(breakfast); 
    }

    public String getName() {
        return super.getName()+"+牛肉"; //调用原有业务方法
    }
    public double price() {
        return super.price()+5; //调用原有业务方法
    }
}

Egg.java

package Eat;

public class Egg extends PeiLiao {
	public Egg(Breakfast breakfast) {
        super(breakfast); 
    }

    public String getName() {
        return super.getName()+"+鸡蛋"; //调用原有业务方法
    }
    public double price() {
        return super.price()+2; //调用原有业务方法
    }
}

Pork.java

package Eat;

public class Pork extends PeiLiao {
	public Pork(Breakfast breakfast) {
        super(breakfast); 
    }

    public String getName() {
        return super.getName()+"+猪肉"; //调用原有业务方法
    }
    public double price() {
        return super.price()+3; //调用原有业务方法
    }
}

Client.java

​
package Eat;

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Breakfast a,b,c,d;
		a=new Mian();
		b=new Beef(a);
		c=new Pork(b);
		d=new Egg(c);
		System.err.println("点餐:"+d.getName());
		System.err.println("价格:¥"+d.price());
		
	}
}

​

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值