首页 > 设计模式 > 初尝Facade 模式

初尝Facade 模式

这个模式,还真没什么好说的。不学设计模式的人,都应该自然而然的应用到它。只是有一种翻译比较有意思,管Facade 叫做门面模式

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();
            }
        }
    }
}

配置文件



  
    
    
    
  

运行截图

facade运行结果 初尝Facade 模式

分类: 设计模式 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.