装饰者模式(结构型)

来源:互联网 发布:数控编程培训班 编辑:程序博客网 时间:2024/05/19 20:20

装饰模式

    动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

 适用性

    1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
    2.处理那些可以撤消的职责。
    3.当不能采用生成子类的方法进行扩充时。
结构类图
headfirst中实例类图
系统结构图
抽象组件类
public abstract class Beverage  {public String desc="unKonw Coffee";public String getDesc(){return this.desc;}public abstract double cost();}

-------------------------------------------------------------
具体被装饰者类
public class DarkRoast extends Beverage{    public DarkRoast(){desc="DarkRoast";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn 1;}}public class Decaf extends Beverage {public Decaf() {desc = "Decaf";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn 2;}}public class Espresso extends Beverage {public Espresso() {desc = "Espresso";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn 3;}}public class HouseBlend extends Beverage {public HouseBlend() {desc = "HouseBlend";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn 4;}}

-----------------------------------------------------------------
具体装饰者类
public class Milk extends ConcreatDecorator{private Beverage beverage;public Milk(Beverage beverage){this.beverage=beverage;}@Overridepublic String getDesc() {// TODO Auto-generated method stubreturn beverage.getDesc()+",Milk";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn this.beverage.cost()+1.5;}}public class Mocha extends ConcreatDecorator{private Beverage beverage;public Mocha(Beverage beverage){this.beverage=beverage;}@Overridepublic double cost() {// TODO Auto-generated method stubreturn this.beverage.cost()+0.5;}@Overridepublic String getDesc() {// TODO Auto-generated method stubreturn beverage.getDesc()+",Mocha";}}public class Soy extends ConcreatDecorator{private Beverage beverage;public Soy(Beverage beverage){this.beverage=beverage;}@Overridepublic String getDesc() {// TODO Auto-generated method stubreturn beverage.getDesc()+",Soy";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn this.beverage.cost()+2.5;}}public class Whip extends ConcreatDecorator {private Beverage beverage;public Whip(Beverage beverage) {this.beverage = beverage;}@Overridepublic String getDesc() {// TODO Auto-generated method stubreturn beverage.getDesc()+",Whip";}@Overridepublic double cost() {// TODO Auto-generated method stubreturn this.beverage.cost() + 3.5;}}

-------------------------------------------------------------------------
抽像装饰者类
public abstract class ConcreatDecorator extends Beverage{public abstract String getDesc();}

--------------------------------------------------------------------
测试类
public class Test_c {public static void main(String[] args) {//创建具体的原料Beverage beverage =new  DarkRoast();//不断的向源料上添加装饰beverage=new Milk(beverage);beverage=new Mocha(beverage);beverage=new Soy(beverage);beverage=new Whip(beverage);System.out.println(beverage.getDesc());System.out.println(beverage.cost());}}

                                             
0 0
原创粉丝点击