修饰模式代码加讲解

修饰模式代码加讲解

首先我们先了解下修饰模式是干啥的

修饰模式 – 从名字可以理解为对一个基础类进行修饰 从而有主类没有的功能,这个时候同学们会问 这不是继承 然后子类新加方法吗?
答案当然是否定的 虽然实现的功能差不多 但修饰模式更精明一些

和继承生成子类加方法的不同

在这里插入图片描述
感谢https://blog.csdn.net/woshirongshaolin/article/details/7676111

下面来代码 代码的意思是
饮料 这个类 加上调料 得出饮料的价格

package sun.framework.genesis.beta.designmode.modify;

/**
 * @Auther: SunDC
 * @Date: 2019/10/31 16:29
 * @Description: 饮料类
 */
public abstract  class Beverage {
    String descriptionString = "未知饮料";

    //类型描述父类实现
    public String getDescription() {
        return descriptionString;
    }

    //子类需要实现的抽象方法
    public abstract double cost();

}

package sun.framework.genesis.beta.designmode.modify;

/**
 * @Auther: SunDC
 * @Date: 2019/10/31 16:33
 * @Description: 咖啡师   就是給饮料类加上一些调料
 */
public class HouseBlend extends Beverage{


    public HouseBlend() {
        super.descriptionString = "蓝山咖啡豆";
    }

    @Override
    public double cost() {
        return 5;
    }
}

package sun.framework.genesis.beta.designmode.modify;

/**
 * @Auther: SunDC
 * @Date: 2019/10/31 16:37
 * @Description: 饮料配料-摩卡
 */
public class Mocha extends HouseBlend {

    Beverage beverage;
    double myCost = 20;

    public Mocha(Beverage beverage) {
        this.beverage = beverage;
    }

    @Override
    public String getDescription() {
        return beverage.getDescription() + ",摩卡";
    }

    @Override
    public double cost() {
        return myCost + beverage.cost();
    }
}

package sun.framework.genesis.beta.designmode.modify;

/**
 * @Auther: SunDC
 * @Date: 2019/10/31 16:40
 * @Description: 饮料配料-烤培
 */
public class Whip extends HouseBlend {
    Beverage beverage;
    double myCost = 20;

    public Whip(Beverage beverage) {
        this.beverage = beverage;
    }

    @Override
    public String getDescription() {
        return beverage.getDescription() + ",芝士";
    }

    @Override
    public double cost() {
        return myCost + beverage.cost();
    }
}

package sun.framework.genesis.beta.designmode.modify;

/**
 * @Auther: SunDC
 * @Date: 2019/10/31 16:46
 * @Description:
 */
public class TestBeverage {

    public static void main(String args[]) {
        //不加调料的HouseBlend
        Beverage beverage = new HouseBlend();
        System.out.println(beverage.getDescription()+"     $"+beverage.cost());

        //加入调料的HouseBlend
        Beverage beverage2 = new HouseBlend();
        beverage2=new Whip(beverage2);
        beverage2=new Mocha(beverage2);
        System.out.println(beverage2.getDescription()+"    $"+beverage2.cost());
    }
}

构造的方式分为三步

第一步创建主类下的修饰类
第二步创建实体类继承修饰类
第三步把主类塞到实体类里面进行功能的拓展

明天分享单例模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值