设计模式初探——简单工厂模式

设计模式初探——简单工厂模式

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

    学习设计模式已经有一段时间了,《大话》也正看第二遍,但是却迟迟不敢下笔。算了,先拿简单的开刀吧。

    简单工厂模式是设计模式中一种比較简单、基础的设计模式。

    定义:

    由一个工厂类依据传入的參数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

    包括元素:

    工厂(Creator)角色

    简单工厂模式的核心,它负责实现创建全部实例的内部逻辑。工厂类能够被外界直接调用,创建所需的产品对象。

    抽象产品(Product)角色

    简单工厂模式所创建的全部对象的父类,它负责描写叙述全部实例所共同拥有的公共接口。

    详细产品(ConcreteProduct)角色

    是简单工厂模式的创建目标,全部创建的对象都是充当这个角色的某个详细类的实例。

        设计模式初探——简单工厂模式

    就拿咱们学校去年刚刚安装的自己主动售饮料机来说吧。

    饮料机就是一个简单工厂,尽管它不生产饮料,可是它一肚子都是饮料,算是“生”出的饮料吧。而可乐,雪碧,果粒橙都是详细的产品,那么饮料就是抽象的产品。来看代码:

    首先抽象出一个饮料类

    abstract class Drink     //饮料类
    {
        public abstract void GetDrink();
    }

    然后可乐,雪碧等饮料继承该饮料类

    class CokeCola : Drink      //可乐类    {         public override void  GetDrink()        {           Console.WriteLine("给你一瓶可乐");        }    }     class Sprite : Drink          //雪碧类    {        public override void GetDrink()        {            Console .WriteLine("给你一瓶雪碧") ;        }    }

    建立一个饮料工厂,决定要生产(实例化)那种饮料

    class DrinkFactory      //建立饮料工厂    {        public static Drink createDrink(stringdrink)        {            Drink drk = null;            switch (drink)            {                case "可乐":                    drk = new CokeCola();                    break ;                case "雪碧":                    drk = new Sprite();                    break;                               }            return drk;        }    }

    最后呢,你拿着你的硬币投币,选择“可乐”button,于是自己主动售饮料机给你“吐”出一罐可乐。

    class Program    {        static void Main(string[] args)        {            Drink drk;           drk = DrinkFactory.createDrink("可乐");   //选择“可乐”            drk.GetDrink();        }    }


       设计模式初探——简单工厂模式

    优缺点:

    长处

    工厂类是整个模式的关键.包括了必要的逻辑推断,依据外界给定的信息,决定到底应该创建哪个详细类的对象.通过使用工厂类,外界能够从直接创建详细产品对象的尴尬局面摆脱出来,只须要负责“消费”对象就能够了。而不必管这些对象到底怎样创建及怎样组织的.明白了各自的职责和权利,有利于整个软件体系结构的优化。

    缺点

    因为工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将所有创建逻辑集中到了一个工厂类中;它所能创建的类仅仅能是事先考虑到的,假设须要加入�新的类,则就须要改变工厂类了。

当系统中的详细产品类不断增多时候,可能会出现要求工厂类依据不同条件创建不同实例的需求.这样的对条件的推断和对详细产品类型的推断交错在一起,非常难避免模块功能的蔓延,对系统的维护和扩展非常不利;

这些缺点在工厂方法模式中得到了一定的克服。

    使用场景

    工厂类负责创建的对象比較少;

    客户仅仅知道传入工厂类的參数,对于怎样创建对象(逻辑)不关心;

    因为简单工厂非常容易违反高内聚责任分配原则,因此一般仅仅在非常easy的情况下应用。

    小结:

    简单工厂模式是依据client不同的“要求”,产生不同的详细对象,再利用多态特性调用对应详细对象的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118662.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月3日 上午7:00
下一篇 2021年12月3日 上午8:00


相关推荐

  • 装饰设计模式

    装饰设计模式就是对已有的对象的功能进行增强简单小例子:我们考虑一下使用继承也可以对父类中的功能进行增强只需要调用super就可以调用父类的方法,那使用装饰和继承有什么区别?使用继承体系就会有点臃肿

    2021年12月22日
    50
  • java工厂模式实例(设计模式)「建议收藏」

    java工厂模式实例(设计模式)「建议收藏」java工厂模式开篇声明,此理解为作者自身理解,不一定正确,如有错误请大佬们指正。工厂模式,在作者看来,从现实生活来说,就是一个工厂,里面有N个车间,每个车间会生产不同的产品,而租户只需要告诉这个工厂的老板我需要一个什么产品,老板会去找到对应的车间返回给租户使用。画个图理解:如果使用java语言来描述则是,对具有相同动作,不同动作执行过程的一类方法抽象出一个接口类,然后不同的实现类对接口类中的接口进行不同的实现,并且编写一个工厂类,根据传入获取不同的实现类实例返回给调用者

    2022年7月20日
    14
  • 软件架构与设计模式_软件架构设计

    软件架构与设计模式_软件架构设计什么是架构?软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。ANSI/IEEE610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组…

    2022年8月31日
    5
  • Java常用10种设计模式详解

    Java常用10种设计模式详解一 单例模式单例模式属于创建型模式 解决某个类频繁的创建与销毁 该模式保证了其对象在 JVM 中只有一个实例对象存在 必须保证私有化构造函数 只能有一个实例对象存在 优点 减少 new 关键字的使用 降低系统内存的使用频率 同时减轻 GC 工作避免了资源的多重使用缺点 不可继承 没有接口 1 饿汉式优点 没有加锁同步 执行效率高缺点 当类加载时就初始化 没有懒加载

    2026年3月18日
    1
  • 十一、代理模式 —专注,做最好的自己!#和设计模式一起旅行#[通俗易懂]

    专注,把更多的时间放到提示自己核心竞争能力上面来!其他的事情交给别人去做吧。故事背景我和设计模式MM开的奶茶店火了,一个是设计模式MM长的好看,波涛汹涌,还有一个是我们的饮品的确好喝,并且还特别在乎用户的体验,上一篇的模板方法模式中,我们最后的例子就询问顾客是否要加入调味料,而不是强制加入。俗话说,人怕出名,猪怕壮!出名后好多的媒体想让我参加他们的节目说一下我这个创业的…

    2022年2月27日
    36
  • Java设计模式之迭代子模式

    本文继续介绍23种设计模式系列之观察者模式。定义在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式。迭代子(Iterator)模式又叫游标

    2022年3月11日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号