装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式属于结构型模式,它是作为现有的类的一个包装。
使用给手机添加不同的功能为例,来实现装饰器模式:
装饰器模式的实现
1. 创建一个产品接口
//产品接口
public interface Product {
public void function(); //产品的功能
}
2. 创建一个手机类实现产品接口
//手机实体
public class Phone implements Product {
public Phone(){
System.out.println("创建一个手机");
}
@Override
public void function() {
System.out.println("手机可以用来打电话");
}
}
3. 创建一个装饰器类实现产品接口
//装饰器
public class Decorator implements Product {
private Product product;
public Decorator(Product product){
this.product = product;
}
@Override
public void function() {
product.function();
}
}
4. 创建一个手机装饰器,为手机增加功能
//手机装饰器
public class PhoneDecorator extends Decorator {
public PhoneDecorator(Product product) {
super(product);
}
@Override
public void function() {
super.function();
addFunction();
}
public void addFunction(){
System.out.println("给手机增加一个发短信的功能");
}
}
5. 原手机和使用手机装饰器后的手机功能比较
public class DecoratorMain {
public static void main(String[] args) {
Product phone = new Phone();
phone.function();
System.out.println("=========================");
Product new_phone = new PhoneDecorator(phone);
new_phone.function();
}
}