装饰器模式
概念
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
自己理解
- 装饰器模式主要是对被装饰的类进行功能的扩展,和继承一样,都是对原有的功能进行拓展。当不想有太多子类时可以使用装饰器模式。
- 举个例子,比如软件升级时,一开始有计算机功能,后面又有日历功能。可以采用继承对类功能进行扩展。采用装饰器模式,就编写一个装饰类,然后把需要扩展的类传给装饰类,让装饰类对其进行装饰。下面用代码进行实现。
代码实现
类图
package 装饰器模式;
public interface Software {
void computer();
}
class A_software implements Software{
@Override
public void computer() {
System.out.println("我是计算机");
}
}
package 装饰器模式;
//采用抽象类,让子类去扩展功能
public abstract class Update implements Software{
Software software;
Update(Software software){
this.software = software;
}
@Override
public void computer() {
software.computer();
}
}
class A_update extends Update{
A_update(Software software){
super(software);
}
@Override
public void computer(){
software.computer();
update();
}
public void update(){
System.out.println("我有一个日历");
}
}
package 装饰器模式;
public class test {
public static void main(String[] args) {
Software software = new A_software();
software.computer();
System.out.println("====================================");
Update update = new A_update(software);
//通过这我们可以发现,IO流就采用了装饰器模式,比如缓存流等等
update.computer();
}
}