decorator装饰器模式

    decorator装饰器模式,动态地扩展一个对象的功能,而不需要改变原始的类代码或使用继承。是通过创建一个跟目的类同一等级(继承目的类的父类)的称为装饰器的封装对象来实现的。要新添加的功能类继承这个装饰器,这样用户类可以像使用原来的类那样使用新添加的功能类。
    decorator装饰器模式可以动态地添加功能,也可以动态地撤销功能。如果一个父类的n个子类,都需要有一个或若干个功能,而它们操作该功能的代码结构基本一致,这个时候就可以考虑使用decorator装饰器模式。如使用继承来实现的话,父类的n个子类的都要派生出子类并实现这些功能,随着子类的增加,重复的代码量会不断增加,灵活性较差。并且利用decorator装饰器模式易于添加任何功能的组合,同一个功能甚至可以添加两次,而继承难以做到这一点。

    java中对流的操作,需要叠合多个对象,其实就是应用了装饰器模式。
    例如,需要对不同类型的信息进行不同的储存方式,而不同信息的来源不同,这时可以考虑decorator装饰器模式。
public interface Info{
   public void read(String path);
   public void save();
}
public class FileInfo implements Info{
   protect String str;
   public void read(String path){/*...*/}
   public void save(){/*...*/}
}
public class NetInfo implements Info{
   protect String str;
   public void read(String path){/*...*/}
   public void save(){/*...*/}
}
public class Decorator impletments Info{
   Info info;
   protect String str;
   public Decorator(Info info){this.info=info;}
   public void read(String path){info.read(path);}
   public void save(){info.save();}
}
public class HtmlDocument extends Decorator{
   public HtmlDocument(Info info){super(info);}
   public void save(){html();info.save();}
   public void html(){/*对str进行处理...*/}
}
public class EncrypDocument extends Decorator{
   public EncrypDocument(Info info){super(info);}
   public void save(){encryp();info.save();}
   public void encryp(){/*对str进行处理...*/}
}

public class Main{
   public static void main(String args[]){
      Info info = new NetInfo();
      Decorator d = new XmlDocument(info);
      d.read();
      d.save();
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值