【Design Pattern】-----Facade

2024-08-27 22:08
文章标签 design facade pattern

本文主要是介绍【Design Pattern】-----Facade,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


        

  【Design Pattern】-----Facade


 

目录

基础概念... 

类图:...

java   Facade

     SystemOne.java

     StystemTwo.java

     StystemThree.java

     StystemFour.java

     Facade.java

     User.java (客户端)

.net例子代码:... 

     SubSystem.cs

     Facade.cs

     Program.cs (客户端)

小结:... 

     实用什么场景?... 

     使用外观模式的好处...1

 

 

 

基础概念:

 /**

 * 外观模式的总结:

 * 概念:为子系统的一组接口提供一个一致的界面,定义了一个高层接口,

 * 这个接口使得这一子系统更加容易使用。

 * 目的:使得耦合性大大降低

 * @author Daniel.He

 *

 */

 

类图:


            


java  Facade

              

   


SystemOne.java

public class SystemOne {public void OpenSystemOne(){System.out.println("Open SystemOne");}public void ShutSystemOne(){System.out.println("Shut SystemOne");}
}


StystemTwo.java

public class SystemTwo {public void OpenSystemTwo(){System.out.println("Open SystemTwo");}public void ShutSystemTwo(){System.out.println("Shut SystemTwo");}
}


StystemThree.java

public class SystemThree {public void OpenSystemThree(){System.out.println("Open SystemThree");}public void ShutSystemThree(){System.out.println("Shut SystemThree");}
}


 

StystemFour.java

public class StystemFour {public void OpenStsytemFour(){System.out.println("Open StystemFour");}public void ShutStsytemFour(){System.out.println("Shut StystemFour");}
}


 

Facade.java

public class Facade {SystemOne One;SystemTwo Two;SystemThree Three;StystemFour Four;public Facade(){One=new SystemOne();Two=new SystemTwo();Three=new SystemThree();Four=new StystemFour();}public void MethodOPen(){One.OpenSystemOne();Two.OpenSystemTwo();Three.OpenSystemThree();Four.OpenStsytemFour();        }public void MethodShut(){One.ShutSystemOne();Two.ShutSystemTwo();Three.ShutSystemThree();Four.ShutStsytemFour();}}


User.java (客户端)

public class User {public static void main(String[] args){Facade facade=new Facade();facade.MethodOPen();facade.MethodShut();}
}

 

.net例子代码:

            

  

SubSystem.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade1._3
{class SubSystemOne{public void MethodOne(){Console.WriteLine("子系统方法一");}}class SubSystemTwo{public void MethodTwo(){Console.WriteLine("子系统方法二");}}class SubSystemThree{public void MethodThree(){Console.WriteLine("子系统方法三");}}class SubSystemFour{public void MethodFour(){Console.WriteLine("子系统方法四");}}
}


 

Facade.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade1._3
{class Facade{SubSystemOne One;SubSystemTwo Two;SubSystemThree Three;SubSystemFour Four;public Facade(){One = new SubSystemOne();Two = new SubSystemTwo();Three = new SubSystemThree();Four = new SubSystemFour();}public void MethodA(){Console.WriteLine("\n 方法组A()-----");One.MethodOne();Two.MethodTwo();Four.MethodFour();}public void MethodB(){Console.WriteLine("\n 方法组A()------");Two.MethodTwo();Three.MethodThree();}}
}


 

Program.cs (客户端)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade1._3
{class Program{static void Main(string[] args){Facade facade = new Facade();facade.MethodA();facade.MethodB();Console.Read();}}
}




小结:

    外观模式主要就是为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

   实用什么场景?

   (1)设计初期阶段,应该有意识的讲不通层分离,层与层之间建立外观模式。

   (2)开发阶段,子系统越来越复杂,增加外观模式提高一个简单的调用接口。

   (3)维护一个大型遗留系统的时候,可能这个系统已经难以维护和扩展,但又包含非常重要的功能,为其开发一个外观来,以便更新系统与其交互。

使用外观模式的好处:

   (1)实现子系统与客户端之间的松耦合关系。

  (2)客户端屏蔽了子系统组件,减少了客户端所处理的对象的数目,并使得子系统使用起来更加容易。

 

 

 

 

这篇关于【Design Pattern】-----Facade的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112908

相关文章

Axure元件库Ant Design中后台原型模板:提升设计与开发效率的利器

企业对于中后台产品的设计与开发需求日益增长。为了提升用户体验和开发效率,设计者和开发者们不断寻求更加高效、统一的解决方案。Ant Design,作为阿里巴巴开源的一套企业级UI设计语言和React组件库,凭借其丰富的组件和统一的设计风格,已成为众多项目的首选。而在Axure中使用Ant Design元件库,更是为中后台产品的原型设计带来了极大的便利。 Ant Design简介 Ant D

【UVA】11400-Lighting System Design(动态规划)

这道题感觉状态式不是很好推。。。 WA了好几次是因为排序的时候出问题了。 这道题出在线性结构里了,先说一下最长上升子序列吧。 dp[i]代表了以array[i]结尾的时候,最长子序列长度。 推导的时候,以起点递增的顺序进行推导。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#i

Circuit Design 贴片晶振的区分

贴片晶振脚位的区分(非常详细,尤其是如何区分四脚的有源无源晶振): http://ruitairt.com/Article/tiepian_1.html 如何区分有源和无源晶振: http://ruitairt.com/Article/yzjddbfqsq_1.html

Circuit Design RC 震荡电路

为了测试一个信号放大器,手边又没有合适的信号发生器,所以就需要自己手动来一个信号发生器。。。。。由于所需的频率大概也不会太高,手边也没有电感,所以选择用RC震荡电路来实现这个功能。 借鉴的网页: http://www.eepw.com.cn/article/283745.htm RC振荡电路,采用RC选频网络构成,适用于低频振荡,一般用于产生1Hz~1MHz(fo=1/2πRC)的低频信号。

Circuit Design 三极管驱动蜂鸣器电路 及 蜂鸣器两端电压正确但是不响的解决方案

利用三极管进行电流放大的蜂鸣器驱动电路图: (百度图片找的) 我用有源蜂鸣器实现的这个电路,但是蜂鸣器不响。 details: 1. VCC =5V 蜂鸣器两端的直接电压约为4.5V, 但是蜂鸣器不响。 2. 将蜂鸣器直接接在4.5V的电源两端,蜂鸣器响。(说明蜂鸣器是好的) 3. 测了三极管各个管脚的电压, 和理论上的是一致的。 情况很奇怪,换了好几个三极管结果都是一样的,

设计模式 -- 职责链模式(Chain of Responsibility Pattern)

1 问题引出 1.1 学校 OA 系统的采购审批项目 如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,有校长审批 ( 30000<x) 1.2 传统方式 传统方式是

ant-design-pro 学习01

1、开始学习ant-design-pro,安装啥的自动忽略,参考文档:https://pro.ant.design/docs/getting-started-cn 根据文档学习,添加页面,新增组件都没问题,可以跟着做,但是到了和服务器交互时就有点蒙了,因为ant-design-pro采用了dva框架实现,前段使用react技术,对于只有后台开发经验的我还停留在springmvc 的工作模式上,对

ant design pro 新增页面

1.在 src/routes/ 下面创建一个页面 // 填写如下内容/** NewPage.js内容 */import React, { Component } from 'react';export default class NewPage extends Component {render() {return (<div>这是新页面</div>)}}/** NewPage.le

ant mobile design组件库的PickerView组件不能滑动

问题 PickerView组件在开发环境可滑动,在测试环境不可滑动 正常开发环境是这样正常显示,并且可滑动的 发到测试环境后,变成了这样,并且只有中间那列可滑动,两边的都不能滑动,而且还会报警告 封装的组件代码如下 // 日期选择组件const CustomDatePickerView: FC<any> = ({customizeTab,setCustomizeTime,cus

vue3+ant design vue实现表格导出(后端返回文件流类型导出)

1、之前的博客介绍了,依据页面展示的table表格数据为基础展示表格导出,今天介绍下后端返回文件流来实现表格导出。 <a-button class="btn" type="primary" @click="exportData1">导出</a-button>import {ExportTheEmployeesTab } from '@/api/import';// 导出import { dow