Java设计模式-装饰模式

xiaoxiao2021-02-28  79

1.装饰模式的四个构件

1.抽象被装饰者,通常是抽象类 2.具体被装饰者 3.抽象装饰者,通常是抽象类,并继承自抽象被装饰者 4.具体抽象者

2.例子

2.1有一个饮品系统,其有具体饮品,以及配料。那么明显的配料就是饮品的装饰者。

2.2类图

2.3实现 Beverage.java (抽象被装饰者)

public abstract class Beverage { public String description = "unkonw beverage"; public Beverage() { } public Beverage(String description) { this.description = description; } public String getDescription() { return description; } public abstract double Cost(); }

housblend.java (具体饮品,也就是具体的被装饰者)

public class HousBlend extends Beverage { public HousBlend() { super("housblend"); } public double Cost() { return 0.89; } }

codimentdecorator.java(抽象装饰者)

public abstract class CondimentDecorator extends Beverage { protected Beverage beverage; public CondimentDecorator(Beverage beverage) { this.beverage = beverage; } public abstract String getDescription(); public double Cost() { return beverage.Cost(); } }

Mocha.java(具体装饰者)

public class Mocha extends CondimentDecorator { public Mocha( Beverage beverage) { super(beverage); } public String getDescription() { return beverage.getDescription() + ", mocha "; } public double Cost() { return beverage.Cost()+0.20; } }

装饰者对被装饰者的装饰。

//声明一个具体的饮品 Beverage be = new HousBlend(); //使用配料装饰、 be = new Mocha(be);

使用装饰者模式,在以后需要添加配料或者修改配料的价钱时,并不需要被装饰者的源码、

Java的IO流也是用了装饰模式

转载请注明原文地址: https://www.6miu.com/read-68573.html

最新回复(0)