关于android:Android入门教程-装饰者模式

定义

动静的给一个对象增加一些额定的职责。就减少性能来说,装璜模式比生成子类更加灵便。
在不用扭转原类文件和应用继承的状况下,动静地扩大一个对象的性能。

装璜者与被装璜者领有独特的超类,继承的目标是继承类型,而不是行为

装璜模式中,必然有一个最根本、最外围、最原始的接口或抽象类充当Component 形象构件。

装璜模式的通用构造

Component              // 最根本的形象构件,接口或抽象类
Operation()
ConcreteComponent      // 具体的构件
Decorator              // 形象的装璜者
ConcreteComponent      // 具体的装璜者

优缺点和利用场景

长处

  • 装璜类和被装璜类能够独立倒退,不会耦合
  • 装璜模式是继承关系的一个代替计划
  • 装璜模式能够动静地扩大一个类(扩展性好)

毛病:多层的装璜是比较复杂的。

利用场景

次要场景就是能施展长处的中央

  • 扩大一个类的性能,或给一个类减少附加性能
  • 动静地减少或撤销一个类的性能
  • 须要为一批兄弟类进行改装或加装性能

代码示例

worker 示例

AWorker 称为装璜者 Plumber 称为被装璜者

先定义一个 Plumber,接着将其传入 AWorker 中;这样失去的是 AWorker-Plumber Carpenter 同理。这里装璜者的办法中调用的是传入对象的类的办法。

/**
 * Decoration test
 */
public class Decoration {

    public static void main(String args[]) {
        Plumber plumber = new Plumber();
        AWorker aWorker = new AWorker(plumber);
        aWorker.doSomeWork();
        Carpenter carpenter = new Carpenter();
        BWorker bCarpenter = new BWorker(carpenter);
        bCarpenter.doSomeWork();
    }
}

interface Worker {
    void doSomeWork();
}

class Plumber implements Worker {
    public void doSomeWork() {
        System.out.println("Plumber do some work!");
    }
}

class Carpenter implements Worker {
    public void doSomeWork() {
        System.out.println("Carpenter do some work!");
    }
}

class AWorker implements Worker {
    private Worker tempWorker;

    public AWorker(Worker worker) {
        tempWorker = worker;
    }

    public void doSomeWork() {
        System.out.println("Hello,I am a A worker");
        tempWorker.doSomeWork();// use the Worker class method
    }
}

// use temp Worker, avoid "this"
class BWorker implements Worker {
    private Worker worker;

    public BWorker(Worker worker) {
        this.worker = worker;
    }

    public void doSomeWork() {
        System.out.println("Hello,I am a B worker");
        worker.doSomeWork();
    }
}

输入:

Hello,I am a A worker
Plumber do some work!
Hello,I am a B worker
Carpenter do some work!

【Android 零根底入门教程视频】
【Android 框架源码解析视频】
【Android 大厂面试题精讲视频】

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理