初尝Facade 模式
这个模式,还真没什么好说的。不学设计模式的人,都应该自然而然的应用到它。只是有一种翻译比较有意思,管Facade 叫做门面模式。
在这个对象图中,出现了两个角色:
门面(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
子系统(subsystem)角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。
什么时候使用?
- 为一个复杂子系统提供一个简单接口
- 提高子系统的独立性
- 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
一段不是很合适的代码:
using System;
using System.Configuration;
namespace Facade
{
class Program
{
static void Main(string[] args)
{
ControlFacade control = new ControlFacade();
control.TurnOn();
control.TurnOff();
}
}
internal class Light {
public void TurnOn() {
Console.WriteLine("Light is On!");
}
public void TurnOff() {
Console.WriteLine("Light is Off!");
}
}
internal class Camera {
public void TurnOn() {
Console.WriteLine("Camera is On!");
}
public void TurnOff() {
Console.WriteLine("Camera is Off!");
}
}
internal class Sensor {
public void Activate() {
Console.WriteLine("Activating the Sensor ...");
}
public void DeActivate() {
Console.WriteLine("DeActivating the Sensor...");
}
}
public class ControlFacade {
private Light light;
private Camera camera;
private Sensor sensor;
private string isLightOn;
private string isCameraOn;
private string isSensorOn;
public ControlFacade() {
this.light = new Light();
this.camera = new Camera();
this.sensor = new Sensor();
isLightOn=ConfigurationManager.AppSettings["light"];
isCameraOn = ConfigurationManager.AppSettings["camera"];
isSensorOn = ConfigurationManager.AppSettings["sensor"];
}
public void TurnOn() {
if (isLightOn.Trim().ToLower().Equals("true")) {
this.light.TurnOn();
}
if (isCameraOn.Trim().ToLower().Equals("true")) {
this.camera.TurnOn();
}
if (isSensorOn.Trim().ToLower().Equals("true")) {
this.sensor.Activate();
}
}
public void TurnOff() {
if (isLightOn.Trim().ToLower().Equals("false")) {
this.light.TurnOff();
}
if (isCameraOn.Trim().ToLower().Equals("false")) {
this.camera.TurnOff();
}
if (isSensorOn.Trim().ToLower().Equals("false")) {
this.sensor.DeActivate();
}
}
}
}
配置文件:
运行截图:


近期评论