iOS设计模式:静态工厂相关

工厂方法模式

定义创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类.

*最初的定义出现于<设计模式>(Addison-Wesley,1994)

 

注意:我讲解的是静态工厂,它只能执行静态的方法,也就是类方法,似乎与工厂方法有些神识但也有区别.

先准备一个基类的数据模型

BaseModel.h + BaseModel.m

#import <Foundation/Foundation.h>

// 基类数据模型,为派生出的子类定义统一的接口(该基类所有的实现都为空实现)
@interface BaseModel : NSObject

+ (void)modelInfo;

@end
#import "BaseModel.h"

@implementation BaseModel

+ (void)modelInfo
{
    NSLog(@"BaseModel");
}

@end

用两个类分别继承至该基类

NameModel.h + NameModel.m

#import "BaseModel.h"

@interface NameModel : BaseModel

+ (void)modelInfo;

@end
#import "NameModel.h"

@implementation NameModel

+ (void)modelInfo
{
    if (self == [NameModel class])
    {
        NSLog(@"NameModel");
    }
}

@end

NewsModel.h + NewsModel.m

#import "BaseModel.h"

@interface NewsModel : BaseModel

+ (void)modelInfo;

@end
#import "NewsModel.h"

@implementation NewsModel

+ (void)modelInfo
{
    if (self == [NewsModel class])
    {
        NSLog(@"NewsModel");
    }
}

@end

注意,这两个基类都重载了父类中的方法modelInfo

 

之后就来定义我们的工厂类了

ModelFactory.h + ModelFactory.m

#import <Foundation/Foundation.h>

@interface ModelFactory : NSObject

+ (Class)classWithModel:(id)model;

@end
#import "ModelFactory.h"

#import "BaseModel.h"
#import "NameModel.h"
#import "NewsModel.h"

@implementation ModelFactory

+ (Class)classWithModel:(id)model
{
    Class modelClass = Nil;

    if ([model isKindOfClass:[NameModel class]])
    {
        modelClass = [NameModel class];
    }
    else if ([model isKindOfClass:[NewsModel class]])
    {
        modelClass = [NewsModel class];
    }
    else if ([model isKindOfClass:[BaseModel class]])
    {
        modelClass = [BaseModel class];
    }

    return modelClass;
}

@end

这样,一份完整的静态工厂相关的设计就出来了,不过这个静态工厂不是用来创建对象的,而是来识别对象的.

 

用途:

客户端(使用你封装代码的人)不关心你的基类到底派生出了多少种子类,它只关心,特定的子类返回特定的样式,知道这些就够了.他只会用这个基类指针从工厂中获取想要的东西,而你就必须得在工厂中去处理这些东西.客户端无需更改什么代码,一切的代码都在工厂中处理,客户端是不关心的.

 

注意细节:

1. 基类需要定义一些方法(公共的类方法接口)并空实现,子类继承之后按需要重载实现这些公共的接口,不实现也行.

2. 工厂中集中识别这些继承的对象,匹配出对象后返回想要的结果.

3. 添加了新的子类后需要更新工厂.

 

 

时间: 2025-01-20 19:29:36

iOS设计模式:静态工厂相关的相关文章

iOS设计模式 - 抽象工厂

iOS设计模式 - 抽象工厂   原理图   说明 1. 抽象工厂指的是提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类 2. 如果多个类有相同的行为,但实际实现不同,则可能需要某种抽象类型作为其父类被继承,抽象类型定义了所有相关具体类将共有的共同行为   源码 https://github.com/YouXianMing/iOS-Design-Patterns // // BrandingFactory.h // AbstractFactoryPattern // // C

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

工厂方法模式 基本理解 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 简单工厂的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对客户端来说,去除了具体产品的依赖.但是它违背了开发封闭原则,如果新添加运算类则需要修改工厂类. 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行.如果想添加新的运算功

IOS设计模式-简单工厂

为什么 "简单工厂原理" 叫简单工厂,因为这个工厂类不是抽象类,而是实体类,工厂本身就是一个具体的对象. 写一个例子演示简单工厂模式: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&

设计模式之静态工厂、工厂方法和抽象工厂的联系与区别

解析: 开闭原则:对扩展开放,对修改封闭.静态工厂增加需要是修改源代码,对修改不封闭,不符合开闭原则. Simple Factory 简单工厂模式(静态工厂) 1)Simple Factory模式属于创建型模式 2)简单工厂模式是由一个工厂(注意是一个!)对象决定创建出哪一种产品类的实例(例如你到肯德基说你要鸡腿,要薯条,要饮料还是其他的,这时肯德基是一个工厂,客户端只需要点明自己要什么就行) 3)实现方式的实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类

设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)

 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 分类  工厂模式主要是为创建对象提供过渡接口,以便将创建对象的

.NET设计模式-抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?这就是我们要说的抽象工厂模式. 意图 提供一个创建一系列相关或相互依赖对象的接

Effective Java (1) 考虑用静态工厂方法代替构造器

一.前言 从今天开始计划用一个月的时间,通过写读书笔记的方式来记录阅读这本Java领域经典中的经典书籍 - Effective Java过程中自己所思所想,以备以后查阅,同时分享出去也希望可以帮助到其他人,废话不多说,现在开始第一篇:创建和销毁对象. 二.考虑用静态工厂方法代替构造器 ①. 一般我们有什么办法可以创建对象呢? 方法1: 使用类公有构造器. 方法2:使用类的静态方法返回一个实例. ②. 使用静态方法创建对象有什么优点? 优点1: 静态工厂方法的名字是由我们自己命名,而构造方法必须与

解读设计模式----简单工厂模式(SimpleFactory Pattern)

一.模式概述 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现,学习了此模式可以为后面的很多中模式打下基础.那好,我们就来了解下什么是简单工厂模式? 我们来分析一个现实生活中的案例,每天早晨起床洗唰后是干什么呢?吃早餐(这里只针对在外吃早餐的上班族

面向对象编程设计模式--简单工厂模式讲解

工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返的类都有一个共同的你类和共同的方法, 但每个方法执行的任务不同,而且根据不同的数据进行了优化. 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 下面进行一个代码示例: public class g