一根蓝银皇飘然而起,缠绕住了吉祥的身体,将他拉到自己身旁,唐三目光中威棱四射,扫视着周围大肆谩骂着的海盗们,冷冷地道:“谁再出言不逊,或是上前一步,别怪我手下无情。”

“猛鬼兽大帝,说到底也不过是一只成熟期的猛鬼兽,相当于其他数码宝贝种族的王,不过实力却不是之前的猛鬼兽能比。”刘皓看着猛鬼兽大帝说道。

晚上兼职招聘网

“我要找贝卡斯。”负责看守公司的人当然不可能放杏子和武藤双六进去了。
这时莲花佛祖眼睛中突然露出一种极为恐惧、可怜的眼神,一把拉住了纪太虚,好像是一个孩子一般:“我出不去了,我出不去了,你能告诉我怎么出去吗?我求求你了!”

由此可以看出刘皓对于早蕨之舞的精妙控制了,显然在得到尸骨脉的力量之后他就一直在潜修挖掘尸骨脉的力量,现在刘皓已经能轻松使出君麻吕生前会的五种战斗舞步,而且控制起来得心应手十分的精妙。

设计模式之工厂模式


定义

定义一个创建对象的接口,但由子类决定要实例的类是哪一个。工厂方法让类把实例推迟到子类。

设计原则

要依赖抽象,不要依赖具体的类:不能让高层组件依赖于底层组件,并且两者都应该依赖于抽象。

指导方针

  • 变量不可以持有具体类的引用:如果使用new,就会持有具体类的引用。可以用工厂来避开这样的做法。
  • 不要让类派生自具体类:如果派生自具体类,你就会依赖具体类。派生自一个抽象。
  • 不要覆盖基类中已实现的方法:如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中所有实现的方法,应该由所有子类共享。

抽象工厂模式

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定的具体类。

第一次设计(识别变化)

假设我们有一个披萨店,我们需要写代码来制造一些不同类型的披萨。
下面来看看我们最开始的设计:

        Pizza orderPizza(string type)
        {
            Pizza pizza;

            if (type.Equals("cheese"))
            {
                pizza = new CheesePizza();
            }
            else if (type.Equals("greek"))
            {
                pizza = new GreekPizza();
            }
            else if (type.Equals("pepperoni"))
            {
                pizza = new PepperoniPizza();
            }
            else
            {
                pizza = new Pizza();
            }
            pizza.perpare();
            pizza.bake();
            pizza.cut();
            pizza.box();
            return pizza;
        }

再这里我们根据type传入的类型来创建对应的pizza,但这里有一个问题,当我们需要修改一些pizza种类的时候,我们就必须要修改里面的代码。比如:不在提供GreekPizza的pizza,我们就必须删除创建GreekPizza的代码。这样就不符合我们的开放-关闭原则

封装创建对象代码

下面,我们将创建pizza对象代码封装到一个单独的对象中,由这个对象专职创建pizza。

    class SimplePizzaFactory
    {
        public Pizza createPizza(string type)
        {
            Pizza pizza = null;

            if (type.Equals("cheese"))
            {
                pizza = new CheesePizza();
            }
            else if (type.Equals("greek"))
            {
                pizza = new GreekPizza();
            }
            else if (type.Equals("pepperoni"))
            {
                pizza = new PepperoniPizza();
            }
            else
            {
                pizza = new Pizza();
            }
        }
    }

重做PizzaStore类

class PizzaStore
    {
        private SimplePizzaFactory factory;

        public PizzaStore(SimplePizzaFactory factory)
        {
            this.factory = factory;
        }

        Pizza orderPizza(string type)
        {
            Pizza pizza=null;

            pizza=factory.createPizza(type);
            pizza.perpare();
            pizza.bake();
            pizza.cut();
            pizza.box();
            return pizza;
        }
    }

类图


这种简单的工厂其实并不是一个设计模式,反而比较像是一种编程习惯。

使用框架

下面我们把createPizza的方法放回PizzaStore中,但是要把它设置成"抽象方法",然后为每个区域创建不同的PizzaStore子类。让每个子类各自决定如何制造披萨。

public abstract class PizzaStore
    {
        //private SimplePizzaFactory factory;

        //public PizzaStore(SimplePizzaFactory factory)
        //{
        //    this.factory = factory;
        //}

        Pizza orderPizza(string type)
        {
            Pizza pizza = null;

           // factory.createPizza(type);
           //从工厂对象中移回PizzaStore中
            pizza = createPizza(type);
            pizza.perpare();
            pizza.bake();
            pizza.cut();
            pizza.box();
            return pizza;
        }


        //工厂对象移到这里
        public abstract Pizza createPizza(string type);
    }
    }

在这里,orderPizza会对Pizza对象做许多的事情,但并不知道究竟是哪一种披萨,这里其实就是解耦。

开一家披萨店

        public override Pizza createPizza(string type)
        {
            if (type.Equals("cheese"))
            {
                return new CheesePizza();
            }
            //根据类型不同,创建其他对象
            return null;
        }

工厂模式

所有工厂模式都用来封装对象创建的。

创建者类


Creator类是一个抽象类,它定义了一个抽象的工厂方法,让子类实现此方法制造产品。
子类可以利用createPrizza创建自己的产品。

产品类

对于上面的PizzaStore来说,Pizza就是产品。

定义工厂方法模式

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推出到子类。

依赖倒置原则

当你直接实例化一个对象时,就是在依赖它的具体类。
在代码里减少对于具体类依赖是件"好事"。这个原则就是依赖倒置原则——要依赖抽象,不要依赖具体类。
不能让高层组件(由其他底层组件定义其行为的类)赖低层组件,不管高层还是底层,两者都应该依赖与抽象。
上面示例应用工厂模式后类图:

可以看到,高层组件(PizzaStore)和底层组件都依赖了Pizza抽象。

几个指导方针帮助你遵循此原则

  • 变量不可以持有具体的引用
  • 不要让类派生自具体类
  • 不要覆盖基类中已经实现的方法

当前文章:http://hnhdqp.com/list_13148.html

发布时间:2018-11-15 12:05:46

网上兼职可靠吗 想找份兼职工作在家做 c2000佛山兼职招聘 大帝国手工兼职串珠 韩语网上翻译兼职 电脑网络兼职软件 嘉兴58同城兼职招聘网 手机应用试玩人员兼职

编辑:陵戏华

相关新闻

花椒直播潘石屹送姚明安全帽 邀请大姚入驻SOHO创业

2018-11-15 19:18:25

铜仁肯履匀电子科技有限公司

朗界(RugGear)手机、芭乐传媒达成战略合作

2018-11-15 02:43:11

昭通劫技峦科技有限公司

醒后马上小便 易致心血管病

2018-11-15 11:37:04

安庆嘎坷商贸有限公司

动物世界奇迹:猩猩有没有可能学会人类语言?

2018-11-15 11:46:42

新乡牌党岳汽车维修投资有限公司

热门推荐

  • 两岸人士厦门海沧共话乡村振兴与社区治理
  • 一线 | 完美世界2017年净利润15亿 同比增29%
  • 面试题分析(二)如何避免漏测
  • NASA想建绕月空间站“深太空通道”,为登火星做准备
  • 欢迎来到未来!《黑镜》第四季已经上线
  • 外形更运动 瑞风S7运动版11月16日晚上市
  • 著名相声演出艺术家唐杰忠因病逝世 享年85岁
  • 茂县发生山体垮塌 王勇赴现场指导抢险救援事情
  • 安徽一货车司机暴雨夜路边休息 清早车尾惊现死人!
  • 河北故城一州里遭冰雹灾难 逾7451亩农作物受灾
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:赚钱结婚小游戏 在家做手工活兼职
  • 电脑打字赚钱 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 游戏代充怎么赚钱 怎样在网上无投资赚钱 有赚网试玩游戏赚钱 手机赚钱最快的软件