概念
工厂(比如,OperationFactory)
抽象产品(比如,Operation)
具体产品(比如,OperationAdd)
简单工厂
定义:“专门定义一个类来负责创建其他类的实例,被创建的实例常常具有共同的父类。
实际上就是由一个工厂类,根据传入的参数,动态的决定创建出哪一个产品类的实例。
角色:
1.工厂类角色(比如,OperationFactory):简单工厂模式的核心,负责根据传入的参数来实例化具体的产品实例。
2.抽象产品角色(比如,Operation):通常是工厂产生具体类的父类(或者是具体类实现的接口)。
3.具体产品角色(比如,OperationAdd):简单工厂模式所创建的任何对象都是这个角色的实例。
流程:工厂类,产生具体的产品实例(继承自基类,并重写基类的方法),使用这个产品实例,调用重写的基类的方法,完成需求。
Operation* oper;
oper = [OperationFactory createOperate:self.operationTextField.text];
oper.firstNum = [strFirstNum doubleValue];
oper.secondNum = [strSecondNum doubleValue];
self.resultTextField.text = [NSString stringWithFormat:@"%f",[oper getResult]];
优点:低耦合,每个类负责单独的功能
工厂方法
定义:“定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。”
流程:根据需求,创建不同的工厂(继承自基类),不同的工厂创建不同的操作类(继承自基类),使用这个操作类,调用基类的方法,完成需求。
FactoryBase* facBase;
if ([strOperation isEqualToString:@"+"]) {
facBase = [[AddFactoy alloc] init];
}else if([strOperation isEqualToString:@"-"]){
facBase = [[SubFactory alloc] init];
}else if([strOperation isEqualToString:@"*"]){
facBase = [[MulFactory alloc] init];
}else if([strOperation isEqualToString:@"/"]){
facBase = [[DivFactory alloc] init];
}
Operation* oper;
oper = [facBase createOperate];
oper.firstNum = [strFirstNum doubleValue];
oper.secondNum = [strSecondNum doubleValue];
self.resultTextField.text = [NSString stringWithFormat:@"%f",[oper getResult]];
抽象工厂
定义:“定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。”
一个工厂,通常不能只产一种产品,可能需要产出一系列产品,这时就需要使用抽象工厂
// id<AbstractFactory> factory = [[HTML5Factory alloc] init];
id<AbstractFactory> factory = [[OWCFactory alloc] init];
// 产品1
id<AbstractLine> line = [factory createLine];
// 产品2
id<AbstractPie> pie = [factory createPie];
[line drawLine];
[pie drawPie];
参考
设计模式深入学习IOS版(2)简单工厂模式
IOS设计模式浅析之抽象工厂模式(Abstract Factory)
iOS常用的设计模式