设计可以控制开关的程序,可以控制种类不同的物件,便于增加和复用。

TV 和 Light类可以是抽象类或者接口

第一个类:开关接口类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{interface IsSwitchable{void TurnOff();void Lighting();void TurnOn();//开关接口}}

接口类包含三个函数:开、关、亮

第二、三个类:抽象函数灯、电视类(灯和电视可以派生出各种类型的灯、电视)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{abstract class Light : IsSwitchable{public abstract void TurnOff();public abstract void TurnOn();public abstract void Lighting();//抽象类Light}}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{abstract class Tv : IsSwitchable{public abstract void Lighting();public abstract void TurnOff();public abstract void TurnOn();//抽象类Tv}}

这两个抽象类只声明,并不具体实现,由他们的子类来实现。

第四、五个类:具体灯、电视类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{class TubeLight : Light{public override void TurnOn(){Console.WriteLine("打开");}public override void Lighting(){Console.WriteLine("灯亮了");}public override void TurnOff(){Console.WriteLine("关闭");}}}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{class BulbLight : Light{public override void TurnOff(){Console.WriteLine("关闭");}public override void TurnOn(){Console.WriteLine("打开");}public override void Lighting(){Console.WriteLine("灯亮了");}}}

最后一个类:开关控制类(成员是接口对象)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{class ToggleSwitch{protected IsSwitchable Ilight;public ToggleSwitch(IsSwitchable ilight){this.Ilight = ilight;}public void makeLight(){this.Ilight.TurnOn();this.Ilight.Lighting();this.Ilight.TurnOff();}//@开关类
//这里也可以写选择灯是开是关的函数}}

然后可以测试一下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp4
{class Program{static void Main(string[] args){IsSwitchable Tube = new TubeLight();Console.WriteLine("创建一个灯管");IsSwitchable Bulb = new BulbLight();Console.WriteLine("创建一个灯泡");ToggleSwitch TogOne = new ToggleSwitch(Tube);TogOne.makeLight();}}
}

UML图:

设计模式几个原则的应用--控制开关(C#)相关推荐

  1. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...

    对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...

  2. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

  3. 设计模式 分类和原则

    为什么80%的码农都做不了架构师?>>>    设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型 ...

  4. 设计模式之SOLID原则再回首

        本科阶段学过设计模式,那时对设计模式的五大原则--SOLID原则的概念与理解还是比较模糊,此时过去了2年时间,在学习<高级软件工程>课程中老师又提到了设计模式,课程中还详细讨论了五 ...

  5. Java 23种设计模式案例:原则及分类

    2019独角兽企业重金招聘Python工程师标准>>> 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模 ...

  6. 设计模式_01_单一原则

    设计模式_01_单一原则 package designPatternOf_01; /*** 单一原则示例:动物呼吸* 引入的问题:鱼不吸空气,吸水*/ public class SinglePrinc ...

  7. 【设计模式 00】设计模式的六大原则

    设计模式的六大原则 参考: 设计模式六大原则 1. 单一职责原则 一个类只负责一个明确的功能 优点: 降低类的复杂度,提高代码可读性和可维护性 降低变更时对其他功能的影响 2. 里氏替换原则 **原则 ...

  8. 设计模式 - 七大设计原则(一)

    设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...

  9. 设计模式 接口隔离原则

    设计模式 接口隔离原则 用类图说明 然后书写代码清单 public interface IPettyGirl{// 面孔public void goodLooking();// 身材public vo ...

最新文章

  1. Linux中的文件系统和磁盘管理
  2. button按钮无法提交表单问题发现与解决
  3. 卷积神经网络(CNN)在无人驾驶中的应用
  4. CentOS 初体验四: 阿里云服务器开启8080端口
  5. Python递归实现汉诺塔
  6. 音视频技术开发周刊 | 234
  7. 多行字符串的表示方式
  8. CSRF简单介绍及利用方法-跨站请求伪造
  9. Every Woman is beautiful
  10. [机器学习-回归算法]Sklearn之线性回归实战
  11. 初学opengl的一些知识整理-1
  12. 用java写猜拳游戏,Java写人机猜拳游戏(可扩展其他游戏或其他参与者)
  13. leetcode 367 Valid Perfect Square
  14. 【codeforces】【01字符串匹配】Equalize【Manthan, Codefest 18 (rated, Div. 1 + Div. 2)】
  15. 生成1000个不同的随机数
  16. At least one JAR was scanned for TLDs yet contained no TLDs.问题解决方式
  17. RIP、OSPF、BGP、动态路由选路协议、自治域AS
  18. 这些年我踩过的`Mybatis`代码生成的坑
  19. 【NLP】文本分类TorchText实战-AG_NEWS 新闻主题分类任务(PyTorch版)
  20. Debezium报错处理系列十一:Data row is smaller than a column index, internal schema representation is probabl

热门文章

  1. 真正对眼睛好,应该这样做
  2. 可以隐藏相册的app
  3. matlab pcolor 坐标轴,python pcolor坐标显示类似matlab imagesc效果
  4. 高大上技术之sql解析
  5. 西方(东方)同行眼中的东方(西方)程序员
  6. 每周一荐:支持latex的思维导图软件docear
  7. 看了以后大呼过瘾的程序员必备网站,速速收藏!
  8. 通过位运算进行两个变量值的交换功能
  9. 初中作文计算机想象作文,初中联想想象作文5篇
  10. 营销型新媒体运营者的必备能力