Java设计模式之装饰模式
2016-07-07 13:31
423 查看
装饰模式的定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
最常见的装饰模式应用在I/O流中
我们使用类图使用来表示装饰模式的关系:
我们使用饼作为例子:我们知道饼是个大的类,下面有好多小类,比如手抓饼,肉夹馍,烧饼、肉松饼,老婆饼……就手抓饼而言,下面还有许多小的类,比如,鸡蛋手抓饼,火腿手抓饼,鸡蛋火腿手抓饼……于是,我们知道其实鸡蛋,火腿……是可以作为一个装饰的类,而手抓饼是作为被装饰的类。
根据上面的类图关系,我们创建一个接口作为被装饰者:Cake,定义价格和描述方法。
其次,我们在创建一个装饰类:Decorator,我们需要实现Cake这个接口,同时,装饰者要获取被装饰者,就要通过构造函数传参的方式。
然后,我们在创建一个GraspCake类去实现Cake接口,作为被装饰的类:
与此同时,我们在创建一个Egg类去继承Decorator这个类,作为真正实体装饰的类:
最常见的装饰模式应用在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()+"+鸡蛋"; } }
相关文章推荐
- java注解Annotation
- Spring中@Async用法总结
- eclipse中egit插件使用
- Spring之Spring概述
- Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D)
- 关于jdk的问题
- java synchronized详解
- eclipse搭建mvn web工程
- SpringMVC重定向——有参传递
- ECLIPSE - 新建jsp页面默认模板设置
- Spring MVC拦截器
- JAVA多线程
- java面向对象的四大特性-多态,继承,抽象,封装
- SpringMVC重定向——无参传递
- Eclipse快捷大全(转载)
- java读取写入.cvs文件
- jdk与jre的介绍
- Spring MVC @RequestBody @ResponseBody Example
- java匹配IP正则表达式
- spring boot + jsp