简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类)来负责建立其余类的实例。能够根据建立方法的参数来返回不一样类的实例,被建立的实例一般都具备共同的父类。git
举例:github
简单工厂模式像一个代工厂,一个工厂能够生产多种产品。举个例子,一个饮料加工厂同时帮百事可乐和可口可乐生产,加工厂根据输入参数Type
来生产不一样的产品。编程
// 可乐抽象类
@interface Cola : NSObject
@end
// 可口可乐产品类
@interface CocaCola : Cola
@end
// 百事可乐产品类
@interface PesiCola : Cola
@end
// 简单工厂实现
@implementation SimpleFactory
+ (Cola *)createColaWithType:(NSInteger)type { switch (type) { case 0: return [CocaCola new]; case 1: return [PesiCola new]; default: return nil; break; } } @end
// 0 生产可口可乐
Cola *cocaCola = [SimpleFactory createColaWithType:0];
// 1 生产百事可乐
Cola *pesiCola = [SimpleFactory createColaWithType:1];
优势:设计模式
缺点:bash
工厂方法模式(Factory Method Pattern)又称为工厂模式,工厂父类负责定义建立产品对象的公共接口,而工厂子类则负责生成具体的产品对象,即经过不一样的工厂子类来建立不一样的产品对象。ui
举例:atom
工厂方法和简单工厂有一些区别,简单工厂是由一个代工厂生产不一样的产品,而工厂方法是对工厂进行抽象化,不一样产品都由专门的具体工厂来生产。可口可乐工厂专门生产可口可乐,百事可乐工厂专门生产百事可乐。spa
// 工厂抽象类
@implementation Factory
+ (Cola *)createCola {
return [Cola new]; } @end // 可口可乐工厂 @implementation CocaColaFactory + (Cola *)createCola { return [CocaCola new]; } @end // 百事可乐工厂 @implementation PesiColaFactory + (Cola *)createCola { return [PesiCola new]; } @end
// 根据不一样的工厂类生产不一样的产品
Cola *pesiCola = [PesiColaFactory createCola];
Cola *cocaCola = [CocaColaFactory createCola];
复制代码
优势:设计
缺点:code
抽象工厂模式(Abstract Factory Pattern):提供一个建立一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
举例:
抽象工厂和工厂方法不一样的地方在于,生产产品的工厂是抽象的。举例,可口可乐公司生产可乐的同时,也须要生产装可乐的瓶子和箱子,瓶子和箱子也是可口可乐专属定制的,一样百事可乐公司也会有这个需求。这个时候咱们的工厂不只仅是生产可乐饮料的工厂,还必须同时生产同一主题的瓶子和箱子,因此它是一个抽象的主题工厂,专门生产同一主题的不一样商品。
// 可乐抽象类和派生类
@interface Cola : NSObject
@end
@interface CocaCola : Cola
@end
@interface PesiCola : Cola
@end
// 瓶子抽象类和派生类
@interface Bottle : NSObject
@end
@interface CocaColaBottle : Bottle
@end
@interface PesiColaBottle : Bottle
@end
// 箱子抽象类和派生类
@interface Box : NSObject
@end
@interface CocaColaBox : Box
@end
@interface PesiColaBox : Box
@end
// 工厂抽象类
@implementation Factory
+ (Cola *)createCola {
return [Cola new]; } + (Bottle *)createBottle { return [Bottle new]; } + (Box *)createBox { return [Box new]; } @end // 可口可乐主题工厂 @implementation CocaColaFactory + (CocaCola *)createCola { return [CocaCola new]; } + (CocaColaBottle *)createBottle { return [CocaColaBottle new]; } + (CocaColaBox *)createBox { return [CocaColaBox new]; } @end // 百事可乐主题工厂 @implementation PesiColaFactory + (PesiCola *)createCola { return [PesiCola new]; } + (PesiColaBottle *)createBottle { return [PesiColaBottle new]; } + (PesiColaBox *)createBox { return [PesiColaBox new]; } @end
// 可口可乐主题
Cola *cocaCola = [CocaColaFactory createCola];
Bottle *cocaColaBottle = [CocaColaFactory createBottle];
Box *cocaColaBox = [CocaColaFactory createBox];
// 百事可乐主题
Cola *pesiCola = [PesiColaFactory createCola];
Bottle *pesiColaBottle = [PesiColaFactory createBottle];
Box *pesiColaBox = [PesiColaFactory createBox];
优势:
缺点:
单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,并提供一个访问它的全剧访问点。
举例:
单例模式下,对应类只能生成一个实例。就像一个王国只能有一个国王,一旦王国里的事务多起来,这惟一的国王也容易职责太重。
@implementation Singleton
+ (instancetype)shareInstance {
static Singleton *shareInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareInstance = [[Singleton alloc] init];
});
return shareInstance; } @end
优势:
缺点:
生成器模式(Builder Pattern):也叫建立者模式,它将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。
举例:
生成器模式将复杂的建立逻辑进行分割,例如生产汽车,分步骤建立安装不一样的零件。若是建立逻辑简单则没有拆分的必要。
// 汽车生产器 @interface Builder : NSObject + (void)buildEngine; + (void)buildWheel; + (void)buildBody; @end
// 建立过程进行拆分 Builder *builder = [Builder new]; [builder buildBody]; [builder buildWheel]; [builder buildEngine];
优势:
缺点:
原型模式(Prototype Pattern): 使用原型实例指定待建立对象的类型,而且经过复制这个原型来建立新的对象。
举例:
原型模式就像复印技术,根据原对象复印出一个新对象,并根据需求对新对象进行微调。
@interface Student : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *age; @property (nonatomic, copy) NSString *class; @property (nonatomic, copy) NSString *school; @end
// 原对象
Student *lily = [Student alloc] init];
lily.name = @"lily"; lily.age = @"13"; lily.class = @"五年一班"; lily.school = @"实现学校"; // 复制原对象 Student *tom = [lily copy]; // 在原对象基础上微调 tom.name = @"tom";
优势:
缺点: