设计模式11——结构型模式之外观模式
2014-01-19 19:06
302 查看
定义:外观模式(Façade Pattern),为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
类型:结构型模式。
适用性:
当子系统非常复杂时,使得客户调用非常麻烦,不便于使用。这个时候就可以使用外观模式将这些子系统封装起来,提供一个统一而简单接口供客户端使用。
当需要构建一个层次结构的子系统时,使用外观模式可以给子系统定义进入口。
概述:
外观模式主要依赖“迪米特法则”,即尽量减少与其他实体之间的联系。例如,用户和一台电脑。如果用户想开机,他不需要云单独打开电源,再启动CPU,再启动硬盘电源,再连接显示器。用户不需要知道电脑开机完成了哪些工作,用户只想开机了就可以正常使用电脑就行了。用户要做的,只是按一下开机键,所有的一切都会在这一个开机动作中自动完成。减少用户对电脑内部的了解,这样能够使得用户更方便地使用电脑,而且如果电脑开机有问题,也不需要云从用户身上找,直接去电脑上面找就可以,能够更方便地定位问题。
类图:
![](http://img.blog.csdn.net/20140119185955875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVpaGUwNzU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
参与者:
Client,客户端,直接与Computer交互。
Computer,由Display,Power,HardDisk几个子系统构成。并且提供一个Startup的接口用来一次性控制所有子系统启动。
Display,Power,HardDisk,子系统,完成Computer指派的功能。
示例代码:
// C#
namespace Design11
{
class Power
{
public void Start()
{
Console.WriteLine("启动电源");
}
}
class Display
{
public void DisplayContent()
{
Console.WriteLine("显示内容");
}
}
class HardDisk
{
public void ReadDisk()
{
Console.WriteLine("读取硬盘数据");
}
}
// Fasade
class Computer
{
private Power power = new Power();
private Display display = new Display();
private HardDisk hDisk = new HardDisk();
public void Startup()
{
power.Start();
display.DisplayContent();
hDisk.ReadDisk();
}
}
// Client
class Program
{
static void Main(string[] args)
{
Computer computer = new Computer();
Console.WriteLine("准备启动电脑");
computer.Startup();
}
}
}
优点:使得代码更加模块化,更方便调用以及查找问题。
注意:如果有多个子系统需要进行通讯时,最好是通过Facade来中转。
参考资料:
《设计模式——可复用面向对象软件基础》
《大话设计模式》
《Head First设计模式》
类型:结构型模式。
适用性:
当子系统非常复杂时,使得客户调用非常麻烦,不便于使用。这个时候就可以使用外观模式将这些子系统封装起来,提供一个统一而简单接口供客户端使用。
当需要构建一个层次结构的子系统时,使用外观模式可以给子系统定义进入口。
概述:
外观模式主要依赖“迪米特法则”,即尽量减少与其他实体之间的联系。例如,用户和一台电脑。如果用户想开机,他不需要云单独打开电源,再启动CPU,再启动硬盘电源,再连接显示器。用户不需要知道电脑开机完成了哪些工作,用户只想开机了就可以正常使用电脑就行了。用户要做的,只是按一下开机键,所有的一切都会在这一个开机动作中自动完成。减少用户对电脑内部的了解,这样能够使得用户更方便地使用电脑,而且如果电脑开机有问题,也不需要云从用户身上找,直接去电脑上面找就可以,能够更方便地定位问题。
类图:
参与者:
Client,客户端,直接与Computer交互。
Computer,由Display,Power,HardDisk几个子系统构成。并且提供一个Startup的接口用来一次性控制所有子系统启动。
Display,Power,HardDisk,子系统,完成Computer指派的功能。
示例代码:
// C#
namespace Design11
{
class Power
{
public void Start()
{
Console.WriteLine("启动电源");
}
}
class Display
{
public void DisplayContent()
{
Console.WriteLine("显示内容");
}
}
class HardDisk
{
public void ReadDisk()
{
Console.WriteLine("读取硬盘数据");
}
}
// Fasade
class Computer
{
private Power power = new Power();
private Display display = new Display();
private HardDisk hDisk = new HardDisk();
public void Startup()
{
power.Start();
display.DisplayContent();
hDisk.ReadDisk();
}
}
// Client
class Program
{
static void Main(string[] args)
{
Computer computer = new Computer();
Console.WriteLine("准备启动电脑");
computer.Startup();
}
}
}
优点:使得代码更加模块化,更方便调用以及查找问题。
注意:如果有多个子系统需要进行通讯时,最好是通过Facade来中转。
参考资料:
《设计模式——可复用面向对象软件基础》
《大话设计模式》
《Head First设计模式》
相关文章推荐
- [导入]C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式).zip(7.52 MB)
- 设计模式笔记(11)---外观模式(结构型)
- 设计模式笔记(11)---外观模式(结构型)
- 设计模式11——结构型模式之外观模式
- 设计模式笔记(11)---外观模式(结构型)
- [设计模式笔记]二. 结构型模式--11.Facade模式(外观模式)(一)
- 【设计模式】结构型模式之Facade外观
- 一天学习两个设计模式之Facade模式(外观模式,结构型模式)
- 二十三种设计模式之结构型模式之外观模式
- 面向对象设计模式之Facade外观模式(结构型)
- 设计模式-结构型模式,外观模式(6)
- 设计模式(十)—外观模式(结构型)
- “设计模式”学习之五:桥接、外观、享元与代理(结构型)
- 设计模式--外观模式Facade(结构型)
- 设计模式十一:facade(外观)——对象结构型模式
- 设计模式-结构型-外观
- 设计模式之结构型外观模式
- C#设计模式之11——外观模式
- 设计模式学习之外观模式(Facade,结构型模式)(8)
- 设计模式的征途—11.外观(Facade)模式