首页 > 代码库 > java 装饰设计模式
java 装饰设计模式
今天讲下设计模式中的装饰设计模式,这个在我门的IO流已经使用到了,首先看下对装饰设计模式的定义
定义:
动态的给一个对象添加一些额外的功能,就新增功能来说,装饰模式比生成子类更加灵活.
总结起来装饰设计模式2个作用:2个作用
1:为对象添加功能,
2:添加功能是动态的
装饰器模式具有如下的特征:
它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。 用一句话总结就是:保持接口,增强性能
它必须具有一个装饰的对象。 它必须拥有与被装饰对象相同的接口。 它可以给被装饰对象添加额外的功能。 用一句话总结就是:保持接口,增强性能
现在用代码实现以下更为直观
比如手机只能打电话,那我现在想打电话之前先听到彩铃,电话挂断后还可以继续听歌
//电话的功能,
public interface Phone { public void call(); }具体某个电话的实现类
public class IPhone implements Phone { public IPhone() { super(); } @Override public void call() { System.out.println("打电话"); } }
//装饰类的功能的扩展,但要保持有打电话功能
public abstract class PhoneDecorator implements Phone { private Phone phone; public PhoneDecorator(Phone phone) { super(); this.phone = phone; } @Override public void call() { phone.call(); } }//彩铃具体装饰类的实现,并添加功能
public class RingDecorator extends PhoneDecorator { public RingDecorator(Phone phone) { super(phone); } @Override public void call() { System.out.println("我要手机可以听彩铃"); super.call(); } }//音乐具体装饰类的实现 并添加播放音乐的功能
public class MusicDecorate extends PhoneDecorator { public MusicDecorate(Phone phone) { super(phone); } @Override public 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(); } }结果:
打电话
*************************
我要手机可以听彩铃
打电话
*************************
打电话
手机可以听音乐
*************************
我要手机可以听彩铃
打电话
手机可以听音乐
java 装饰设计模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。