zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式

    工厂模式简介

    工厂模式分为简单工厂模式、工厂模式以及抽象工厂模式三种,在日常编程中会经常使用,简单按照一句话来分别概述这三种模式:

    • 简单工厂模式:工厂类中,根据条件决定一个接口由哪个具体产品类来实现
    • 工厂模式:创建多个工厂类,各个工厂类中,都对应一个获得接口的实例的方法,用户决定使用哪个工厂来生产哪种产品。
    • 抽象工厂模式:对工厂模式进行扩展、有一个超级工厂类创建各个工厂类。

    整个工厂模式的介绍例子:产品为耳机、手机,工厂为小米、锤子

    简单工厂模式

    不属于23种设计模式之一,就是一个负责生产特定产品的类。
    简单工厂模式
    简单工厂模式特定建立一个工厂类来生产一系列产品,这些产品都有相同的父类或者实现相同的接口。

    简单工厂模式总结:

    优点:

    1.工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分离。
    2.客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量。
    3.通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

    缺点:

    1.由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响。
    2.使用简单工厂模式势必会增加系统中类的个数(引入了新的工厂类),增加了系统的复杂度和理解难度。
    3.系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
    4.简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

    工厂模式

    工厂模式

    工厂模式总结:

    优点:

    1.在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。
    2.基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够让工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,就正是因为所有的具体工厂类都具有同一抽象父类。
    3.使用工厂方法模式的另一个优点是在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了,这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。

    缺点:

    1.在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。

    抽象工厂模式

    抽象工厂模式
    抽象工厂模式总结:

    优点:

    1.抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。
    2.当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
    3.增加新的产品族很方便,无须修改已有系统,符合“开闭原则”。

    缺点:

    1.增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了“开闭原则”。

  • 相关阅读:
    对于未来的搜索引擎的思考!
    [转]《C陷阱与缺陷》读书笔记——前车之覆,后车之鉴
    C语言深度解剖笔记
    感觉压力挺大的!!
    发现中国的代理服务器很少
    我的博客搬家了
    [转]22+1条经典的编程引言
    [转]想象五年之后的你
    什么叫做卷积
    《30天自制操作系统》读书笔记(1)读前感
  • 原文地址:https://www.cnblogs.com/fengwei23/p/9295943.html
Copyright © 2011-2022 走看看