装饰设计模式
来源:互联网 发布:java求3个最小公倍数 编辑:程序博客网 时间:2024/06/09 07:19
装饰设计模式概述:
装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰者,是继承的替代方案。
优点:
使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能。
缺点:
正因为可以随意组合,所以就可能出现一些不合理的逻辑
package cn.tywei;/** * 第一、定义一个手机规则的接口,能够具有打电话的功能 * * @author Tywei * */public interface Phone { public abstract void call();}
package cn.tywei;/** * 第二、具体的手机 * * @author Tywei * */public class IPhone implements Phone { @Override public void call() { System.out.println("手机可以打电话了"); }}
package cn.tywei;/** * 第三、手机装饰的抽象类 * * @author Tywei * */public abstract class PhoneDecorate implements Phone { private Phone p; public PhoneDecorate(Phone p) { this.p = p; } /** * 这里重写了call()方法,然后调用了接口里面的打电话的方法 */ @Override public void call() { this.p.call(); }}
package cn.tywei;/** * 第四、听彩铃的手机装饰类 * * @author Tywei * */public class RingPhoneDecorate extends PhoneDecorate { public RingPhoneDecorate(Phone p) { super(p); } @Override public void call() { System.out.println("我可以听彩铃了"); super.call(); }}
package cn.tywei;/** * 第五、听音乐的手机装饰类 * * @author Tywei * */public class MusicPhoneDecorate extends PhoneDecorate { public MusicPhoneDecorate(Phone p) { super(p); } @Override public void call() { super.call(); System.out.println("打完电话可以听音乐了"); }}
package cn.tywei;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Scanner;/** * 第六、测试用 * * @author Tywei * */public class PhoneDemo { public static void main(String[] args) { Phone p = new IPhone(); p.call(); System.out.println("------------"); // 需求:我想在接电话前,听彩铃 PhoneDecorate pd = new RingPhoneDecorate(p); pd.call(); System.out.println("------------"); // 需求:我想在接电话后,听音乐 pd = new MusicPhoneDecorate(p); pd.call(); System.out.println("------------"); // 需求:我想在接电话前听彩铃,然后听音乐 // 自己提供装饰类,在打电话前听彩铃,打电话后听音乐 pd = new RingPhoneDecorate(new MusicPhoneDecorate(p)); pd.call(); System.out.println("------------"); // 想想我们在IO流中的使用 // 字节输入流 // InputStream is = System.in; // 包装成字符输入流 // InputStreamReader isr = new InputStreamReader(is); // 包装成快速的字节输入流 // BufferedReader br = new BufferedReader(isr); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( System.out)); Scanner sc = new Scanner(System.in); }}
阅读全文
0 0
- 设计模式---装饰模式
- 设计模式:装饰模式
- 设计模式------装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式 装饰模式
- 设计模式----装饰模式
- 设计模式-【装饰模式】
- 设计模式--装饰模式
- 设计模式装饰模式
- 设计模式 - 装饰模式
- 设计模式-----装饰模式.
- 设计模式-----装饰模式.
- [ 设计模式 ] 装饰模式!
- 设计模式:装饰模式
- 设计模式 - 装饰模式
- 设计模式 - 装饰模式
- SQLServer中exists和except用法
- 独善其身是国人低劣的本质
- Listener学习笔记-- day02 邮件系统
- ElasticSearch 2.4.0系列之一 es简介
- ConstraintLayout的使用介绍
- 装饰设计模式
- bitmap学习
- 最小循环表示
- html标签相关
- 将QMessageBox的Yes和No按钮翻译成中文
- 【Oracle】windows平台oracle11g安装与简单配置
- 扩增子分析QIIME. 3以管理员安装QIIME1.9.1至Ubuntu16.04
- Git-管理版本
- 存储系统 (二)