装饰器模式
Posted jiefangzhe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器模式相关的知识,希望对你有一定的参考价值。
package com.sxt.io; /** * 模拟咖啡 * 1、抽象组件:需要装饰的抽象对象(接口或抽象父类) * 2、具体组件:需要装饰的对象 * 3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法 * 4、具体装饰类:被装饰的对象 * @author TW * */ public class DecorateTest02 public static void main(String[] args) Drink coffee =new Coffee(); Drink suger =new Suger(coffee); //装饰 System.out.println(suger.info()+"-->"+suger.cost()); Drink milk =new Milk(coffee);//装饰 System.out.println(milk.info()+"-->"+milk.cost()); milk =new Milk(suger);//装饰 System.out.println(milk.info()+"-->"+milk.cost()); //抽象组件 interface Drink double cost(); //费用 String info(); //说明 //具体组件 class Coffee implements Drink private String name ="原味咖啡"; @Override public double cost() return 10; @Override public String info() return name; //抽象装饰类 abstract class Decorate implements Drink //对抽象组件的引用 private Drink drink; public Decorate(Drink drink) this.drink =drink; @Override public double cost() return this.drink.cost(); @Override public String info() return this.drink.info(); //具体装饰类 class Milk extends Decorate public Milk(Drink drink) super(drink); @Override public double cost() return super.cost()*4; @Override public String info() return super.info()+"加入了牛奶"; class Suger extends Decorate public Suger(Drink drink) super(drink); @Override public double cost() return super.cost()*2; @Override public String info() return super.info()+"加入了蔗糖";
以上是关于装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章