装饰者模式(设计模式学习笔记)

装饰者模式:

  • 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了 开闭原则(ocp)
    例题:咖啡订单处理
    在这里插入图片描述
    Drink类
public abstract class Drink {
    
    
	public String des;
	private float price = 0.0f;
	public String getDes() {
    
    
		return des;
	}
	public void setDes(String des) {
    
    
		this.des = des;
	}
	public float getPrice() {
    
    
		return price;
	}
	public void setPrice(float price) {
    
    
		this.price = price;
	}
	public abstract float cost();
    
}

Dector 类

public class Dector extends Drink {
    
    
	private Drink obj;

	public Dector(Drink obj) {
    
    
		this.obj = obj;
	}

	@Override
	public float cost() {
    
    

		return super.getPrice() + obj.cost();
	}

}

Dector 子类


public class D1 extends Dector {
    
    

	public D1(Drink obj) {
    
    
		super(obj);
		setDes("D1);
		setPrice(1.0f);
		// TODO Auto-generated constructor stub
	}

}
public class D2 extends Dector{
    
    

	public D2(Drink obj) {
    
    
		super(obj);
		setDes("D2");
		setPrice(6.0f);
		// TODO Auto-generated constructor stub
	}

}

Coffee类

public class Coffee extends Drink{
    
    

	@Override
	public float cost() {
    
    
		// TODO Auto-generated method stub
		return super.getPrice();
	}

}

Coffee类型一

public class Co1 extends Coffee {
    
    
	public Co1() {
    
    
		setDes("类型一咖啡");
		setPrice(3.0f);

	}
}

Coffee类型二

public class Co2 extends Coffee {
    
    
	public Co1() {
    
    
		setDes("类型二咖啡");
		setPrice(5.0f);

	}
}

Client客户端

public class Client {
    
    
	public static void main(String[] args) {
    
    
	Drink order = new Co1();
	System.out.println(order.getDes()+"价格为"+order.cost());
	
	order = new Milk(order);
	System.out.println(order.getDes()+"价格为"+order.cost());
	
	
	Drink order1 = new Co2();
	float price = order.cost() + order1.cost();
	System.out.println(order1.getDes()+"的价格"+order1.cost()+" "+price);
	}
}

分析:
Drink 是一个抽象类,表示饮料
Des 就是对咖啡信息的简单描述
cost() 就是计算费用

猜你喜欢

转载自blog.csdn.net/weixin_44763595/article/details/107874784
今日推荐