外观模式

一句话定义

隐藏系统复杂性,提供统一的接口访问。

使用场景

功能模块比较单一,提供外部接口访问。
第三方的SDK很常见,例如ImageLoader等。

实现要点

1.在调用者与复杂系统之间添加外观层
2.外观类与复杂系统耦合
3.外观持有复杂系统的接口类

情景假设

实现拍照、上网、电话的功能,通过手机统一封装直接使用。
否则需要一个拍照设备,上网设备,电话设备。

实现步骤

1.创建复杂系统功能模块接口
/**
 * 电话接口
 *
 * @author fengzhen
 * @version 1.0, 2017/5/31
 */
public interface Call {
    /**
     * 打电话给xx
     */
    void callTo(String mobile);
}
/**
 * 相机接口
 *
 * @author fengzhen
 * @version 1.0, 2017/5/31
 */
public interface Camera {
    /**
     * 拍照
     */
    void takePhotos();
}
2.创建功能模块的实现
/**
 * 电话的具体实现
 *
 * @author fengzhen
 * @version 1.0, 2017/5/31
 */
public class CallImpl implements Call{
    @Override
    public void callTo(String mobile) {
        Log.i("info", "callTo: ==++打电话给" + mobile );
    }
}
/**
 * 相机实现
 *
 * @author fengzhen
 * @version 1.0, 2017/5/31
 */
public class CameraImpl implements Camera{
    @Override
    public void takePhotos() {
        Log.i("info", "takePhotos: ==++拍照");
    }
}
3.创建外观类,集成功能模块
/**
 * 外观类
 * 继承电话、相机等功能,提供统一访问
 *
 * @author fengzhen
 * @version 1.0, 2017/5/31
 */
public class Phone {
    private Call mCall;
    private Camera mCamera;

    /**
     * 创建外观类,默认创建一个型号的手机,一个型号的相机
     */
    public Phone() {
        this.mCall = new CallImpl();
        this.mCamera = new CameraImpl();
    }

    /**
     * 提供接口拨打电话
     */
    public void callTo(String mobile){
        mCall.callTo(mobile);
    }

    /**
     * 提供接口访问相机
     */
    public void takePhotos(){
        mCamera.takePhotos();
    }
}
4.调用外观类,使用功能
     // 外观模式
     Phone phone = new Phone();
     phone.takePhotos();
     phone.callTo("张三的手机111");

优缺点

1.不能够进行扩展,想要扩展只能重新写,杜绝使用者修改、安全
2.调用简单,调用代码简洁,系统依赖少
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值