您的位置:首页 > 编程语言 > Java开发

Java设计模式之装饰模式

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

最常见的装饰模式应用在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()+"+鸡蛋";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: