您的位置:首页 > 移动开发 > Objective-C

使用Object-C实现23种设计模式之工厂方法模式

2016-05-19 11:50 513 查看
以前的时候,做的是Android,习惯了Java的风格,刚一接触OC,稍稍有些不适应,所以作为一个OC刚入门的新手,在此结合一下以前的Java经验以及对算法的运用,将23种设计模式通过OC进行实现。

关于什么是设计模式,以及运用设计模式有什么好处,就不再细说了,相比大多数看到此贴的人,都已经充分了解了设计模式,至少应该了解了什么是设计模式以及为什么使用设计模式。

话不多说,下面就是对设计模式当中最简单也最常用的一种——工厂方法模式的OC实现。

工厂方法模式,可以简单理解为一个生产公司生产同品牌多型号的产品,其中产品A在车间A进行生产,产品B在车间B进行生产……譬如,某电子科技公司,生产电脑、手机两种产品,在该公司内有电脑生产车间以及手机生产车间,分别生产电脑以及手机,电脑车间的变动对手机的生产不会产生任何影响,同样的手机车间的变动也不会对电脑的生产产生任何影响。

下面便是对以上示例的实现:

首先,先不用去确定这是一个生产什么的公司,只需要明确他是一个生产制造型的公司即可,其中,必不可少的两个因素:生产车间以及产品,故此,先写出两个协议(即借口,一下统称为协议),分别为Factory协议以及Product协议,同时在这两个协议里边声明(不实现)其所必需的方法。

Product协议的实现:

#import
<Foundation/Foundation.h>

@protocol Product <NSObject>

@required

-(void)introduce;

-(void)function;

@end

Factory协议的实现:

#import <Foundation/Foundation.h>

#import "Product.h"

@protocol Factory <NSObject>

@required

-(NSObject<Product>*)createProduct;

@end

先把车间以及产品这个大类声明之后,然后再去了解,这是一个生产什么产品的公司,去了解公司的所有产品:
Computer类:
Computer.h

#import<Foundation/Foundation.h>

#import
"Product.h"

@interface Computer :NSObject<Product>

@end

Computer.m

#import "Computer.h"

@implementation Computer

-(void)introduce{

    NSLog(@"I am computer!");

}

-(void)function{

    NSLog(@"I can program!");

}

@end

Phone类:
Phone.h

#import <Foundation/Foundation.h>

#import "Product.h"

@interface Phone :
NSObject<Product>

@end

Phone.m

#import "Phone.h"

@implementation Phone

-(void)introduce{

    NSLog(@"I am phone!");

}

-(void)function{

    NSLog(@"I can make a phone call!");

}

@end

现在已经明确了公司需要生产什么产品了,那么只需要根据相应的产品来划分生产车间即可。

电脑车间ComputerFactory类

ComputerFactory.h

#import <Foundation/Foundation.h>

#import "Factory.h"

@interface ComputerFactory :
NSObject<Factory>

@end

ComputerFactory.m

#import "ComputerFactory.h"

#import "Computer.h"

@implementation ComputerFactory

-(NSObject<Product>*)createProduct{

    return [Computeralloc];

}

@end

手机车间PhoneFactory类

PhoneFactory.h

#import <Foundation/Foundation.h>

#import "Factory.h"

@interface PhoneFactory :
NSObject<Factory>

@end

PhoneFactory.m

#import "PhoneFactory.h"

#import "Phone.h"

@implementation PhoneFactory

-(NSObject<Product>*)createProduct{

    return [Phonealloc];

}

@end

程序写到这里,公司已经算是万事俱备只欠开工了,只要老板一声令下,公司就可以正常运作起来,并且老板不用费吹灰之力,也不用亲自到车间去观看具体的生产流程,车间内部的粗活累活对公司老板完全透明。

#import <Foundation/Foundation.h>

#import "Product.h"

#import "ComputerFactory.h"

#import "PhoneFactory.h"

int main(int argc,constchar * argv[]) {

    @autoreleasepool {

        NSObject<Product>* pro1 = [[ComputerFactoryalloc]createProduct];//老板说:生产一台电脑

        [pro1 introduce];

        [pro1 function];

        NSObject<Product>* pro2 = [[PhoneFactoryalloc]createProduct];//老板说:生产一部手机

        [pro2 introduce];

        [pro2 function];

    }

    return 0;

}
公司在这种条例有序的工作模式下,很快取得了巨大的收益,仅仅生产电脑、手机两种产品已经不能够满足老板赚钱的欲望,经过公司董事会的一致商议,决定公司要添加电子手表以及数码相机两种产品。
在这种模式下,无需更改任何已存在的产品以及车间,只需要增加Watch类(Watch产品)和Camera类(Camera产品),以及相对应得WatchFactory(Watch车间)和CameraFactory(Camera车间)即可。
以上是我个人对工厂方法模式的简单理解,如有不到之处,敬请各位补充。
未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: