设计模式之装饰者模式
来源:互联网 发布:网络词碰瓷是什么意思 编辑:程序博客网 时间:2024/05/22 14:21
装饰者模式又名包装模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,他是对原有功能的扩充,在IO流中这个设计模式用的特别多。现在总结下装饰者模式。
例如:手机具有打电话的功能,现在我需要在打电话之前听音乐铃声,打完之后看天气预报,在这里例子中就可以用到装饰者模式进行设计。
1、定义一个手机的抽象类
public interface Phone {public abstract void call() ;// 打电话}
2、定义一个具体的手机类,它也具有打电话的功能
public class IPhone implements Phone {@Overridepublic void call() {System.out.println("打电话...................");}}
3、定义一个装饰的公共类,父类
public class PhoneDecorate implements Phone {private Phone phone ;public PhoneDecorate(Phone phone) {this.phone = phone ;}@Overridepublic void call() {phone.call() ;}}
4、定义一个听音乐的装饰类
public class ListenMusicDecorat extends PhoneDecorate {public ListenMusicDecorat(Phone phone) {super(phone);} @Overridepublic void call() {System.out.println("听音乐.............");super.call() ;}}
5、定义一个看天气预报的装饰类
public ListenWeatherForecastDecorat(Phone phone) { super(phone); }@Overridepublic void call() {super.call();System.out.println("听天气预报................");}}
6、装饰者模式的实现类
public class DecoratDemo {public static void main(String[] args) {// 创建IPhone的对象IPhone iPhone = new IPhone() ;iPhone.call() ;System.out.println("-------------------------------------------------");ListenMusicDecorat listenMusicDecorat = new ListenMusicDecorat(iPhone) ;listenMusicDecorat.call() ;//听音乐,打电话System.out.println("-------------------------------------------------");ListenWeatherForecastDecorat listenWeatherForecastDecorat = new ListenWeatherForecastDecorat(iPhone) ;listenWeatherForecastDecorat.call() ;//打电话,看预报System.out.println("-------------------------------------------------");ListenMusicDecorat decorat = new ListenMusicDecorat(new ListenWeatherForecastDecorat(new IPhone())) ;decorat.call() ;//听音乐,打电话,看预报}}
上面的包装类似于:
Scanner sc = new Scanner(System.in);//包装一次
BufferedReader reader = new BufferedReader (new BufferInputStream(new FileInputStream());两次包装。
0 0
- 设计模式之装饰者设计模式
- 设计模式 之 装饰者
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之Decorator(装饰者模式)
- 设计模式之五---装饰者模式
- 设计模式之---装饰者模式
- c++设计模式之装饰者模式
- Php设计模式之装饰者模式
- java设计模式之装饰者模式
- 设计模式之装饰者模式
- 【设计模式】之装饰者模式
- HeadFirst设计模式之装饰者模式
- c++设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之--装饰者模式
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 收集各类好用的分析工具
- IaaS vs PaaS vs SaaS
- [完]Python函数 range()和arange()
- Revit开发过滤之FamilyInstanceFilter
- Listview中ViewHolder简洁写法,避免适配器中重复定义ViewHolder,减少代码量
- 设计模式之装饰者模式
- Fiddler 环境和过滤规则详解
- STM32 C++编程 002 GPIO类
- Activity 的 Task 以及 launchMode 研究
- 指针数组和数组指针
- Nginx:承受3万并发连接数,胜过Apache 10倍
- JQuery操作JSONObject/JSONArray对象
- Apache Phoenix的子查询
- 关于servlet的@WebServlet注解。