美文网首页M_iOSiOS DeveloperiOS开发记录
iOS 工厂方法和抽象工厂(一)

iOS 工厂方法和抽象工厂(一)

作者: 尘絮缘12138 | 来源:发表于2015-12-26 09:01 被阅读1336次

开篇

在这篇文章中我们讲下工厂方法和抽象工厂这两种设计模式。几乎在每个面向对象的程序里都会看到工厂方法,随便让一个程序员或者软院,计科的学生说个设计模式都会说出工厂模式。看似普通的东西其实并不普通,今天我们就来认真的研究下什么是工厂方法,它和抽象工厂有什么异同?抽丝剥茧,总结一套心得,在以后写程序的时候更得心应手,不会心存疑虑。

工厂方法

总的来说,工厂方法是抽象工厂的组成部分,各种具体工厂类重载抽象工厂类中的方法,并用这些工厂方法创建具体产品。工厂方法的精髓在于: 一个类无法预期要生成那个类的对象,需要其子类来指定要生成的对象。

下图是工厂方法模式的静态类图(图片来源于《编程之道》)

Factory method

Creator是一个抽象的工厂父类,定义了FactoryMethod这个需要重载的工厂方法,其子类ConcreteCreator实现了这个方法,返回具体的产品。在1994年Wesley最初定义工厂模式的时候,他说: 工厂方法模式,就是让子类决定实例化哪个类,使得一个类的实例化延迟到其子类。在平时的coding中,我们也会经常遇到这样的情况,例如你从网络请求一些产品的列表,但是产品种类很多,需要运行时才能确定,这时候就需要使用工厂方法,例如[[self class] xxxFactory]来让具体子类生成产品。

何时使用工厂方法以及它的好处

以下情形会让你自然而然的想到使用工厂方法:

  1. 编译时无法确定要创建对象的类
  2. 想让子类决定运行时创建什么
  3. 局部化信息。例如一个类有若干子类为其辅助类,而你想返回具体的子类的信息

工厂方法可以让创建出来的产品有一组共同的行为,而且客户端无需修改任何代码就可以拥有不同的产品,当你想加入新产品的时候,只需增加一个子类,无需修改客户端代码。

Demo

我们现在要生成两种画布,一个是ClothCanvasView(布质风格)另一个是PaperCanvasView(纸质风格)。我们将创建一个抽象的generator来生成这些画布。

Factory method

如上图,CanvasViewGenerator是一个基类,包含一个工厂方法canvasViewWithFrame,其两个子类负责实现和返回具体的CanvasView.

CanvasViewGenerator的代码:

#import "CanvasViewGenerator.h"

@implementation CanvasViewGenerator

- (void)canvasViewWithFrame:(CGRect)aFrame
{ 
  return [[CanvasView alloc] initWithFrame:aFrame];
}

这里面只是返回无图案的CanvasView,具体的view需要子类来返回。

PaperCanvasViewGenerator的代码:

#import "PaperCanvasViewGenerator.h"

@implementation PaperCanvasViewGenerator

- (void)canvasViewWithFrame:(CGRect)aFrame
{ 
  return [[PaperCanvasView alloc] initWithFrame:aFrame];
}

ClothCanvasViewGenerator的代码:

#import "ClothCanvasViewGenerator.h"

@implementation ClothCanvasViewGenerator

- (void)canvasViewWithFrame:(CGRect)aFrame
{ 
  return [[ClothCanvasView alloc] initWithFrame:aFrame];
}

当使用画布的时候,只需在CanvasViewController里面调用 [generator canvasViewWithFrame:aFrame]即可,generator类型是基类类型。

工厂方法就是这些了,它的应用非常普遍,很好地封装了工厂子类,并与客户端类解耦。下一篇介绍抽象工厂,以及和工厂方法的对比。

相关文章

  • 2016.06笔记

    iOS设计模式之工厂模式(简单工厂,工厂方法,抽象工厂) 简单工厂:简单工厂模式的工厂类一般是使用静态方法,通过接...

  • 工厂模式——IOS版

    一、前言 工厂模式种类:简单工厂、工厂方法、抽象工厂 IOS中的应用:类簇 二、简单工厂 介绍:简单工厂模式是属于...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • iOS 工厂方法和抽象工厂(一)

    开篇 在这篇文章中我们讲下工厂方法和抽象工厂这两种设计模式。几乎在每个面向对象的程序里都会看到工厂方法,随便让一个...

  • 设计模式(3) 抽象工厂模式

    抽象工厂模式 优化抽象工厂 异步工厂 在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式。简单工厂的职...

  • 1: 简单工厂模式

    一. 基本概念 定义 实例化对象,用工厂方法代替new操作 工厂模式包括工厂方法模式和抽象工厂模式 抽象工厂模式是...

  • 工厂模式(工厂方法模式和抽象工厂模式)

    1.简单工厂: 简单工厂不属于23种设计模式的一种,他是工厂方法和抽象工厂的基础,工厂方法和抽象是简单工厂的演进。...

  • 工厂方法(Factory Method)

    工厂方法 一般情况下,工厂模式分为:简单工厂、工厂方法和抽象工厂。 简单工厂模式(Simple Factory) ...

  • python设计模式-1工厂设计模式-3抽象工厂

    抽象工厂简介 抽象工厂设计模式是工厂方法的泛化。抽象工厂是(逻辑上的)一组工厂方法, 每个工厂方法负责产生不同种类...

  • 抽象工厂

    iOS设计模式 - 抽象工厂 原理图 说明 抽象工厂相当于在简单工厂基础上将工厂进行了抽象 抽象工厂提供了创建一系...

网友评论

    本文标题:iOS 工厂方法和抽象工厂(一)

    本文链接:https://www.haomeiwen.com/subject/odcbhttx.html