设计模式--装饰器模式

装饰器模式

动态的给类添加一些额外的职责,而不是给类添加。这里io类里面大量用到了该模式。

1. 使用场景

在需要不影响其他对象的情况下,动态透明的给单个对象添加扩展功能。可以在不生成很多子类的情况下扩展类功能。
可以动态扩展和撤销功能。

2. 角色

  • Component 抽象组件 被装饰对象的原始抽象接口
  • ConcreteComponent 组件具体实现类 即具体的被装饰类
  • Decorator 抽象装饰者 持有被装饰对象的引用,可以进行装饰
  • ConcreteDecorator 装饰着具体实现类 装饰者具体实现

3. 实践

// 1. 定义抽象组件
public abstract class Component {
    public abstract void operate();
}

// 2. 定义具体组件
public class ConcreteComponent extends Component {
    @Override
    public void operate() {
        System.out.println("这是具体组件!");
    }
}

// 3. 定义抽象装饰器类,该类需要继承抽象组件,添加抽象装饰方法
public abstract class Decorator extends Component {

    Component mComponent;

    public Decorator(Component component) {
        mComponent = component;
    }

    @Override
    public void operate() {
        mComponent.operate();
    }


    public abstract void operateA();

    public abstract void operateB();
}

// 4. 定义具体装饰器类,
public class ConcreteDecoratorA extends Decorator {

    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    @Override
    public void operate() {
        operateA();
        super.operate();
        operateB();
    }

    public void operateA() {
        System.out.println("自定义装饰部分:start");
    }

    public void operateB() {
        System.out.println("自定义装饰部分:end");
    }
}
// 客户端具体调用

    Component component = new ConcreteComponent();
    Decorator decorator = new ConcreteDecoratorA(component);
    decorator.operate();

4. 总结

装饰器模式比价好理解,装饰更多的是锦上添花,在被装饰方法的前后添加装饰方法。
一个人 经过装饰之后,不仅还是一个人(通过抽象装饰类继承抽象人来实现),而且用户了抽象装饰器定义的方法,原有方法经过覆写之后还可以增加装饰功能。相当于对原有方法进行了一次封装,添加了装饰方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值