非法疫苗引发的思考 -外观模式

一、前言

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

山东警方破获案值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("
Method 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