博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
外观模式
阅读量:6681 次
发布时间:2019-06-25

本文共 1743 字,大约阅读时间需要 5 分钟。

外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 外观模式又称为门面模式,它是一种对象结构型模式。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度

在软件开发中,有时候为了完成一项较为复杂的功能,一个客户类需要和多个业务类交互,而这些需要交互的业务类经常会作为一个整体出现,由于涉及到的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似服务员一样的角色,由它来负责和多个业务类进行交互,而客户类只需与该类交互。外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类充当了软件系统中的“服务员”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。在外观模式中,那些需要交互的业务类被称为子系统(Subsystem)。如果没有外观类,那么每个客户类需要和多个子系统之间进行复杂的交互,系统的耦合度将很大,如图2(A)所示;而引入外观类之后,客户类只需要直接与外观类交互,客户类与子系统之间原有的复杂引用关系由外观类来实现,从而降低了系统的耦合度

外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道

外观模式的主要目的在于降低系统的复杂程度,在面向对象软件系统中,类与类之间的关系越多,不能表示系统设计得越好,反而表示系统中类之间的耦合度太大,这样的系统在维护和修改时都缺乏灵活性,因为一个类的改动会导致多个类发生变化,而外观模式的引入在很大程度上降低了类与类之间的耦合关系。引入外观模式之后,增加新的子系统或者移除子系统都非常方便,客户类无须进行修改(或者极少的修改),只需要在外观类中增加或移除对子系统的引用即可。从这一点来说,外观模式在一定程度上并不符合开闭原则,增加新的子系统需要对原有系统进行一定的修改,虽然这个修改工作量不大

在这里插入图片描述

/// /// 外观模式/// class Program{    static void Main(string[] args)    {        FacadeMode facadeMode=new FacadeMode();        facadeMode.methodA();        facadeMode.methodB();        facadeMode.methodC();        Console.ReadKey();    }}   class FacadeMode  {    private SubSystemA subSystemA=new SubSystemA();    private SubSystemB subSystemB=new SubSystemB();    private SubSystemC subSystemC=new SubSystemC();    public void methodA()    {        subSystemA.MethodA();    }    public void methodB()    {        subSystemB.MethodB();    }    public void methodC()    {        subSystemC.MethodC();    }}   class SubSystemA{    public  void  MethodA()    {        Console.WriteLine("methoda");    }}class SubSystemB{    public void MethodB()    {        Console.WriteLine("methodb");    }}class SubSystemC{    public void MethodC()    {        Console.WriteLine("methodc");    }}

在这里插入图片描述

转载地址:http://bdrxo.baihongyu.com/

你可能感兴趣的文章
Python中MySQLdb模块的安装
查看>>
windows下的grep
查看>>
find 详解
查看>>
【书签】valgrind - the dynamic analysis tools
查看>>
zookeeper-体验原生api
查看>>
2015中国呼叫中心知识库发展的5个趋势
查看>>
功能教室预约系统开源下载(c#源码)
查看>>
杨百旺短线技法
查看>>
Linux Mysql Related
查看>>
Impala 和 Hive 之间 SQL 区别(翻译)
查看>>
Exception练习-Exception的正确使用
查看>>
关于rms,打开文档的时候提示您没有权限打开文档,因为您的权限已过期
查看>>
如何在eclipse里关联查看android源码
查看>>
总结:提高服务并发能力之DB
查看>>
jdbcTemplate.queryForList获取的List转实体 -----解决方案
查看>>
IBM V7000U
查看>>
关于Java Servlet的中文乱码
查看>>
Android Push Notification实现信息推送使用
查看>>
Netty权威指南带目录完整版.pdf
查看>>
AFNetWorking https 双向认证
查看>>