装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式属于结构型模式,它是作为现有的类的一个包装。
使用给手机添加不同的功能为例,来实现装饰器模式:
装饰器模式的实现
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();
}
}
- 什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则
- 工厂模式:【每天一个java设计模式(一)】 - 工厂模式
- 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式
- 单例模式:【每天一个java设计模式(三)】 - 单例模式
- 原型模式:【每天一个java设计模式(四)】 - 原型模式
- 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式
- 适配器模式 : 【每天一个java设计模式(六)】 - 适配器模式
- 代理模式: 【每天一个java设计模式(七)】 - 代理模式模式
- 桥接模式:【每天一个java设计模式(八)】 - 桥接模式
下一节:
外观模式:【每天一个java设计模式(十)】 - 外观模式