外观模式(Facade)

简介:
复制代码
  1 /*
  2  * 一个保安系统的,由录像机、电灯、红外线监控和警报器组成。保安系统的操作
  3  * 人员需要经常将这些仪器启动和关闭。保安类需要用到所有的录像机(Camera)、
  4  * 电灯(Light)、感应器(Sensor)和警报器(Alarm)对象,保安觉得使用不方便。应
  5  * 用外观模式,用C#控制台应用程序改进该设计。
  6  */
  7 using System;
  8 using System.Collections.Generic;
  9 using System.Linq;
 10 using System.Text;
 11 
 12 namespace Facade
 13 {
 14     //照相机类
 15     class Camera
 16     {
 17         public void Start()
 18         {
 19             Console.WriteLine("启动录像机。");
 20         }
 21         public void Close()
 22         {
 23             Console.WriteLine("关闭录像机。");
 24         }
 25     }
 26     //灯光类
 27     class Light
 28     {
 29         public void Start()
 30         {
 31             Console.WriteLine("启动灯光。");
 32         }
 33         public void Close()
 34         {
 35             Console.WriteLine("关闭灯光。");
 36         }
 37     }
 38     //感应器类
 39     class Sensor
 40     {
 41         public void Start()
 42         {
 43             Console.WriteLine("启动感应器。");
 44         }
 45         public void Close()
 46         {
 47             Console.WriteLine("关闭感应器。");
 48         }
 49     }
 50     //警报器类
 51     class Alarm
 52     {
 53         public void Start()
 54         {
 55             Console.WriteLine("启动警报器。");
 56         }
 57         public void Close()
 58         {
 59             Console.WriteLine("关闭警报器。");
 60         }
 61     }
 62     //遥控器类
 63     class RemoteControl
 64     {
 65         private Alarm alarm;
 66         private Sensor sensor;
 67         private Light light;
 68         private Camera camera;
 69 
 70         public RemoteControl()
 71         {
 72             alarm = new Alarm();
 73             sensor = new Sensor();
 74             light = new Light();
 75             camera = new Camera();
 76         }
 77         public void StartCamera()
 78         {
 79             camera.Start();
 80         }
 81         public void CloseCamera()
 82         {
 83             camera.Close();
 84         }
 85         public void StartLight()
 86         {
 87             light.Start();
 88         }
 89         public void CloseLight()
 90         {
 91             light.Close();
 92         }
 93         public void StartSensor()
 94         {
 95             sensor.Start();
 96         }
 97         public void CloseSensor()
 98         {
 99             sensor.Close();
100         }
101         public void StartAlarm()
102         {
103             alarm.Start();
104         }
105         public void CloseAlarm()
106         {
107             alarm.Close();
108         }
109     }
110     //保安类
111     class Security
112     {
113         private string name;
114         private RemoteControl rc;
115         public Security(string name,RemoteControl rc)
116         {
117             this.name = name;
118             this.rc = rc;
119             Console.WriteLine("{0}值班中。他手里拿了一个遥控器。\n", name);
120         }
121         public RemoteControl Control()
122         {
123             return this.rc;
124         }
125     }
126     class Program
127     {
128         static void Main(string[] args)
129         {
130             Security baoan = new Security("包鞍",new RemoteControl());
131 
132             baoan.Control().StartAlarm();
133             baoan.Control().StartCamera();
134             baoan.Control().StartLight();
135             baoan.Control().StartSensor();
136 
137             Console.WriteLine("");
138             baoan.Control().CloseAlarm();
139             baoan.Control().CloseCamera();
140             baoan.Control().CloseLight();
141             baoan.Control().CloseSensor();
142         }
143     }
144 }
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/18/2508401.html,如需转载请自行联系原作者

相关文章
|
缓存 前端开发 Java
java log4j 基础使用
java log4j 基础使用
311 68
|
编解码 Python
Python 技术篇-使用PyQt5库获取电脑屏幕桌面的宽、高和分辨率
Python 技术篇-使用PyQt5库获取电脑屏幕桌面的宽、高和分辨率
1428 0
Python 技术篇-使用PyQt5库获取电脑屏幕桌面的宽、高和分辨率
|
SQL 关系型数据库 MySQL
MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
|
IDE Java 持续交付
探索开发者工具箱:提升生产力的利器
在软件开发中,选择合适的工具能够显著提升效率和产品质量。本文介绍了开发者常用的工具,包括代码编辑器(如 Visual Studio Code、Sublime Text)、版本控制系统(如 Git、SVN)、集成开发环境(如 IntelliJ IDEA、Eclipse)、调试工具(如 GDB、Chrome DevTools)、构建工具(如 Maven、Webpack)、CI/CD 工具(如 Jenkins、Travis CI)、API 和文档生成工具(如 Swagger、Doxygen),以及项目管理工具(如 Jira、Trello)。
|
存储 缓存 NoSQL
缓存:热点key重建优化。
缓存:热点key重建优化。
214 0
|
Python
【已解决】ModuleNotFoundError: No module named ‘DBUtils‘,from DBUtils.PooledDB import PooledDB,
【已解决】ModuleNotFoundError: No module named ‘DBUtils‘,from DBUtils.PooledDB import PooledDB,
1141 0
|
JavaScript Java 关系型数据库
大学生租房|基于Springboot+vue的大学生租房平台(源码+数据库+文档)
大学生租房|基于Springboot+vue的大学生租房平台(源码+数据库+文档)
216 0
|
存储 安全 网络安全
Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。以下是关于如何生成和使用 SSH 密钥对的详细步骤: 生成 SSH 密钥对
772 2
|
机器学习/深度学习 自然语言处理 机器人
【RAG实践】Rerank,让RAG更近一步
本文主要关注在Rerank,本文中,Rerank可以在不牺牲准确性的情况下加速LLM的查询(实际上可能提高准确率),Rerank通过从上下文中删除不相关的节点,重新排序相关节点来实现这一点。
|
人工智能 机器人
【超简单】让AI自动回复抖音评论
大家在刷抖音的时候,是不是发现有些视频底下的作者评论像是AI回复的,不是真人回答的。今天就来教大家,怎么用AI自动回复你在抖音发布视频中的评论。
3445 0
下一篇
开通oss服务