2019独角兽企业重金招聘Python工程师标准>>>

为什么使用工厂方法?

Duck duck=new MallardDuck();
//使用接口让代码更具有弹性
//但是还是建立了具体类的实例

在有一群相关类时,当场会写出这样的代码

Duck duck;if(picnic){duck=new MallarDuck();
}
if(hunting){duck=new DecoyDuck();
}
else if(inBathTub){duck=new RubberDuck();
}

在很多情况下,我们究竟要实例化哪个具体类,要在运行时有一些条件来决定。当看到这样的代码,一旦有变化或者扩展,就必须重新打开这段代码进行检查修改。通常这样修改过的代码将早场部分系统更难维护和更新,而且也更容易犯错。

直接使用new不符合“对修改关闭”的原则,我们应该依据“找出会变化的原则,把它们从不变的部分分离出来”的原则写代码。

解决方案:

什么是工厂方法?

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定特定类。

原则:依赖抽象,不要依赖具体类。

目的:为了得到更松的耦合,更有弹性的设计。

简单的理解:

实例 -> 类 -> 类工厂

实例 -> 类 -> 类工厂 -> 抽象工厂

工厂方法是个方法,是在提供的抽象接口中,用来创建“一个产品”的方法。

createPizza();

然后具体子类,通过实现此接口来实现这个createPizze()的具体方法。

抽象工厂是个接口,在接口中,创建“很多产品”(或者说一个产品家族,因为产品之间有一定的联系)。

createDough();
createSauce();
createCheese();
//多个产品,但是相互之间有联系,都是一种披萨的配料

然后具体子类,通过实现此接口来实现创建这个产品家族,而其中每一个create方法,都可以使用工厂方法来实现。

可以说抽象工厂的实现中,运用到了工厂方法。

换句话说:抽象工厂的任务是定义一个负责创建一组产品的接口,这个接口内的每一个方法都负责创建一个具体产品,同时我们利用实现抽象工厂的子类来提供这些具体的算法。所以,在抽象工厂中利用工厂方法实现生产方法是相当自然的做法。

转载于:https://my.oschina.net/u/3786691/blog/1808100

设计模式——工厂方法模式和抽象工厂模式相关推荐

  1. 抽象工厂和工厂方法示例_抽象工厂设计模式示例

    抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...

  2. 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory

    为什么80%的码农都做不了架构师?>>>    几点说明 永远不要纠结于在什么时候使用什么模式 永远不要纠结于什么模式适用于什么情景 永远不要去死记任何的模式 并不是说,23种设计模 ...

  3. 对设计模式的总结之工厂方法模式和抽象工厂模式

    前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓 ...

  4. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  5. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

  6. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

  7. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...

    转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...

  8. 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)

    文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...

  9. 设计模式之工厂模式(工厂方法模式、抽象工厂模式)

    工厂模式 所谓工厂,就是将零件组装成产品的地方. 建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中.创建对象可能会导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级 ...

  10. 【设计模式】 - 创建者模式 - 工厂方法模式、抽象工程模式

    工厂方法模式.抽象工程模式 前言 工厂方法模式. 抽象工程模式 1. 简单工厂模式(不属于GOF的23种经典设计模式) 1.1 结构 1.2 实现 缺点 2. 工厂方法模式 2.1 结构 2.2 实现 ...

最新文章

  1. 技术人员突围就业寒冬的最优途径 | 拿不到AI核心岗位Offer全额退款
  2. 套接字编程(VC_Win32)
  3. UML与需求分析进阶
  4. 吴恩达机器学习学习笔记第四章:python的配置
  5. python开发技术文档范文_常用python编程模板汇总
  6. spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)
  7. MySQL常用命令收录
  8. ylbtech-dbs:ylbtech-7,welfareSystem(福利发放系统)
  9. 计算机组成原理唐朔飞重点,计算机组成原理唐朔飞高分笔记
  10. 使用DevExpress的PdfViewer实现PDF打开、预览、另存为、打印(附源码下载)
  11. EViews10.0程序安装及注意事项
  12. “醒着拼”的东鹏饮料发中报,“饮料界茅台”名副其实吗?
  13. 基于Java Web的航空售票管理系统(酒店管理系统,图书管理系统、学生管理系统)
  14. 《职场正能量》读后感
  15. 电邮里面是图片怎么下载_这是最有效的采访后谢谢您的电子邮件
  16. axios中的put和patch有什么区别
  17. RL极简入门:从MDP、DP MC TC到Q函数、策略学习、PPO
  18. 在公司三年跌宕起伏的经历
  19. 北京SAP-AGS CoE support consultant intern 面试总结
  20. python爬虫--cookie、防盗链、代理

热门文章

  1. 智点创科机器人_秒会机器人教育_秒会机器人教育加盟_秒会机器人教育加盟费多少钱-武汉智点创科机器人科技发展有限公司-项目网...
  2. python爬取公众号历史文章_python爬微信公众号前10篇历史文章(6)-话说http cookies...
  3. Java数据结构与算法:堆
  4. Java基础:类加载器
  5. 云平台管理与部署---虚拟化平台-----KVM
  6. 匈牙利算法学习笔记_Python代码
  7. 如何做出受欢迎的字体排版风格?
  8. git 上传代码到指定仓库_初次使用git上传代码到github远程仓库
  9. 实现快速排序的算法_排序算法-快速排序
  10. socket Php 粘包,python3 tcp的粘包现象和解决办法解析