安卓系列之设计模式:装饰器模式

161 阅读1分钟

定义

在不更改原来对象的情况下,新增功能,此模式属于结构型模式。

应用场景

一个类需要拓展新的功能

优点

1.不改变原来对象的情况下添加了新的功能 2.使用不同的组合实现不同的结果 3.类和装饰类解偶

缺点

可能会有很多层装饰

具体代码实现

例子说明:手机有很多功能,这些功能是随时代科技发展不断叠加的,那么手机用途作为一个类,然后不断给手机用户添加新的功能。 

手机用途接口

package com.elaine.testpattern.decorator;

/**
 * 手机用途
 *
 * author: elaine
 * date: 2021/4/23
 */
public interface PhoneUse {
    void use();
}

基础功能 打电话

package com.elaine.testpattern.decorator;

import android.util.Log;

/**
 * 手机基础功能---打电话
 * author: elaine
 * date: 2021/4/23
 */
public class CallUse implements PhoneUse {
    @Override
    public void use() {
        Log.e("use====""打电话");
    }
}

手机用途装饰器

package com.elaine.testpattern.decorator;

/**
 * 用处装饰器
 *
 * author: elaine
 * date: 2021/4/23
 */
public abstract class UseDecorator implements PhoneUse {
    PhoneUse phoneUse;

    public UseDecorator(PhoneUse phoneUse) {
        this.phoneUse = phoneUse;
    }
}

新增用途

计算

package com.elaine.testpattern.decorator;

import android.util.Log;

/**
 * 计算功能
 * <p>
 * author: elaine
 * date: 2021/4/23
 */
public class CalculateUse extends UseDecorator {
    public CalculateUse(PhoneUse phoneUse) {
        super(phoneUse);
    }

    @Override
    public void use() {
        Log.e("use===""计算");
        phoneUse.use();
    }
}

拍照

package com.elaine.testpattern.decorator;

import android.util.Log;

/**
 * 拍照功能
 * author: elaine
 * date: 2021/4/23
 */
public class PhotographUse extends UseDecorator {
    public PhotographUse(PhoneUse phoneUse) {
        super(phoneUse);
    }

    @Override
    public void use() {
        Log.e("use===""拍照");
        phoneUse.use();
    }
}

运行代码

private void use() {
    //可以拍照打电话计算的手机
    PhoneUse phoneUse = new PhotographUse(new CalculateUse(new CallUse()));
    phoneUse.use();
}

运行结果

图片

若帅哥美女对该系列文章感兴趣,可微信搜索公众号(木子闲集)关注更多更新文章哦,谢谢~