外观模式小试

摘要:
蒙皮模式封装交互的目的是简化调用。然后,在要调用的外观类中有选择地将一些方法公开给外部。这样,在外部调用函数非常简单,每个模块的实现细节都是隐藏的。

一、介绍:

引用《研磨设计模式》中的定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这一接口使得这一子系统更易于使用。

外观模式的本质是——封装交互、简化调用。

什么意思呢?外观模式封装交互的目的,就是简化调用。说白了,就是要讲各个模块之间复杂的交互,放到外观类的某些方法中。然后在外观类中选择性的将某些方法暴露给外部去调用。这样一来,对于外部而言,调用功能就非常简单了,而且还隐藏了各个模块的实现细节。

二、结构

外观模式小试第1张

1、Facade——对外的高层接口。

2、Client——调用者

3、ModelApiX——模块接口

4、ModelApiXImpl——模块接口实现类

三、我的实现

1、我们有这样3个模块A、B、C,对应接口如下:

packagefacade;

public interfaceInterfaceA {

    public voida1();
    public voida2();
}
packagefacade;

public interfaceInterfaceB {

    public voidb1();
    public voidb2();
}
packagefacade;

public interfaceInterfaceC {

    public voidc1();
    public voidc2();
}

2、有对应3个实现类,如下:

packagefacade;

public class ImplA implementsInterfaceA {

    @Override
    public voida1() {
        //TODO Auto-generated method stub
        System.out.println("al");
    }

    @Override
    public voida2() {
        //TODO Auto-generated method stub
        System.out.println("a2");
    }
}
packagefacade;

public class ImplB implementsInterfaceB {

    @Override
    public voidb1() {
        //TODO Auto-generated method stub
        System.out.println("b1");
    }

    @Override
    public voidb2() {
        //TODO Auto-generated method stub
        System.out.println("b2");
    }
}
packagefacade;

public class ImplC implementsInterfaceC{

    @Override
    public voidc1() {
        //TODO Auto-generated method stub
        System.out.println("c1");
    }

    @Override
    public voidc2() {
        //TODO Auto-generated method stub
        System.out.println("c2");
    }    
}

3、模块A、B、C,中有一部分方法是打算暴露给调用者,有一部分则打算隐蔽。

为此我们定义一个外观接口:

packagefacade;

public interfaceFacadeInterface {

    public voida1();
    public voidb1();
    public voidc1();
    public voidtest();
}

一个实现类,如下:

packagefacade;

public class Facade implementsFacadeInterface {

    InterfaceA a = newImplA();
    InterfaceB b = newImplB();
    InterfaceC c = newImplC();

    @Override
    public voida1() {
        //TODO Auto-generated method stub
a.a1();
    }

    @Override
    public voidb1() {
        //TODO Auto-generated method stub
b.b1();
    }

    @Override
    public voidc1() {
        //TODO Auto-generated method stub
c.c1();
    }

    @Override
    public voidtest() {
        //TODO Auto-generated method stub
a.a2();
        b.b2();
        c.c2();
    }

}

于是,由于组件之间的组合在外观实现类中已经组合完毕,因此,客户端调用时,便相当简单,如下:

packagefacade;

public classclient {

    public static voidmain(String[] args) {
        FacadeInterface facade = newFacade();
        facade.test();
    }
}

免责声明:文章转载自《外观模式小试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇机器学习sklearn(四十二):算法实例(十一)分类(五)RandomForestClassifier(二)实例:随机森林在乳腺癌数据上的调参sed入门下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android平台下的JNI开发

JNI是Java Native Interface的缩写,通过JNI可以方便我们在Android平台上进行C/C++编程。要用JNI首先必须安装Android的NDK,配置好NDK环境之后就可以在Eclipse下进行C/C++开发了。 其实JNI的原理很容易理解,其本质就是在Java层定义一个接口,同时在C层用C/C++代码实现该接口的功能并编译成动态链接...

记一次Hvv中遇到的API接口泄露而引起的一系列漏洞

引言 最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注 前言 Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的API泄露到一系列漏洞。这次的经历更让我体会到了细心的重要性。 挖掘起始 Hvv中拿到了一大堆的资产,有IP和URL的,我一般会先去手动挖掘已经给了的URL资产...

Java的RMI远程方法调用实现和应用

最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机(即JVM虚拟机)上的对象可以调用另外一台计算机上的对象来获取远程数据。 RMI的实现对建立分布式Java应用程序至关重要,是Java体系非常重要的底...

BTC_ETH_USDT_自动充提币API接口,钱包对接交易所教程!

 以目前市面上用的最多的优盾钱包开放平台为例。 详细的接口文档如下: 官方接口文档链接:https://www.uduncloud.com/gateway-interface 1、目录 1.1、生成地址 1.2、提币 1.3、代付 1.4、交易回调 1.5、校验地址合法性 1.6、获取商户支持币种信息 2、接口明细 1、生成地址 1.1 场景说明 请求指...

Anders谈C# 4.0:新功能和展望

刚才刚看完Anders的PDC Talk,感觉C# 4.0的变化不是很大,但是很多改动都方便了用户的使用,有些甚至当初Anders本来不愿意加入的功能最后由于用户的呼声最后还是加进去了(如 Optional Parameters),可见Anders对用户的意见还是非常重视的。稍微总结一下,C# 4.0中有下面这些功能: 1. dynamic/IDynami...

接口学习心得(Interface)

今天看了几篇接口的文章,看着看着,忽然有种感觉,我一直都理解错了! 我本来今天搜索文章的目的,是想查找一下,如何编写一个接口。可是看了几篇文章后,我发现,其实我这个问题的提出,就说明了我没有理解接口的用途。实际上,要明白接口,要先弄明白为什么要编写接口。我们要编写接口,是因为我们要编写的方法需要使用接口。我们编写接口的目的,是为了定制一种规范,如果用户写的...