15_门面模式

【门面模式】

也称为 外观模式。

要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

门面模式注重“统一的对象”,也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生。(即领导想了解项目完成的情况,只能通过项目经理,无需去询问底层的程序员、美工、产品经理之类的)。

门面模式主要有两部分组成:

* Facade门面角色

客户端可以调用这个角色的方法。此角色知道所有子系统的所有功能和职责。一般情况下,本角色会将所有客户端发来的请求委派到对应的子系统去,也就是说该角色没有实际的业务逻辑,只是一个委托类。

* subSystem子系统角色

可以同时有一个或多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在。相对于子系统而言,门面角色知识另外一个客户端而已。

【门面模式 例子】

package com.Higgin.Facade;

/**
 * 产品经理
 */
class ProductManager{
    //设计产品
    public void designProduct(){
        System.out.println("产品经理:设计产品...");
    }
}
/**
 * 程序员
 */
class Programmer{
    //写程序
    public void writeProgarmm(){
        System.out.println("程序员:写程序...");
    }
}
/**
 * 美工
 */
class ArtDesigner{
    public void designArt(){
        System.out.println("美工:设计网页...");
    }
}
/**
 * 项目经理
 * 管理者 产品经理、程序员、美工
 */
class ProjectManager{
    private ProductManager productManager=new ProductManager();
    private Programmer programmer=new Programmer();
    private ArtDesigner artDesigner=new ArtDesigner();
    //项目经理协调工作
    public void work(){
        productManager.designProduct();
        programmer.writeProgarmm();
        artDesigner.designArt();
    }
}
/**
 * 门面客户端
 */
public class TestFacade {
    public static void main(String[] args) {
        ProjectManager projectManager=new ProjectManager();
        projectManager.work();
    }
}

【运行结果】

【门面模式 优点】

* 减少系统的相互依赖

所有的依赖都是对门面对象的依赖,与子系统无关。

* 提高了系统的灵活性

依赖减少了,灵活性自然就提高了。不管子系统内部如何变化,只要不影响到门面对象,任你自由活动。

* 提高安全性

想让你访问子系统的哪些业务就开通哪些业务,不在门面上开通的方法则无法访问。

【门面模式 缺点】

不符合开闭原则,对修改关闭,对扩展开放。子系统有修改的情况,唯一能修改的就是门面角色的代码。

【门面模式 使用场景】

* 为一个复杂的模块或子系统提供一个共外界访问的接口。

* 子系统相对独立,外界对子系统的访问只要黑箱操作即可。

* 预防低水平人员带来的风险扩散

【门面模式 注意事项】

一般情况下,一个子系统主要有一个门面就够了。

下面情况可能会有多个门面:

* 门面已经庞大到不能忍受的地步

如果一个纯洁的门面对象已经超过了200行代码,虽然都是简单的委托操作,也建议拆成多个门面,否则会带来维护和扩展的麻烦。如何拆分呢?按照功能拆分是非常好的原则:如一个操作数据库的门面类可以拆分成:查询门面类、删除门面类、更新门面类。

* 子系统可以提供不同的访问路径

ClassA、ClassB、ClassC是一个子系统中的3对独享,现在有两个不用的高层模块想要访问该子系统,模块一可以完整地访问所有业务逻辑,也就是代码中的Facade类,它是子系统的信任模块。二模块二可以是受限制访问对象,只能访问ClassB的methodB()方法。

时间: 2024-10-13 21:30:24

15_门面模式的相关文章

门面模式

门面模式[Facade Pattern ] interface LetterProcess{ void writeContent(String content); void fillEnvelope(String address); void LetintoEnvelope(); void sendLetter(); } class LetterProcessImpl implements LetterProcess{ @Override public void writeContent(Str

第 7 章 门面模式【Facade Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发

JavaScript高级---门面模式设计

门面模式 两个作用: 1.简化类的接口 2.消除类与使用它的客户代码之间的耦合 门面模式常常是开发人员最亲密的朋友.它几乎是所有javascript库的核心原则 门面模式的目的是为了让开发人员用更简单的方法调用一些相对复杂或组合的方法,主要就是简化开发的复杂性,提供一个相对容易的API去调用内部的方法供外界去使用,这样程序员开发会变得轻松些,编写一次组合代码后可以反复的去使用它,有助于节省时间和精力 注意: 不要滥用门面模式,所以使用你心仪的门面之前一定要三思而定,搞不好你就会小题大做 引入概念

设计模式(七)门面模式(Facade)-结构型

门面模式Facade 门面模式:统之间的接口.框架之间的衔接 (1)使用接口的形式来开发,不需要知道接口中内部方法的实现: (2)门面模式就是为子系统对外提供的一组接口提供一个统一的界面,使得其他系统对该系统的访问都通过这个统一的界面来完成. (3)当一个负载的系统需要对外提供接口时,就需要将对提供的接口统一封装在外观类里,供外系统使用. 门面模式原理图 门面模式原理图 不用门面设计模式的情况 Holiday.java public class Holiday { public double g

JS设计模式(门面模式)

<!--JS设计模式(门面模式)--> // 门面模式的概念:简化API接口 最经典的就是事件 // 做一件事情: 必须要调用2个函数分别是 a , b //案例:获得页面上多个元素并设置css样式 window.onload=function(){ setCss(["div1","div2","div3"],{ background:"blue", color:"#fff" }); } fun

IOS设计模式之二(门面模式,装饰器模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 门面(Facade)模式(译者注:facade有些书籍译为门面,有些书籍译为外观,此处译为门面) 门面模式针对复杂的子系统提供了单一的接口,不需要暴漏一些列的类和API给用户,你仅仅暴漏一个简单统一的API. 下面的图解释了这个概念: 这个API的使用者

JAVA设计模式之门面模式(外观模式)

医院的例子 现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其"分而治之",把一个系统划分为几个较小的子系统.如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号.门诊.划价.化验.收费.取药等.看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情. 首先病人必须先挂号,然后门诊.如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验.化验后再回到门诊室. 上图描述的是病人在医院里的体验,图

软件开发常用设计模式—门面模式总结

facade 门面模式定义:有的人也叫它外观模式 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用. 模式说明: 子系统(SubSystem):负责处理复杂的逻辑处理.不直接跟客户打交道.门面(Facade):负责跟子系统进行交互,提供简单易用的功能或接口给客户.客户(Client):通过门面和子系统进行交互,不需关心子系统的细节. 主要作用: 简化复杂接口, 解耦和来屏蔽客户端对子系统的直接访问 c++实现代码(网上大牛提供) 1 #incl

24种设计模式--门面模式【Facede Pattern】

大家都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下子发 1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必要信息告诉我,我给你发,我来做这四个过程,你就不要管了,只要把信件交给我就成