ios大话设计模式-简单工厂

ios大话设计模式-简单工厂

标签(空格分隔): ios进阶

1.什么是简单工厂

    SimpleFactory根据提供给它的数据,返回一个类的实例。
    通常它返回的类都有一个公共的父类(或者接口对象)

2.简单工厂的作用

简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。
简单工厂实例化的类具有相同的接口或者基类,
在子类比较固定并不需要扩展时,可以使用简单工厂。
如数据库生产工厂就是简单工厂的一个应用。

3.简单工厂的优缺点

避免了直接实例化类,降低了耦合性;
缺点是可实例化的类型在编译期间已经被确定,如果增加新类型,
简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。

4.实践

利用简单工厂写一个计算器, numberA,nuberB,
为两个参数,+,-,*/手动设置运算符

1.先制定计算协议
定义一个protocol文件 .h即可
两个参数 numbera,numberb 和计算方法calculate
“`

“`

 #import <Foundation/Foundation.h>

@protocol CalculateFactoryProtocol <NSObject>

@property(nonatomic, assign) int numberA;

@property(nonatomic, assign) int numberB;

@property(nonatomic, strong) NSString* test;

-(CGFloat)calcuate;

@end

2.再制定具体的计算规则 规则是要尊徐协议 代码如下

“`

 #import "MutiCalculate.h"

@implementation MutiCalculate
@synthesize numberA = _numberA;//生成协议中的变量
@synthesize numberB = _numberB;//生成协议中的变量
@synthesize test = _test;//生成协议中的变量

-(CGFloat)calcuate
{
    return self.numberA * self.numberB;
}
@end

等等+ - / 不举出来了

3.建造工厂
工厂负责返回根据指令规则指定的计算规则

#import "CalculateFactory.h"
#import "MinusCalculate.h"
#import "AddCalculate.h"
#import "MutiCalculate.h"
#import "DevideCalculate.h"
@implementation CalculateFactory

+(id<CalculateFactoryProtocol>)createCalculateWith:(NSString*)typeString
{
    NSArray* calculateTypeArray = @[@"+",@"-",@"*",@"/"];
    calculateType type = [calculateTypeArray indexOfObject:typeString];
    switch (type) {
        case calculateTypeAdd:
            return [[AddCalculate alloc] init];
            break;
        case calculateTypeMinus:
            return [[MinusCalculate alloc] init];
            break;
        case calculateTypeMuti:
            return [[MutiCalculate alloc] init];
            break;
        case calculateTypeDevide:
            return [[DevideCalculate alloc] init];
            break;
        default:
            break;
    }
}

4具体调用

//assign the detail protocol
id<CalculateFactoryProtocol>cal = [CalculateFactory createCalculateWith:@"*"];
cal.numberA = 20;
cal.numberB = 40;
// run the protocol
NSLog(@"%f",[cal calcuate]);
打印结果
    800.00

“`

demo下载地址

http://download.csdn.net/detail/sz457763638/9608413

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值