Android 装饰者模式

装饰者模式

1、定义
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类更加灵活,提供了有别于继承的另一种选择。
2、使用场景
需要动态且透明地扩展类的功能时。
3、装饰者的UML图
![这里写图片描述](https://images2017.cnblogs.com/blog/727092/201710/727092-20171020190915959-1302674157.png)
4、装饰者通用代码

抽象组件类

/**
  *抽象的方法,这个随你做
  *同样地你也可以增加更多的抽象方法
  /
public abstract class Component{

    public abstract void operate();
}

组件具体实现类

public class ConcreteComponent extends Component {
    @Override
    public void operate() {
        //具体逻辑
    }
}

抽象装饰者

public class Decorator extends Component {

    private Component component;//持有一个Component对象的引用

    /**
     * 必须要有构造方法,需需要一个Component类型的对象
     */
    public Decorator(Component component) {
        this.component = component;
    }

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

装饰者的具体实现类

 /**
   *  ConcreteDecoratorB与ConcreteDecoratorA代码类似,不再给出
   */
public class ConcreteDecoratorA extends Decorator {

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

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

    /**
     * 自定义的装饰方法A
     */
    private void operateA() {
        //装饰方法的逻辑
    }
    /**
     * 自定义的装饰方法B
     */
    private void operateB() {
        //装饰方法的逻辑
    }
}

客户调用类

public class Client {

    public static void main(String [] args){
        //构造被装饰组件对象
        Component component = new ConcreteComponent();
        //根据组件对象构造装饰者对象A并调用,此时相当于给组件对象增加装饰者A的功能方法
        Decorator decoratorA = new ConcreteDecoratorA(component);
        decoratorA.operate();

        //根据组件对象构造装饰者对象B并调用,此时相当于给组件对象增加装饰者B的功能方法
        Decorator decoratorB = new ConcreteDecoratorB(component);
        decoratorB.operate();
    }
}
5、装饰者模式的4大角色
1、Component:抽象组件。可以是一个接口或者是抽象类,其充当的就是被装饰的原始对象,用来定义装饰者和被装饰者的基本行为。

2、ConcreteComponent:组件具体实现类。该类是 Component 类的基本实现,也是我们装饰的具体对象。

3、Decorator:抽象装饰者装饰组件对象,其内部一定要有一个指向组件对象的引用。在大多数情况下,该类为抽象类,需要根据不同的装饰逻辑实现不同的具体子类。当然,如果是装饰逻辑单一,只有一个的情况下我们可以忽略该类直接作为具体的装饰者。

4、ConcreteDecoratorA 和 ConcreteDecoratorB:装饰者具体实现类。对抽象装饰者的具体实现。
6、装饰者模式实现的5大步骤

1、继承或者实现 Component 组件,生成一个 Decorator 装饰者抽象类;

2、在生成的这个 Decorator 装饰者类中,增加一个 Component 的私有成员对象;

3、将 ConcreteComponent 或者其他需要被装饰的对象传入 Decorator 类中并赋值给上一步的 Component 对象;

4、在装饰者 Decorator 类中,将所有的操作都替换成该 Component 对象的对应操作;

5、在 ConcreteDecorator 类中,根据需要对应覆盖需要重写的方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值