iOS常见的设计模式:工厂设计模式

简单工厂模式:

简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类。

①创建一个工厂类,可乐抽象类。
②可口可乐和百事可乐继承于可乐抽象类。

// 简单工厂实现
@implementation SimpleFactory
+ (Cola *)createColaWithType:(NSInteger)type
{ switch (type) { case 0: //可口可乐return [CocaCola new]; case 1: //百事可乐return [PesiCola new]; default: return nil; break; }
}
@end

优点:

  1. 根据约定好的参数就可以获取所需要的对象,而不需要知道其创建的细节。减少了系统的耦合度。
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,减少开发者的记忆成本。

缺点:

  1. 如果业务上添加新产品的话,就需要修改工厂类原有的判断逻辑,这其实是违背了开闭原则的。
  2. 在产品类型较多时,有可能造成工厂逻辑过于复杂。所以简单工厂模式比较适合产品种类比较少而且增多的概率很低的情况。

工厂模式(工厂方法模式)

工厂方法模式(Factory Method Pattern)又称为工厂模式,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,即通过不同的工厂子类来创建不同的产品对象。

与简单工厂的区别:
工厂方法和简单工厂有一些区别,简单工厂是由一个代工厂生产不同的产品,而工厂方法是对工厂进行抽象化,不同产品都由专门的具体工厂来生产。可口可乐工厂专门生产可口可乐,百事可乐工厂专门生产百事可乐。
即:多个工厂对应多个品牌厂商进行一对一生产

// 工厂抽象类
@implementation Factory
+ (Cola *)createCola
{return [Cola new];}@end
// 可口可乐工厂@implementation CocaColaFactory
+ (Cola *)createCola
{ return [CocaCola new];
}
@end
// 百事可乐工厂@implementation
PesiColaFactory
+ (Cola *)createCola
{ return [PesiCola new];
}
@end

优点:

  1. 根据所需产品找对应工厂进行生产,不关心产品细节,也不需要知道产品类的类名。
  2. 当系统中加入新产品时,不需要修改抽象工厂和抽象产品提供的接口,也无须修改客户端和其他的具体工厂和具体产品,而只要添加一个具体工厂和与其对应的具体产品就可以了,符合了开闭原则。

缺点:

  1. 当系统中加入新产品时,除了需要提供新的产品类之外,还要提供与其对应的具体工厂类。因此系统中类的个数将成对增加,增加了系统的复杂度。

抽象工厂模式

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

抽象工厂和工厂方法的区别:
生产产品的工厂是抽象的。主题工厂不仅仅生产可口可乐或百事可乐,瓶子和箱子也需要专属定制,专门生产同一主题的不同商品。
优点:

  1. 不需要生产产品细节,只需要知道产品属于那个工厂就行,当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决定其行为的软件系统来说,是一种非常实用的设计模式。

缺点:

  1. 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口。

iOS常见的设计模式:工厂设计模式相关推荐

  1. 创建设计模式 - 工厂设计模式

    创建设计模式 - 工厂设计模式 欢迎到工厂设计模式在Java教程.Factory Pattern是Creational Design模式之一,它在JDK以及Spring和Struts等框架中得到广泛应 ...

  2. java二十三种设计模式——工厂设计模式

    java设计模式的分类 在java中,设计模式有三十三种之多,分为三大类: 创建性模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构性模式,共七种:适配器模式.装饰器模式 ...

  3. php设计模式-工厂设计模式

    概念: 工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类步骤. 很多高级模式都是依赖于工厂模式. 转载于:https://www.cnblogs.com/sjhss ...

  4. 嵌入式C设计模式---工厂设计模式

    更新记录链接:嵌入式C设计模式---前言_嵌入式学习_force的博客-CSDN博客_嵌入式前言 目录         1.工厂设计模式动漫详解         2.智慧温室大棚监控系统项目详解工厂应 ...

  5. 设计模式:工厂设计模式

    通过工厂设计模式可降低代码的耦合度.耦合度太高会导致代码不方便维护 就相当于A一直要与B绑定在一起.可以完全参考Java虚拟机的设计思想 程序→JVM→适应不同的操作系统(A->C->B) ...

  6. Java设计模式——工厂设计模式

    工厂设计模式 一.简介 都不知道简介要写什么,工厂模式嘛,就是工厂嘛,生产东西的嘛-- 在Java里面就是用来帮助我们生产对象的咯-- 主要作用嘛,大概就是将创建和使用对象拆分减低耦合度吧. 二.分类 ...

  7. java 生产设计模式_java设计模式-工厂设计模式

    工厂设计模式是创建型设计模式,有三种设计方法:简单工厂(产品父类),工厂模式(工厂父类),抽象工厂(父类接口) 一.简单工厂 简单工厂的设计思想是: 1.定义一个产品的父类 2.具体产品类继承父类 3 ...

  8. 设计模式--工厂设计模式

    工厂设计模式:四个角色 抽象工厂 具体工厂 抽象产品 具体产品 优点:类的创建方法被封装 满足开闭原则 缺点 每增加一个具体产品都要新加一个工厂 会造成类爆炸 package com.qf.facto ...

  9. 设计模式—工厂设计模式

    工厂设计模式 1.概述 2.简单工厂模式 2.1 结构 2.2 实现 2.3 优缺点 2.4 扩展 3.工厂方法模式 3.1 概述 3.2 结构 3.3 实现 3.4 优缺点 4.抽象工厂模式 4.1 ...

  10. Java设计模式-工厂设计模式

    工厂设计模式概念 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工厂模式就相 ...

最新文章

  1. ajax.beginform onfailure,如何使用Ajax.BeginForm OnSuccess和OnFailure方法?
  2. Windows下MySQL下载安装、配置与使用
  3. pe卸载win10更新补丁_新图标+新功能!win10凌晨更新补丁
  4. 使用MyBatis框架连接MySQL数据库查询记录,全部步骤
  5. Keepalived-在没有之前配置的Nginx高可用(不建议采纳)
  6. 题目399-整除个数(满满的套路)
  7. 软件项目管理案例教程第四版答案
  8. 垃圾分类图片数据集分享-约10w张数据集
  9. 日语开发java自我介绍,用日语自我介绍,这些你一定会用到
  10. 腾讯互娱web后端面经分享
  11. 教妹学 Java:晦涩难懂的泛型
  12. App自动化测试怎么做?实战分享App自动化测试全流程
  13. BIDI单纤双向光模块
  14. 软件测试个人求职简历该怎么写?一个优质软件测试工程师简历
  15. ARM处理器的 Handler mode 与 Thread mode 以及 MSP 和 PSP
  16. 05-SA8155 QNX Hypervisor 之 Pass-through直通模式
  17. 计算机盲打最快要多久,电脑打字怎样做到又快又准确
  18. 《大话设计模式》读书总结
  19. python处理ps_python中怎么像PS一样处理图像
  20. 人大金仓数据Windows安装教程

热门文章

  1. 值得拥有的5 款功能强大的免费 PDF 编辑器
  2. Day3----《Pattern Recognition and Machine Learning》Christopher M. Bishop
  3. 获取截止本月之前12个月的月份
  4. 选型宝访谈:微软CRM X 全球顶尖AI技术=?
  5. Codeforces 1334 D. Minimum Euler Cycle
  6. 央视纪录片《抑郁症-寻找希望之光》丨身边的常见病,值得我们关注和重视 !
  7. 3天怒肝5万字!阿里P7大佬手写MySQL超全笔记,还担心学不会吗?
  8. 分布式系统(2)系统模型
  9. 根据输入的三角形的三条边的值,判断三角形的类型(等边、等腰、直角、普通、非三角形)并输出
  10. 戴维营第八天上课总结