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