设计模式--简单工厂

原创 2015年11月19日 16:41:28

    代码写多了,越来越觉得设计模式很有用,又重新看了《大话设计模式》,准备用swift边看例子边实现里面的设计模式,加深印象。

    今天,写写前几天看的“简单工程模式”。

    首先,谈谈个人对这一模式的理解。简单工厂模式,我认为是像工厂一样,进来原材料经过加工后得到完成的产品,然后出厂。


    iOS中的工厂模式应用,最常见的就是NSArray以及NSString的创建。网上的资料很多,这里就不说了,主要说明“简单工厂模式”。

   《大话设计模式》这本书,写的很形象,第一章通过一个计算器的例子,讲解了面对对象的概念,以及“简单工厂模式”的概念。“简单工厂模式”的iOS实现方法,我总结为以下几点:

     1,抽象出原材料、工厂、产品。原材料,可以是各种类型,value、string、Object、Class等等。工厂,则是可以是NSobject,或者子类,内容主要是声明和定义工厂的“工序”,在iOS中就是类方法,类方法的返回值就是我们所需要的产品。产品就是具体的特定功能的实例化对象。

     2,实现产品对象,可以是一系列的对象和它的子类对象。

     3,实现工厂,定义一个类方法,根据输入参数,返回相应的产品对象。

     4,调用工厂类的类方法,得到具体的实例对象的产品。

    好了,贴代码,用swift实现,一一对应这个过程。

    1,抽象的过程:分析计算器的操作,一般是+、-、X、/,其它开根、平方、求余、移位等等,基本上每个操作都需要左右两个数(当然开方、开根、求余等只需要使用一个),还有运算结果。

    2,运算操作的基类的定义是这样的

class Operate {
    var number1:Int64 = 0
    var number2:Int64 = 0
    
    func getResult() -> Int64 {
        return 0
    }
}
加减乘除都是它的子类,继承于它,唯一区别是getResult()方法的实现不一样,如下

class AddOperation: Operate {
    override func getResult() -> Int64 {
        let result: Int64 = self.number1 + self.number2
        return result
    }
}

class SubtractOperation: Operate {
    override func getResult() -> Int64 {
        let result: Int64 = self.number1 - self.number2
        return result
    }
}

class MultiplyOperation: Operate {
    override func getResult() -> Int64 {
        let result: Int64 = self.number1*self.number2
        return result
    }
}

class DivideOperation: Operate {
    override func getResult() -> Int64 {
        let result: Int64 = self.number2 != 0 ? self.number1/self.number2 : 0
        return result
    }
}
    3,产品的定义就是以上,下面来进行工厂的定义。如下

class OperateFactory {
    class func createOperation(operateStr: Character) -> Operate? {
        var operateObj: Operate?
        switch operateStr {
        case "+":
            operateObj = AddOperation()
            break
        case "-":
            operateObj = SubtractOperation()
            break
        case "*":
            operateObj = MultiplyOperation()
            break
        case "/":
            operateObj = DivideOperation()
            break
        default:
            break
        }
        return operateObj
    }
}

主要是定义类方法,通过输入参数perateStr,来实例化相应的操作类,并返回该类。

4,工厂定义好了之后,就是开工了,输入原材料,这里是输入运算符的字符。

@IBAction func getResult(sender: AnyObject) {
        let operation = self.second.text!
        if !operation.isEmpty {
            let operate: Operate = OperateFactory.createOperation(operation[operation.startIndex])!
            operate.number1 = self.first.text!.isEmpty ? 0 : Int64.init(self.first.text!)!
            operate.number2 = self.third.text!.isEmpty ? 0 : Int64.init(self.third.text!)!
            self.result.text = String.init(stringInterpolationSegment: operate.getResult())
        }
    }
调用工厂的类方法
let operate: Operate = OperateFactory.createOperation(operation[operation.startIndex])!
,获得产品operate,在调用操作类的方法,实现我们想要的结果。


    以上是我理解的工厂模式,用swift的简单实现。复杂的工厂模式,可以生产不同类型的产品,这个后续在进行说明吧。主要想说的是,在iOS中怎么使用这一模式,个人理解,可以在PushViewController的时候使用,建立一个push中心,根据VC的类名来创建VC的实例,并通过传入的NavigationController来进行push操作。其次,还可以用在自定义UI组件里,几种不同种类的button,label,tableViewCell等。

代码在这里:https://github.com/angryBearLX/DesignPattern





版权声明:本文为博主原创文章,未经博主允许不得转载。

简单工厂、工厂方法与抽象工厂大比拼

简单工厂、工厂方法和抽象工厂都属于设计模式创建型,严格意义上简单工厂不属于23设计模式之一(违背了开闭原则),本文为了完整描述三工厂演变过程,对三工厂进行了整体的总结和学习,并通过三者之间的特点比较总...
  • u010097777
  • u010097777
  • 2015年08月20日 18:37
  • 1449

简单工厂 工厂方法 抽象工厂 使用方法与区别

简单工厂:是由一个工厂对象决定创建出哪一种产品类的实例。 A实例调用B实例的方法,称为A依赖于B。如果使用new关键字来创建一个B实例(硬编码耦合),然后调用B实例的方法。一旦系统需要重构:需要使用...
  • lqw05
  • lqw05
  • 2016年07月14日 15:04
  • 2194

简单工厂 c++

C++设计模式之简单工厂模式 博客分类: 设计模式 设计模式CC++C#UML 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式,属于类...
  • sinat_16985427
  • sinat_16985427
  • 2016年08月28日 13:49
  • 320

简单工厂模式和工厂方法模式的区别

本文举了一个计算器的例子,该例子实现的功能是加减乘除的功能。 简单工厂模式:就是如何去实例化对象的问题,对于很容易变化的问题,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂。例子如下:pa...
  • abc709272013
  • abc709272013
  • 2016年09月24日 22:33
  • 1293

Unityd 常用设计模式:简单工厂模式

Unityd 常用设计模式:简单工厂模式最近在学设计模式,群里的朋友说,单例,抽象工厂,简单工厂,策略模式用得比较多,所以就来好好的研究一下设计模式,有一个号的编程思想总是好的。先说事例的思路:游戏中...
  • zsy1104
  • zsy1104
  • 2015年07月14日 18:07
  • 614

工厂三兄弟之简单工厂模式(一)

工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF 23种设计模式,但在软件...
  • LoveLion
  • LoveLion
  • 2013年07月11日 14:24
  • 22987

C#简单工厂模式

刚刚开始设计模式,有了视频的基础,写代码相对容易一些,大话设计的第一章,首先就是代码规范,不论是以前学习VB还是准备考试的C++,到现在的C#,还有以后的Java等等,代码规范都是很重要的,所以从现在...
  • u010785685
  • u010785685
  • 2014年03月25日 19:32
  • 1766

简单工厂模式的java实现例子

简单工厂模式是属于创建型模式,又叫做静态工厂方法模式。 它的实现方式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 简单工厂模式由三种角色组成: ...
  • pnjlc
  • pnjlc
  • 2016年09月26日 16:29
  • 1478

计算器的简单工厂和工厂方法

设计模式这本书学了一多半了,心里也迷糊迷糊的,不过这在怎么迷糊也得总结啊,先从第一个简单工厂开始吧。简单工厂模式是进入设计模式世界的第一个模式,他也告诉了我们面向对象设计时的法则。首先简单工厂模式告诉...
  • wgp15732622312
  • wgp15732622312
  • 2015年11月22日 14:16
  • 639

简单工厂模式和工厂方法模式

一:简单工厂模式   1,概念 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。顾名思义工厂就是生产东西的,有原料(参数),模子(对象)就能生产出很多个具有相同功能的对象啦。 2,u...
  • lishuangzhe7047
  • lishuangzhe7047
  • 2013年01月10日 21:15
  • 23256
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式--简单工厂
举报原因:
原因补充:

(最多只允许输入30个字)