修饰模式代码加讲解
首先我们先了解下修饰模式是干啥的
修饰模式 – 从名字可以理解为对一个基础类进行修饰 从而有主类没有的功能,这个时候同学们会问 这不是继承 然后子类新加方法吗?
答案当然是否定的 虽然实现的功能差不多 但修饰模式更精明一些
和继承生成子类加方法的不同
感谢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());
}
}
构造的方式分为三步
第一步创建主类下的修饰类
第二步创建实体类继承修饰类
第三步把主类塞到实体类里面进行功能的拓展
明天分享单例模式