[转载]设计模式——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> |
04 |
public class RimWorkshop |
06 |
public void ProduceRim( int count) |
09 |
Console.WriteLine(count+ "个车圈,生产完毕" ); |
16 |
public class TireWorkshop |
21 |
public void ProduceTire( int count) |
24 |
Console.WriteLine(count+ "个轮胎,生产完毕" ); |
再来构建车间负责任人(Facade)角色
01 |
<span style= "font-size: 12pt;" > /// <summary> |
07 |
public Facade( int count) |
15 |
public void ProduceWheel() |
18 |
TireWorkshop tws = new TireWorkshop(); |
19 |
tws.ProduceTire(_count); |
22 |
RimWorkshop rws = new RimWorkshop(); |
23 |
rws.ProduceRim(_count); |
再来构建Manager(客户)角色
01 |
<span style= "font-size: 12pt;" > /// <summary> |
12 |
Facade facade = new Facade(100); |
14 |
facade.ProduceWheel(); |
杂谈:
Facade模式可应用于下面几种场合中
- 希望封装或者隐藏子系统
- 只想使用一个复杂系统中的部分功能
- 对于一个现有的系统,希望扩展新的功能
- …