装饰器模式
定义
装饰器模式是一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。
一般来说,我们想给某个类或者对象添加行为有两种方式:继承方式,组合方式。装饰器模式使用的是组合方式。
简单地说,就是在装饰器中添加一个产品对象,这样就相当于拥有了这个产品的功能,然后在此基础上定义新的方法以达到扩展的目的。
示例和代码
//定义产品接口
interface Phone {
void playMusic();
}
//定义实现类
class iPhone implements Phone {
@override
public void playMusic() {
...
}
}
//定义装饰器
class PhoneDecorator implements Phone {
private Phone phone;
public PhoneDecorator(Phone phone) {
this.phone = phone;
}
@override
public void playMusic() {
phone.playMusic();
}
//新功能
public void playGame() {
...
}
}
//使用
class Main {
public static void main(String[] args) {
new PhoneDecorator(new iPhone()).playGames();
}
}
Java的IO中大量用到了装饰器模式。
总结
装饰器模式是动态地给一个对象添加新功能,相比于继承并生成子类的方式来说,这样会更加灵活。