Java大数据平台开发 学习笔记(38)—— java设计模式(装饰者模式)知识汇总

一、前言:

  1. 动态的将新功能附加到对象上。
  2. 相比继承,在功能扩展方面更具有弹性。
  3. 遵循 OCP (Open Closed Principle)原则。

二、UML图:

在这里插入图片描述


三、装饰者模式:

3.1、代码实例:

Step 1) 创建 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();
}

Step 2) 创建 Coffee 类、及其 Expresso、LongBlack、ShortBlack、Decaf 实现类:

public class Coffee extends Drink{
    
    
    @Override
    public float cost() {
    
    
        return super.getPrice();
    }
}

class Expresso extends Coffee{
    
    
    public Expresso(){
    
    
        setDes("意大利咖啡");
        setPrice(6.0f);
    }
}

class LongBlack extends Coffee{
    
    
    public LongBlack(){
    
    
        setDes("LongBlack 咖啡");
        setPrice(5.0f);
    }
}

class ShortBlack extends Coffee{
    
    
    public ShortBlack(){
    
    
        setDes("ShortBlack 咖啡");
        setPrice(4.0f);
    }
}

class Decaf extends Coffee{
    
    
    public Decaf(){
    
    
        setDes("无因咖啡");
        setPrice(1.0f);
    }
}

Step 3) 创建 Decorartor 类、及其 Chocolate、Milk、Soy 实现类:

public class Decorartor extends Drink{
    
    
    private Drink obj;

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

    @Override
    public float cost() {
    
    
        return (super.getPrice()+ obj.cost());
    }

    @Override
    public String getDes() {
    
    
        return ( "(" + obj.getDes() + " " + obj.getPrice() + ")" + " + " + "(" + super.des + " " + super.getPrice() + ")" );
    }
}

class Chocolate extends Decorartor{
    
    
    public Chocolate(Drink obj) {
    
    
        super(obj);
        setDes("巧克力");
        setPrice(3.0f);
    }
}

class Milk extends Decorartor{
    
    
    public Milk(Drink obj) {
    
    
        super(obj);
        setDes("牛奶");
        setPrice(2.0f);
    }
}

class Soy extends Decorartor{
    
    
    public Soy(Drink obj) {
    
    
        super(obj);
        setDes("豆浆");
        setPrice(1.5f);
    }
}

Step 4) 创建 main 方法:

public class CoffeeBar {
    
    
    public static void main(String[] args) {
    
    
//        Drink order = new LongBlack();
        Drink order = new Decaf();
        System.out.println("描述1:" + order.getDes() + " = " + order.cost());

        order = new Milk(order);
        System.out.println("加入一份牛奶 描述2:" + order.getDes() + " = " + order.cost());

        order = new Chocolate(order);
        System.out.println("加入一份牛奶 再加入一份巧克力 描述2:" + order.getDes() + " = " + order.cost());

        order = new Chocolate(order);
        System.out.println("加入一份牛奶 再加入一份巧克力 再加入一份巧克力 描述2:" + order.getDes() + " = " + order.cost());
    }
}


• 由 ChiKong_Tam 写于 2020 年 10 月 18 日

猜你喜欢

转载自blog.csdn.net/qq_42209354/article/details/109147012
今日推荐