实现效果:
定 了一个鸳鸯锅加了份毛肚加了份龙虾加了份千张顾客:陆小凤 总共花费:404.0元定 了一个红油锅加了份龙虾加了份龙虾加了份龙虾顾客:威帅 总共花费:1115.0元
作用:
就是通过一个又一个的类修饰,最终完成一个完整的功能
特点就是子类都是调用父类的变量来实现
完整代码:
package decorateMode;class Client{String Client_name;String Client_Tel;void setInfomation(String name, String Tel){Client_name = name;Client_Tel = Tel;}void cloneInfomation(Client client) {Client_name = client.Client_name;Client_Tel = client.Client_Tel;}String getName() {return Client_name;}}// 锅底抽象类abstract class PanButtom extends Client{String description = "Unknow PanButtom";public String getDescription() {return description;}public abstract double cost();}// 配菜abstract class SideDish extends PanButtom{public abstract String getDesciption();}// =========================== 锅底 ====================// 鸳鸯锅class TwoFlavorPan extends PanButtom{public TwoFlavorPan(String ClentName, String ClientTel) {System.out.println("定 了一个鸳鸯锅");description = "鸳鸯锅";setInfomation(ClentName, ClientTel);}@Overridepublic double cost() {// TODO Auto-generated method stubreturn 30;}}class RedOil extends PanButtom{public RedOil(String ClentName, String ClientTel) {System.out.println("定 了一个红油锅");description = "红油锅";setInfomation(ClentName, ClientTel);}@Overridepublic double cost() {// TODO Auto-generated method stubreturn 50;}}//=========================== 配菜 ====================// 都是通过父类的基础上进行操作// 毛肚class Maodu extends SideDish{PanButtom PanButtom;String name = "毛肚";double pic = 15.5;public Maodu(PanButtom pan) {// TODO Auto-generated constructor stubSystem.out.println("加了份" + name);PanButtom = pan;cloneInfomation(pan);}@Overridepublic String getDesciption() {return PanButtom.getDescription() + ", " + name;}@Overridepublic double cost() {return PanButtom.cost() + pic;}}// 千张class QianZhang extends SideDish{PanButtom PanButtom;String name = "千张";double pic = 3.5;public QianZhang(PanButtom pan) {// TODO Auto-generated constructor stubSystem.out.println("加了份" + name);PanButtom = pan;cloneInfomation(pan);}@Overridepublic String getDesciption() {return PanButtom.getDescription() + ", " + name;}@Overridepublic double cost() {return PanButtom.cost() + pic;}}//龙虾class LongXia extends SideDish{PanButtom PanButtom;String name = "龙虾";double pic = 355;public LongXia(PanButtom pan) {// TODO Auto-generated constructor stubSystem.out.println("加了份" + name);PanButtom = pan;cloneInfomation(pan);}@Overridepublic String getDesciption() {return PanButtom.getDescription() + ", " + name;}@Overridepublic double cost() {return PanButtom.cost() + pic;}}public class main {static public void main(String[] args) {// 创造一个类型PanButtom Cline1 = new TwoFlavorPan("陆小凤", "8848");Cline1 = new Maodu(Cline1); // 添加一个毛肚修饰Cline1 = new LongXia(Cline1); // 添加一个龙虾修饰Cline1 = new QianZhang(Cline1); // 添加一个千张修饰System.out.println("顾客:" + Cline1.getName() + " 总共花费:" + Cline1.cost() + "元");PanButtom Cline2 = new RedOil("威帅", "8848");Cline2 = new LongXia(Cline2);Cline2 = new LongXia(Cline2);Cline2 = new LongXia(Cline2);System.out.println("顾客:" + Cline2.getName() + " 总共花费:" + Cline2.cost() + "元");// 后面可以加上第一章节的策略模式进行计算}}
