[转载]设计模式——Facade模式

baacloud免费翻墙vpn注册使用

[转载]设计模式——Facade模式 – 探索、挖掘、研究、致用、创新 – 博客园.

本文用Facade模式(外观模式)模拟:管理者向车轮车间下达生产车轮的过程。希望更好的体现出Facade模式的价值

场景描述:

车子零件生产部门接到任务,需要生产一批车轮子给制造车子的部门。

Manager(客户)首先找到车轮子生产车间的负责人(Facade)下达任务:”生产100车轮子去。”

完了,一句话,Manager(客户)的工作完成了。

负责人(Facade)通知轮胎生产线(子系统),车圈生产线(子系统):”你们做100个轮胎出来。”

完事,他的任务也完成了

轮胎生产线(子系统),车圈生产线(子系统)启动机器就开始了

在此之前,有必要回顾一下Facade模式的概述。

Facade模式是一种结构型设计模式(Structural Pattern)。

结构型设计模式,描述如何将类或者对象结合在一起形成更大的结构。

设计模式元老是这样描述Facade模式的:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

Facade将客户的请求代理给适合的子系统对象。客户发送请求给Facade的方式与子系统通信。

从而客户不需要直接访问子系统对象。Facade隐藏了子系统的内部细节,减少了客户处理的事物,从而实现解耦。

ok,开始


先来构建车间(子系统)角色

01 <span style="font-size: 12pt;"> /// <summary>
02 /// 车圈车间
03 /// </summary>
04 public class RimWorkshop
05 {
06 public void ProduceRim(int count)
07 {
08 //生产中..
09 Console.WriteLine(count+"个车圈,生产完毕");
10 }
11 }
12
13 /// <summary>
14 /// 轮胎车间
15 /// </summary>
16 public class TireWorkshop
17 {
18 /// <summary>
19 /// 生产轮胎
20 /// </summary>
21 public void ProduceTire(int count)
22 {
23 //生产中...
24 Console.WriteLine(count+"个轮胎,生产完毕");
25 }
26 }</span>

再来构建车间负责任人(Facade)角色

01 <span style="font-size: 12pt;"> /// <summary>
02 /// Facaee 模式
03 /// </summary>
04 public class Facade
05 {
06 private int _count;
07 public Facade(int count)
08 {
09 _count = count;
10 }
11
12 /// <summary>
13 /// 生产轮子 (车间管理者)
14 /// </summary>
15 public void ProduceWheel()
16 {
17 //生产轮胎
18 TireWorkshop tws = new TireWorkshop();
19 tws.ProduceTire(_count);
20
21 //生产车圈
22 RimWorkshop rws = new RimWorkshop();
23 rws.ProduceRim(_count);
24 }
25 }
26 </span>


再来构建Manager(客户)角色

01 <span style="font-size: 12pt;"> /// <summary>
02 /// 零件管理者
03 /// </summary>
04 class Manager
05 {
06 /// <summary>
07 /// 下达任务
08 /// </summary>
09 public void RunTask()
10 {
11 //通知造轮子小组任务
12 Facade facade = new Facade(100);
13 //开始生产
14 facade.ProduceWheel();
15
16 Console.ReadLine();
17 }
18 }
19 </span>

杂谈:

Facade模式可应用于下面几种场合中

  1. 希望封装或者隐藏子系统
  2. 只想使用一个复杂系统中的部分功能
  3. 对于一个现有的系统,希望扩展新的功能


源码地址
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏