外观模式的介绍以及与适配器模式和装饰者模式的区别


外观模式
定义:提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。

举例:我需要打开微信发送给某个好友某些内容,其中的过程包括了,下载微信,输入账号密码,点击登陆,找到好友,发送消息。这些整体封装成了一个对外的方法,当我调用需要这个流程的时候,我通过一个方法的调用,直接就能实现全部的流程,不需要在请求方,去组合方法去完成这个操作。

设计原则:莫忒耳原则又称最少知识原则,只和你的密友谈话,通过“举例”,可以明白这个原则的定义。

原则缺点:采用这个原则会导致更多的”包装“对象被制造出来,以处理和其他组件的沟通,可能会导致复杂度和开发时间的增加,降低运行时性能

设计模式比较:外观模式,适配器模式,装饰者模式
适配器模式:当需要使用一个现有的类,但是接口并不符合要求,考虑使用适配器模式。将一个对象包装起来改变接口。
外观模式:当需要简化并统一一个/一群很大的接口的时候,考虑使用外观模式。依托与子系统执行。
装饰着模式:将一个对象包装起来,增加新的行为和责任。
代码简单举例:

创建一个APPSotre的对象,来描述在APPStore内的操作

package com.appearancePattern;

/**
 * @program: test
 * @description: 应用商店
 * @author: Mr.Yang
 * @create: 2018-12-16 14:58
 **/
public class AppStore {
    /**
     * 查找应用
     * @param userName 应用名称
     */
    public void findApp(String userName){
        System.out.println("寻找应用名称 appName : "+userName);
    }

    /**
     * 下载App
     */
    public void downLoadApp(){
        System.out.println("下载app");
    }
}

创建一个Wechat的对象,来描述在Wechat内的操作

package com.appearancePattern;

/**
 * @program: test
 * @description: 微信方法封装类
 * @author: Mr.Yang
 * @create: 2018-12-16 14:54
 **/
public class Wechat {
    /**
     * 输入微信账号密码
     * @param userName 微信账号
     * @param passWord 微信密码
     */
    public void inputNamePass(String userName,String passWord){
        System.out.println("输入账号密码:userName:"+userName+" 密码:"+passWord);
    }

    /**
     * 点击登陆
     */
    public void clickLogin(){
        System.out.println("点击登陆");
    }

    /**
     * 查找用户
     */
    public  void findUser(String userName){
        System.out.println("查找用户 userName : "+userName);
    }

    /**
     * 发送消息
     * @param message 消息内容
     */
    public void sendMessage(String message){
        System.out.println("发送消息:message : "+message);
    }

}

利用统一组装方法做个修饰,对外暴露一个完整功能-外观模式

package com.appearancePattern;

/**
 * @program: test
 * @description: 外观封装类
 * @author: Mr.Yang
 * @create: 2018-12-16 15:01
 **/
public class AppearanceEnc {
    AppStore appStore;
    Wechat wechat;
    public AppearanceEnc(AppStore appStore,Wechat wechat){
        this.appStore=appStore;
        this.wechat=wechat;
    }

    /**
     * 组装发送消息的操作
     */
    public void encSendMessage(){
        appStore.findApp("wechat");
        appStore.downLoadApp();
        wechat.inputNamePass("测试","123");
        wechat.clickLogin();
        wechat.findUser("小明");
        wechat.sendMessage("在吗?借点钱");
    }
}

模拟调用方--测试

package com.appearancePattern;

/**
 * @program: test
 * @description: 客户端测试类
 * @author: Mr.Yang
 * @create: 2018-12-16 15:04
 **/
public class Test {
    /**
     * 使用了外观模式,不仅提供了一个简化的接口访问,还可以进行单独的接口访问。
     * 外观模式的特征:提供简化接口的同时,依然将系统完整的功能暴露出来,以共需要的程序使用
     * @param args
     */
    public static void main(String[] args) {
        AppStore appStore = new AppStore();
        Wechat wechat = new Wechat();
        AppearanceEnc appearanceEnc = new AppearanceEnc(appStore,wechat);
        appearanceEnc.encSendMessage();
    }
/*
    *//**
     * 客户端测试,如果没有做一个统一方法的组合处理,客户端代码会变得很多。
     * @param args
     *//*
    public static void main(String[] args) {
        AppStore appStore = new AppStore();
        Wechat wechat = new Wechat();
        appStore.findApp("wechat");
        appStore.downLoadApp();
        wechat.inputNamePass("测试","123");
        wechat.clickLogin();
        wechat.findUser("小明");
        wechat.sendMessage("在吗?借点钱");
    }*/
}

得到测试结果:

寻找应用名称 appName : wechat
下载app
输入账号密码:userName:测试 密码:123
点击登陆
查找用户 userName : 小明
发送消息:message : 在吗?借点钱

外观模式总结:

外观模式允许从客户实现从子系统中解耦,比如:微信多了个登陆验证功能,我们只需要改变外观的代码就能实现,客户代码是针对于外观模式的,而不是针对自己系统来做的操作。

                              

                              知而好学,然后能才。

                                                                      -----荀况

优质内容筛选与推荐>>
1、tizen
2、银行卡系统
3、CodeForces 236B Easy Number Challenge
4、Windows 7 “Tunnel adapter Local Area Connection” 现象(IPv6)
5、java文件下载


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn