装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案
优点: 使用装饰模式,是可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能。
缺点:正因为可以随意组合,所以就可能出现一些不合理的逻辑
通过一个案例来说明这个方法
//定义一个接口手机类
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));你发现这是一个装饰设计模式 |
|