using System; publicclass Camera { publicvoid TurnOn() { Console.WriteLine("Turning on the camera."); } publicvoid TurnOff() { Console.WriteLine("Turning off the camera."); } publicvoid Rotate(int degrees) { Console.WriteLine("Rotating the camera by {0} degrees.", degrees); } } publicclass Light { publicvoid TurnOff() { Console.WriteLine("Turning on the light."); } publicvoid TurnOn() { Console.WriteLine("Turning off the light."); } publicvoid ChangeBulb() { Console.WriteLine("changing the light-bulb."); } } publicclass Sensor { publicvoid Activate() { Console.WriteLine("Activating the sensor."); } publicvoid Deactivate() { Console.WriteLine("Deactivating the sensor."); } publicvoid Trigger() { Console.WriteLine("The sensor has triggered."); } } publicclass Alarm { publicvoid Activate() { Console.WriteLine("Activating the alarm."); } publicvoid Deactivate() { Console.WriteLine("Deactivating the alarm."); } publicvoid Ring() { Console.WriteLine("Ringing the alarm."); } publicvoid StopRing() { Console.WriteLine("Stop the alarm."); } } publicclass Client { privatestatic Camera camera1, camera2; privatestatic Light light1, light2, light3; privatestatic Sensor sensor; privatestatic Alarm alarm; static Client() { camera1 =new Camera(); camera2 =new Camera(); light1 =new Light(); light2 =new Light(); light3 =new Light(); sensor =new Sensor(); alarm =new Alarm(); } publicstaticvoid Main( string[] args ) { camera1.TurnOn(); camera2.TurnOn(); light1.TurnOn(); light2.TurnOn(); light3.TurnOn(); sensor.Activate(); alarm.Activate(); } }
六、 使用门面模式的设计
一个合情合理的改进方法就是准备一个系统的控制台,作为保安系统的用户界面。如下图所示:
程序代码如下:
using System; publicclass Camera { publicvoid TurnOn() { Console.WriteLine("Turning on the camera."); } publicvoid TurnOff() { Console.WriteLine("Turning off the camera."); } publicvoid Rotate(int degrees) { Console.WriteLine("Rotating the camera by {0} degrees.", degrees); } } publicclass Light { publicvoid TurnOff() { Console.WriteLine("Turning on the light."); } publicvoid TurnOn() { Console.WriteLine("Turning off the light."); } publicvoid ChangeBulb() { Console.WriteLine("changing the light-bulb."); } } publicclass Sensor { publicvoid Activate() { Console.WriteLine("Activating the sensor."); } publicvoid Deactivate() { Console.WriteLine("Deactivating the sensor."); } publicvoid Trigger() { Console.WriteLine("The sensor has triggered."); } } publicclass Alarm { publicvoid Activate() { Console.WriteLine("Activating the alarm."); } publicvoid Deactivate() { Console.WriteLine("Deactivating the alarm."); } publicvoid Ring() { Console.WriteLine("Ringing the alarm."); } publicvoid StopRing() { Console.WriteLine("Stop the alarm."); } } publicclass SecurityFacade { privatestatic Camera camera1, camera2; privatestatic Light light1, light2, light3; privatestatic Sensor sensor; privatestatic Alarm alarm; static SecurityFacade() { camera1 =new Camera(); camera2 =new Camera(); light1 =new Light(); light2 =new Light(); light3 =new Light(); sensor =new Sensor(); alarm =new Alarm(); } publicvoid Activate() { camera1.TurnOn(); camera2.TurnOn(); light1.TurnOn(); light2.TurnOn(); light3.TurnOn(); sensor.Activate(); alarm.Activate(); } publicvoid Deactivate() { camera1.TurnOff(); camera2.TurnOff(); light1.TurnOff(); light2.TurnOff(); light3.TurnOff(); sensor.Deactivate(); alarm.Deactivate(); } } publicclass Client { privatestatic SecurityFacade security; publicstaticvoid Main( string[] args ) { security =new SecurityFacade(); security.Activate(); Console.WriteLine("\n--------------------\n"); security.Deactivate(); } }
参考文献:
阎宏,《Java与模式》,电子工业出版社
[美]James W. Cooper,《C#设计模式》,电子工业出版社
[美]Alan Shalloway James R. Trott,《Design Patterns Explained》,中国电力出版社
[美]Robert C. Martin,《敏捷软件开发-原则、模式与实践》,清华大学出版社
[美]Don Box, Chris Sells,《.NET本质论 第1卷:公共语言运行库》,中国电力出版社http://www.dofactory.com/Patterns/Patterns.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通