Java设计模式之装饰模式

来源:互联网 发布:rf软件 编辑:程序博客网 时间:2024/06/05 13:36

装饰模式的定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

最常见的装饰模式应用在I/O流中

我们使用类图使用来表示装饰模式的关系:


我们使用饼作为例子:我们知道饼是个大的类,下面有好多小类,比如手抓饼,肉夹馍,烧饼、肉松饼,老婆饼……就手抓饼而言,下面还有许多小的类,比如,鸡蛋手抓饼,火腿手抓饼,鸡蛋火腿手抓饼……于是,我们知道其实鸡蛋,火腿……是可以作为一个装饰的类,而手抓饼是作为被装饰的类。

根据上面的类图关系,我们创建一个接口作为被装饰者:Cake,定义价格和描述方法。

public interface Cake {public float price();public String description();}

其次,我们在创建一个装饰类:Decorator,我们需要实现Cake这个接口,同时,装饰者要获取被装饰者,就要通过构造函数传参的方式。

public abstract class Decorator implements Cake{ private Cake cake;public Decorator(Cake cake){this.cake = cake;}public float price() {return cake.price();}public String description() {return cake.description();}}

然后,我们在创建一个GraspCake类去实现Cake接口,作为被装饰的类:

public class GraspCake implements Cake{public float price() {return 3.5f;}public String description() {return "您点了一个原味手抓饼";}}

与此同时,我们在创建一个Egg类去继承Decorator这个类,作为真正实体装饰的类:

public class Egg extends Decorator{public Egg(Cake cake) {super(cake);}public float price() {return super.price()+1.5f;}public String description() {return super.description()+"+鸡蛋";}}


0 0
原创粉丝点击