设计模式--简单工厂
来源:互联网 发布:出色的有声小说 知乎 编辑:程序博客网 时间:2024/05/22 17:08
代码写多了,越来越觉得设计模式很有用,又重新看了《大话设计模式》,准备用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
- 设计模式-简单工厂模式
- 设计模式-简单工厂、工厂模式(转载)
- 设计模式--简单工厂
- PHP设计模式-工厂系列(一)-简单工厂模式(静态工厂模式)
- PHP设计模式-工厂系列(一)-简单工厂模式(静态工厂模式)
- 设计模式-简单工厂模式和策略模式
- 设计模式重温1 -简单工厂模式,工厂方法,抽象工厂
- 大话设计模式学习--简单工厂模式
- Android设计模式(五)--简单工厂模式
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 简单工厂设计模式
- 设计模式-----简单工厂
- 简单工厂设计模式
- 设计模式:简单工厂
- 设计模式 - 简单工厂
- jdbc+struts axis 传递大数据
- 二叉树三种遍历方式,有先序,中序或者后序,中序恢复二叉树等操作
- 常用的OpenCV函数速查
- Linux 基础:如何在Ubuntu上检查一个软件包是否安装
- [原]Eclipse启动报错:An internal error occurred during: "Building workspace".
- 设计模式--简单工厂
- oracle 数据库空表导出问题
- navicat创建mysql 数据库存储过程
- Hadoop系列三:运行job过程日志
- URAL 1723 Sandro's Book
- Android中对话框的用法(单选,多选,确定,取消)
- Java中?:这个是什么意思
- 设计模式:Android AlertDialog的builder(建造者模式)
- Java基础——IO(1)