博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式
阅读量:5333 次
发布时间:2019-06-15

本文共 2641 字,大约阅读时间需要 8 分钟。

  简单工厂是一个实体类,包含了根据不同参数直接创建对象的方法。而抽象工厂(Abstract Factory pattern)则是在简单工厂的基础上将(多个)工厂类进一步进行抽象(如UML图示):

  

  在工程中,我们创建了两个实体类:动物类(Animal)和植物类(Plant);这两个类分别遵循协议AnimalProtocol和PlantProtocol;分别有子类Dog、Fish、Bird(继承自Animal类)和Rose、Sakura(继承自Plant类);这两个实体类分别通过工厂类AnimalFactory和PlantFactory进行实例化(均继承自BioligyFactory工厂类);在此基础上,将工厂类进一步抽象,通过抽象工厂类AbstractFactory对工厂类进行实例化。

  代码实现:

  1.Animal、AnimalFactory、BiologyFactory

  Animal、AnimalFactory代码在《》中已经创建,只需要将AnimaFactory继承于BiologyFactory并将类方法改为实例方法即可。

1 // BiologyFactory.h 2 #import 
3 #import "Plant.h" 4 #import "Animal.h" 5 6 typedef NS_ENUM(NSInteger, EFactory){ 7 kAnimalFactory, 8 kPlantFactory, 9 };10 11 typedef NS_ENUM(NSInteger, EPlantType){12 kRose,13 kSakura,14 };15 16 typedef enum {17 kDog,18 kBird,19 kFish,20 }EAnimalType;21 22 @interface BiologyFactory : NSObject23 24 - (Plant*)createPlantWithType:(EPlantType)type;25 26 - (Animal*)createAnimalWithType:(EAnimalType)type;27 28 @end

  2.Plant、PlantFactory

1 // Plant.h 2 #import 
3 4 @protocol PlantProtocol
5 @optional 6 - (void)flower; 7 - (void)color; 8 @end 9 10 @interface Plant : NSObject
11 12 @end13 14 // Rose.h15 #import "Plant.h"16 17 @interface Rose : Plant18 19 - (void)thorn;20 21 @end22 23 // Sakura.h24 #import "Plant.h"25 26 @interface Sakura : Plant27 28 - (void)enjoyFlower;29 30 @end
1 // PlantFactory.h 2 #import "BiologyFactory.h" 3 #import "Rose.h" 4 #import "Sakura.h" 5  6 @interface PlantFactory : BiologyFactory 7  8 - (Plant*)createPlantWithType:(EPlantType)type; 9 10 @end11 12 // PlantFactory.m13 #import "PlantFactory.h"14 15 @implementation PlantFactory16 17 - (Plant *)createPlantWithType:(EPlantType)type{18     Plant *plant = nil;19     if(type == kRose){20         plant = [Rose new];21     }else if(type == kSakura){22         plant = [Sakura new];23     }24     return plant;25 }26 27 @end

  3.AbstractFactory创建

1 // AbstractFactory.h 2 #import 
3 #import "BiologyFactory.h" 4 #import "AnimalFactory.h" 5 #import "PlantFactory.h" 6 7 @interface AbstractFactory : NSObject 8 9 + (BiologyFactory*)createFactoryWithType:(EFactory)type;10 11 @end12 13 // AbstractFactory.m14 #import "AbstractFactory.h"15 16 @implementation AbstractFactory17 18 + (BiologyFactory*)createFactoryWithType:(EFactory)type{19 BiologyFactory *factory = nil;20 if(type == kAnimalFactory){21 factory = [AnimalFactory new];22 }else if(type == kPlantFactory){23 factory = [PlantFactory new];24 }25 return factory;26 }27 28 @end

 

转载于:https://www.cnblogs.com/kriskee/p/5338439.html

你可能感兴趣的文章
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
delphi 内嵌汇编例子
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>