java 装饰设计模式
来源:互联网 发布:知远战略与防务论坛 编辑:程序博客网 时间:2024/05/17 23:24
今天讲下设计模式中的装饰设计模式,这个在我门的IO流已经使用到了,首先看下对装饰设计模式的定义
定义:
动态的给一个对象添加一些额外的功能,就新增功能来说,装饰模式比生成子类更加灵活.
总结起来装饰设计模式2个作用:2个作用
1:为对象添加功能,
2:添加功能是动态的
装饰器模式具有如下的特征:
它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。 用一句话总结就是:保持接口,增强性能
它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。 用一句话总结就是:保持接口,增强性能
现在用代码实现以下更为直观
比如手机只能打电话,那我现在想打电话之前先听到彩铃,电话挂断后还可以继续听歌
//电话的功能,
public interface Phone { public void call();}具体某个电话的实现类
public class IPhone implements Phone {public IPhone() {super();}@Overridepublic void call() {System.out.println("打电话");}}
//装饰类的功能的扩展,但要保持有打电话功能
public abstract class PhoneDecorator implements Phone {private Phone phone;public PhoneDecorator(Phone phone) {super();this.phone = phone;}@Overridepublic void call() { phone.call();}}//彩铃具体装饰类的实现,并添加功能
public class RingDecorator extends PhoneDecorator {public RingDecorator(Phone phone) {super(phone);}@Overridepublic void call() {System.out.println("我要手机可以听彩铃");super.call();}}//音乐具体装饰类的实现 并添加播放音乐的功能
public class MusicDecorate extends PhoneDecorator {public MusicDecorate(Phone phone) {super(phone);}@Overridepublic void call() {super.call();System.out.println("手机可以听音乐");}}测试类
public class DecoratorTest {public static void main(String[] args) {Phone phone = new IPhone();phone.call();System.out.println("*************************");PhoneDecorator pd = new RingDecorator(phone);pd.call();System.out.println("*************************");pd = new MusicDecorate(phone);pd.call();System.out.println("*************************");//现在是打电话之前有彩铃来了 挂断电话后可以听因为pd = new MusicDecorate(new RingDecorator(phone));pd.call();}}结果:
打电话
*************************
我要手机可以听彩铃
打电话
*************************
打电话
手机可以听音乐
*************************
我要手机可以听彩铃
打电话
手机可以听音乐
0 0
- Java装饰设计模式
- Java 装饰设计模式
- Java 装饰设计模式
- java 装饰设计模式
- Java 装饰设计模式
- java 装饰设计模式
- Java装饰设计模式
- Java 装饰设计模式
- Java装饰设计模式
- Java 设计模式 --装饰模式
- Java 设计模式-----装饰模式
- java设计模式-装饰模式
- java设计模式---装饰模式
- java设计模式-装饰模式
- 【Java设计模式】装饰模式
- java设计模式-装饰模式
- java设计模式--装饰模式
- java设计模式---装饰模式
- 程序员表白程序
- B\S备忘录01——此吧神兽“焰正马 ”
- 网易游戏2015雷火事业部实习招聘会笔记
- 阅读深入理解计算机系统(三)--------------- 虚拟存储器
- scipy入门
- java 装饰设计模式
- 插入法排序
- codevs1163访问艺术馆
- $_SERVER["QUERY_STRING"]
- 光凭验证码就可以盗号!微信盗号新手段揭秘
- 奇幻之旅二
- 【剑指Offer面试编程题】题目1519:合并两个排序的链表--九度OJ
- latex中参考文献
- 卸载第一步:统计安装文件和注册表操作(批处理) FOR MSI