Facade
外
观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合
面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统
1
),使四个车轮(子系统
2
)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,我们要开走汽车所要做的还是踩下油门。
GoF
《设计模式》中说道:为子系统中的一组接口提供一个一致的界面,
Facade
模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Façade
外观模式的结构大概是这样的:
这个图是我对
Facade
模式的理解,如果大家觉得有什么不对的地方欢迎给我指出。
我就上面说的那个情形写一下实现代码,首先我们要实现三个子系统(
Wheel
、
Engine
、
Body
):
internal
class
Engine
{
public
string
EngineWork()
{
return
"BMW's Engine is Working"
;
}
public
string
EngineStop()
{
return
"BMW's Engine is stoped"
;
}
}
internal
class
Wheel
{
public
string
WheelCircumrotate()
{
return
"BMW's Wheel is Circumrotating"
;
}
public
string
WheelStop()
{
return
"BMW's Wheel is stoped"
;
}
}
internal
class
Body
{
public
Wheel
[] wheels = new
Wheel
[4];
public
Engine
engine = new
Engine
();
public
Body()
{
for
(int
i = 0; i < wheels.Length; i++)
{
wheels[i] = new
Wheel
();
}
}
}
然后,我们再来实现汽车的Facade
class
CarFacade
{
Body
body = new
Body
();
public
void
Run()
{
Console
.WriteLine(body.engine.EngineWork());
for
(int
i = 0; i < body.wheels.Length; i++)
{
Console
.WriteLine(body.wheels[i].WheelCircumrotate());
}
}
public
void
Stop()
{
Console
.WriteLine(body.engine.EngineStop());
for
(int
i = 0; i < body.wheels.Length; i++)
{
Console
.WriteLine(body.wheels[i].WheelStop());
}
}
}
现在我们来使用客户端程序验证一下,代码如下:
class
Program
{
static
void
Main(string
[] args)
{
CarFacade
car = new
CarFacade
();
car.Run();
car.Stop();
Console
.Read();
}
}
执行结果如下;
BMW's Engine is Working
BMW's Wheel is Circumrotating
BMW's Wheel is Circumrotating
BMW's Wheel is Circumrotating
BMW's Wheel is Circumrotating
BMW's Engine is stoped
BMW's Wheel is stoped
BMW's Wheel is stoped
BMW's Wheel is stoped
BMW's Wheel is stoped
正如上面所说:客户端代码(
Program
)不需要关心子系统,它只需要关心
CarFacade
所留下来的和外部交互的接口,而子系统是在
CarFacade
中聚合。
Façade
模式的几个要点:
1
、从客户程序的角度看,
Facade
模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到
Facade
接口的变化。
2
、
Facade
设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。
Facade
很多时候更是一种架构设计模式。
分享到:
相关推荐
大话设计模式之外观模式 经典代码 C#类
**外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以不关心内部的复杂性,只通过这个接口与子系统进行交互。这种模式降低了系统的复杂度,提高了代码的...
**外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在这个模式中,外观类作为客户端与子系统之间的...
**外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...
外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...
**外观(Facade)模式**是软件工程中一种常用的设计模式,属于结构型模式,它为复杂的子系统提供了一个统一的接口,使得客户端可以更简单地使用这些子系统。在Java编程中,外观模式的应用十分广泛,它能有效地降低...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,其主要目的是为了解耦系统,降低客户端与复杂子系统的交互复杂性。在大型系统中,通常由多个子系统组成,每个子系统都包含多个类,它们共同提供所需功能。...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是提供一个统一的接口,以便客户端可以更简单地与复杂的子系统交互。在Java中,这种模式通过创建一个新接口来封装多个子系统的操作,减少...
### Java设计模式之外观模式详解 #### 模式概述与定义 外观模式(Facade Pattern),又称门面模式,属于对象结构型模式的一种。其主要作用是为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易被使用...
在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的...这个"设计模式之适配器模式与外观模式demo"资源为学习和实践这两种模式提供了宝贵的实例,对于提升编程技能和设计思维具有积极意义。
本文实例讲述了PHP设计模式之外观模式(Facade)入门与应用。分享给大家供大家参考,具体如下: 这个外观模式,就是通过在必需的逻辑和方法的集合前创建简单的外观接口,并且还会隐藏了调用对象的复杂性,它和建造者...
代理模式与外观模式有着相似之处,即它们都是对象的包装器,但是它们的目的和实现方式不同。外观模式主要是简化接口,而代理模式则主要是控制对象的访问。 代理模式与外观模式都属于结构型设计模式,它们的目标都是...
**外观模式(Facade Pattern)**是软件工程中一种常用的设计模式,它为复杂的子系统提供了一个简单的接口,使得客户端代码可以更容易地与这些子系统交互。在C#中,外观模式同样被广泛应用,以降低系统的复杂性,提高...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于与一个复杂的子系统进行交互。这个接口简化了子系统的使用,使得客户端无需了解子系统内部的复杂性。在本示例中,电脑整机可以看作是...