博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
非法疫苗引发的思考 -外观模式
阅读量:6307 次
发布时间:2019-06-22

本文共 4557 字,大约阅读时间需要 15 分钟。

一、前言

这几天,这则新闻刷爆了各大网络和朋友圈--

山东警方破获案值5.7亿元【非法疫苗】案,疫苗未经严格冷链存储运输销往18个省市。疫苗含25种儿童、成人用二类疫苗。

【非法疫苗】:正规厂家生产,未按照规定进行冷链存储和运输或者快过期的疫苗。

【无效免疫】:起不到免疫作用。

虽然【非法疫苗】不是假冒伪劣疫苗也不是毒疫苗,但是接种后为造成【无效免疫】,就是白接种了。尼玛这也最好的结果,不知道还有什么副作用吧。

这些涉案人员为了挣钱不择手段,失去人性,连祖国的花朵都不去保护,还从花朵周围吸取利益,不道德。

鼓起了那么大的勇气去打疫苗,打完才知道是【非法疫苗】

我们程序员能做的就是写好代码,不出bug,不给家人、同事、社会制造麻烦;积极学习,身上要充满正能量。

时时关注国家大事,多看新闻联播,为祖国的健康快速发展贡献自己的一段代码。

说了这么多非法疫苗的事情,咱们也看看设计模式-外观模式

 

二、基本概念

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

外观模式包括两个角色:

子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。

外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。

外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。

 

三、基本代码

基本代码实现:

//子系统角色:A        public class SystemA        {            public void GetDataA()            {                Console.WriteLine("这是系统A的方法!");            }        }        //子系统角色:B        public class SystemB        {            public void GetDataB()            {                Console.WriteLine("这是系统B的方法!");            }        }        //子系统角色:C        public class SystemC        {            public void GetDataC()            {                Console.WriteLine("这是系统C的方法!");            }        }        //外观角色        public class Facade        {            private SystemA systemA;            private SystemB systemB;            private SystemC systemC;            public Facade()            {                systemA = new SystemA();                systemB = new SystemB();                systemC = new SystemC();            }            //外观方法A            public void GetFacadeA()            {                Console.WriteLine("Method group A----");                systemA.GetDataA();                systemB.GetDataB();            }            //外观方法B            public void GetFacadeB()            {                Console.WriteLine("\nMethod group B----");                systemA.GetDataA();                systemB.GetDataB();                systemC.GetDataC();            }        }        static void Main(string[] args)        {            // 由于外观模式的作用,客户端可以根本不知道子系统类的存在            Facade facade = new Facade();            facade.GetFacadeA();            facade.GetFacadeB();        }

运行结果如下:

 

四、实例代码

非法疫苗代码实例:

//儿童类        public class Children        {            //名字            public string Name { get; set; }            //年龄            public int Age { get; set; }        }        //疫苗        public class Vaccine        {            //名称            public string Name { get; set; }            //批次(不同的批次,应该是来货的渠道不一样吧,估计就这里有问题了)            public string Batch { get; set; }            //保质期,过期的疫苗也拿来挣钱,天地不容,人神公愤!            public string Guarantee { get; set; }        }        //去社区卫生服务中心接种疫苗        public class ChildrenData        {            public void GoToCommunityHealthCentre()            {                Console.WriteLine("爸妈带儿童去卫生服务中心接种疫苗!");            }        }        //疫苗进货        public class VaccineData        {            public void GetVaccine()            {                Console.WriteLine("关爱祖国的花朵,进合法合格的疫苗,不挣良心钱!");            }        }        //为客户端提供一个接种接口        public class ChildrenWithVaccine        {            private ChildrenData childrenData = new ChildrenData();            private VaccineData childrVaccineData = new VaccineData();            //接种疫苗            public void GetVaccine(Children children, Vaccine vaccine)            {                childrenData.GoToCommunityHealthCentre();                childrVaccineData.GetVaccine();                Console.WriteLine("护士给" + children.Name + "接种" + vaccine .Name+ "!");            }        }        static void Main(string[] args)        {            //家长不知道疫苗在哪里进货,只知道到固定的时间带儿子去接种疫苗            ChildrenWithVaccine childrenWithVaccine = new ChildrenWithVaccine();            Children children = new Children() { Name = "小明", Age = 3 };            Vaccine vaccine = new Vaccine() { Name = "流感疫苗", Batch = "20160323", Guarantee = "2019-05-01" };            childrenWithVaccine.GetVaccine(children, vaccine);            Console.ReadKey();        }

运行结果如下:

 

五、总结

优点:

对客户屏蔽子系统组件

实现了子系统与客户之间的松耦合关系

降低了大型软件系统中的编译依赖性

只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类

缺点:

不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性

在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”

适用环境:

当要为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统

客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性

在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度

 

代码下载:https://yunpan.cn/cYNYsKmL3ySMx (提取码:1ca8)

转载于:https://www.cnblogs.com/yinrq/p/5311410.html

你可能感兴趣的文章
QString,char,string之间赋值
查看>>
我的友情链接
查看>>
Nginx+mysql+php-fpm负载均衡配置实例
查看>>
shell脚本操作mysql数据库 (部份参考)
查看>>
MySql之基于ssl安全连接的主从复制
查看>>
informix的逻辑日志和物理日志分析
查看>>
VMware.Workstation Linux与windows实现文件夹共享
查看>>
ARM inlinehook小结
查看>>
wordpress admin https + nginx反向代理配置
查看>>
管理/var/spool/clientmqueue/下的大文件
查看>>
HTML学习笔记1—HTML基础
查看>>
mysql dba系统学习(20)mysql存储引擎MyISAM
查看>>
centos 5.5 64 php imagick 模块错误处理记录
查看>>
apache中文url日志分析--php十六进制字符串转换
查看>>
Ansible--playbook介绍
查看>>
浅谈代理
查看>>
php创建桌面快捷方式实现方法
查看>>
基于jquery实现的超酷动画源码
查看>>
fl包下的TransitionManager的使用
查看>>
Factorialize a Number
查看>>