A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晚上没饭吃 中级黑马   /  2015-8-7 00:12  /  179 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案

优点: 使用装饰模式,是可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能。

缺点:正因为可以随意组合,所以就可能出现一些不合理的逻辑

通过一个案例来说明这个方法
//定义一个接口手机类
public interface Phone {
     public abstract void call();
}
//实现这个接口
public class PhoneDemo implements Phone {
     @Override
     public void call() {
            // TODO Auto-generated method stub
           System. out.println( "可以打电话了" );
     }
}
//添加装饰功能
public class PhoneOrnament implements Phone{
     private Phone p;
       public PhoneOrnament(Phone p){
             this. p=p;
       }
     @Override
     public void call() {
            // TODO Auto-generated method stub
            this. p.call();
     }

}
//添加装饰
public class RingDemo extends PhoneOrnament{

     public RingDemo(Phone p) {
            super(p);
     }
     public void call(){
           System. out.println( "手机可以听彩铃" );
            super.call();
     }
}
//测试
public class PhoneTest {
     public static void main(String[] args) {
           Phone p= new PhoneDemo();
            new RingDemo(p).call();
     }
}
如果看懂了这个再去看IO流的BufferedInputStream(new  FileInputStream(System.in));你发现这是一个装饰设计模式

5 个回复

倒序浏览
看到后面,前面就忘记了,。。
回复 使用道具 举报
王竹根 来自手机 中级黑马 2015-8-7 09:16:32
藤椅
感觉看不懂的样子。。。。。。。。
回复 使用道具 举报
就是普通的调用函数。什么意思?
回复 使用道具 举报
IO流中的包装类
回复 使用道具 举报
设计模式,今天刚学
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马