设计模式——工厂模式之工厂方法

来源:互联网 发布:2016qq悄悄话破解软件 编辑:程序博客网 时间:2024/06/05 17:29

简单来说,工厂方法就是定义一个统一的接口(协议),用于创建对象,然后由子类去进行实现,我只定义工厂规范标准,具体的实现交给具体的工厂,去生产对应的产品,这样干到底有什么用呢?还是解除耦合。


比如我们让工厂生产电脑,他有这样几个角色

第一个角色:抽象工厂(例如:IComputerFactory)

第二个角色:具体工厂(例如:LennovoComputerFactory)

第三个角色:抽象产品(例如:IComputer)

第四个角色:具体产品(例如:LenovoComputer)

它们的关系是这样的


先来定义一个抽象的商品IComputer,他去定义一个协议 ,然具体的商品区实现
//电脑规范@protocol IComputer <NSObject>//处理器-(void)cpu;//主板-(void)mainborad;
在具体的商品中区实现这些协议
LenovoComputer.h
@interface LenovoComputer : NSObject<IComputer>
LenovoComputer.m
//处理器-(void)cpu{    NSLog(@"Intel 处理器");}//主板-(void)mainborad{    NSLog(@"Intel主板");}
还可以有其他的很多商品,如MacbookComputer,SamsungComputer,也遵循抽象商品的协议,并去实现这些协议。
在抽象的工厂IComputerFactory中,我们同样去定义一个协议,然后让具体的工厂去实现这个协议
IComputerFactory.h
//生产电脑-(id<IComputer>)createComputer;
具体的工厂去实现这个协议
LennovoComputerFactory.h
@interface LennovoComputerFactory : NSObject<IComputerFactory>
LennovoComputerFactory.m
//生产电脑-(id<IComputer>)createComputer{    return [[LenovoComputer alloc] init];}
同样也可以有其他的具体工厂器实现这个协议,每个协议可被很多具体的对象去实现
创建的时候我们只需要指定是哪个工厂就可以了,我不管是哪个商品,生产什么商品由具体的工厂决定
id<IComputerFactory> factory = [[LennovoComputerFactory alloc] init];id<IComputer> product = [factory createComputer];[product cpu];[product mainborad];

创建的时候我们只需指定具体的工厂,让工厂去执行创建商品的方法,这样就达到了解耦的目的,倘若哪天我想要MacBookComputer,只需改变具体的工厂类型就可以了,很方便,即使是项目里有50个地方需要改,也都只需动这一行代码,试想不采用这种方式,而是在50个地方都去创建具体的商品,那么要想全部替换就很头疼了。

其实我们也往往会让一个工厂支持几种商品类型,具体创建那个商品,由外部决定

LennovoComputerFactory.m

//生产电脑-(id<IComputer>)createComputer:(NSString*)productClassName{    return [[NSClassFromString(productClassName) alloc] init];}
外部传入创建的商品类型
id<IComputerFactory> factory = [[LennovoComputerFactory alloc] init];id<IComputer> product = [factory createComputer:@"LenovoComputer"];[product cpu];[product mainborad]

工厂方法也是根据不同的使用场景,有不同的形式,实际开发中要灵活应变。

工厂模式中简单工厂的详解http://blog.csdn.net/neveraway1993/article/details/72897149

希望对你有帮助。


阅读全文
0 0
原创粉丝点击