美文网首页
设计模式 -- 简单工厂模式

设计模式 -- 简单工厂模式

作者: 皆为序幕_ | 来源:发表于2019-07-07 20:50 被阅读0次

表述 (创建型模式)

专门定义一个类来负责创建其他类的实例,被创建的实例常常具有共同的父类

定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体操作。工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传给外界,而对象的创建是由外界决定的,外界只需要知道抽象子类对应的参数即可,而不需要知道抽象子类的创建过程,在外界使用时甚至不用引入抽象子类

简单工厂模式类图

简单工厂模式类图
  • SimpleFactory(工厂类):根据传入的参数决定创建并返回哪个具体的抽象子类
  • Product(抽象类):定义抽象子类所需的属性和方法,子类通过继承自抽象类获取这些方法
  • ProductA和ProductB(抽象子类):继承自抽象类,是具体操作的实现者

优点

  • 将操作对象的创建和关于操作对象相关的业务逻辑分离开,降低操作对象的耦合度
  • 工厂类只是为了创建外界对象,所以并不需要实例化类的对象,只需要为外界提供类方法即可

使用场景

  • 工厂类负责创建的对象比较少时
  • 客户端只知道传入工厂类的参数,对于如何创建对象的逻辑不必关心时

示例

需求:实现俩个数的加、减运算

//创建一个抽象类,抽象类中包含了参与运算的抽象子类的属性和方法
class Operation {
    private var _numA = 0
    private var _numB = 0
    
    var numA: Int{
        get{
            return _numA
        }
        set{
            _numA = newValue
        }
    }
    var numB: Int {
        get{
            return _numB
        }
        set{
            _numB = newValue
        }
    }
    func getResult() -> Int {
        return 0
    }
}

//创建负责运算的抽象子类
class OperationAdd:Operation {
    override func getResult() -> Int {
        return self.numA + self.numB
    }
}

//创建负责运算的抽象子类
class OperationSub:Operation {
    override func getResult() -> Int {
        return self.numA - self.numB
    }
}

//创建工厂类,根据参入参数,创建对应的抽象子类实例并返回给外界
class OperationFactory{
    static func createOperation(operatr:String) -> Operation{
        var oper:Operation?
        switch operatr {
        case "+":
            oper = OperationAdd.init()
            break
        case "-":
            oper = OperationSub.init()
            break
        default:
            oper = Operation.init()
        }
        return oper!
    }
}


//每次计算不同的算法直接改变参数里的符号(+、-)
var oper = OperationFactory.createOperation(operatr: "-")
oper.numA = 8
oper.numB = 5
let res = oper.getResult()
print(res)

简单工厂模式会有一个问题,就是如果新增加其他运算功能,需要创建一个抽象子类,但是还需要修改工厂类中的代码逻辑,这种设计是不符合开放封闭原则的。开放封闭原则对于修改是关闭的,对于扩展是开放的。而且将所有的操作子类的判断和实例化都由一个工厂类完成,如果业务比较复杂会导致工厂类负担较重

相关文章

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 设计模式

    设计模式(视频总结) [TOC] 一、简单工厂模式(Simple Factory) 简单工厂模式: 简单工厂模式属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

  • 三、创建型模型

    简单工厂模式 工厂方法模式 抽象工厂模式 单例模式 1.简单工厂模式 简单工厂模式并不属于23种设计模式。 不难看...

  • 简单工厂模式

    Android进阶之设计模式 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式), 其属于创建型设计模式,但并不...

网友评论

      本文标题:设计模式 -- 简单工厂模式

      本文链接:https://www.haomeiwen.com/subject/tleihctx.html