装饰者模式Decorator(包装器Wrapper)

定义

动态地给一个对象添加一些额外的职责。就增长功能来讲,装饰模式比生成子类更为灵活。java

装饰者模式类图:

类图说明:

  • Component:抽象构件
    • 能够是一个接口或抽象类,其充当的就是被装饰的原始对象。
  • ConcreteComponent:组件具体实现类
    • 该类是Component类的基本实现,也是咱们装饰的具体对象。
  • Decorator:抽象装饰者
    • 其承担的职责就是为了装饰咱们的组件对象,其内部必定要有一个指向对象组件的引用。在大多数状况下,该类为抽象类,须要根据不一样的装饰逻辑实现不一样的具体子类。固然,若是装饰逻辑单一,只有一个的状况下咱们能够省略该类直接做为具体的装饰者。
  • ConcreteDecoratorA:装饰者的具体实现类
    • 只是对抽象装饰者作出具体的实现。
  • ConcreteDecoratorB:同上。
  • Client:客户类。

使用场景

  • 须要拓展一个类的功能,或给一个类增长附加功能
  • 须要动态地给一个对象增长功能,这些功能能够再动态地撤销
  • 须要为一批的兄弟类进行改装或加装功能

装饰着模式Demo

abstract class Person {
    abstract void dress();
}

class Boy extends Person {

    @Override
    void dress() {
        Log.e("xupeng", "男孩穿衣服");
    }
}

class Girl extends Person {

    @Override
    void dress() {
        Log.e("xupeng", "女孩穿衣服");
    }
}

abstract class PersonCloth extends Person {

    private Person mPerson;

    public PersonCloth(Person person) {
        mPerson = person;
    }

    @Override
    void dress() {
        mPerson.dress();
    }
}

class Expansive extends PersonCloth {

    public Expansive(Person person) {
        super(person);
    }

    @Override
    void dress() {
        super.dress();
        Log.e("xupeng", "贵衣服");
    }
}

class Cheap extends PersonCloth {

    public Cheap(Person person) {
        super(person);
    }

    @Override
    void dress() {
        super.dress();
        Log.e("xupeng", "便宜衣服");
    }
}
Person person = new Boy();
person = new Expansive(person);
person = new Cheap(person);
person.dress();

在Android中的应用

Context ide

http://www.javashuo.com/article/p-yegqpqxb-hz.htmlspa

相关文章
相关标签/搜索