设计模式——工厂方法模式和抽象工厂模式
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
设计模式——工厂方法模式和抽象工厂模式相关推荐
- 抽象工厂和工厂方法示例_抽象工厂设计模式示例
抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
为什么80%的码农都做不了架构师?>>> 几点说明 永远不要纠结于在什么时候使用什么模式 永远不要纠结于什么模式适用于什么情景 永远不要去死记任何的模式 并不是说,23种设计模 ...
- 对设计模式的总结之工厂方法模式和抽象工厂模式
前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓 ...
- 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细
1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...
- 021 设计模式之工厂方法模式,抽象工厂模式的区别
简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...
- Java设计模式之工厂方法模式与抽象工厂模式
2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...
- 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)
文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...
- 设计模式之工厂模式(工厂方法模式、抽象工厂模式)
工厂模式 所谓工厂,就是将零件组装成产品的地方. 建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中.创建对象可能会导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级 ...
- 【设计模式】 - 创建者模式 - 工厂方法模式、抽象工程模式
工厂方法模式.抽象工程模式 前言 工厂方法模式. 抽象工程模式 1. 简单工厂模式(不属于GOF的23种经典设计模式) 1.1 结构 1.2 实现 缺点 2. 工厂方法模式 2.1 结构 2.2 实现 ...
最新文章
- 技术人员突围就业寒冬的最优途径 | 拿不到AI核心岗位Offer全额退款
- 套接字编程(VC_Win32)
- UML与需求分析进阶
- 吴恩达机器学习学习笔记第四章:python的配置
- python开发技术文档范文_常用python编程模板汇总
- spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)
- MySQL常用命令收录
- ylbtech-dbs:ylbtech-7,welfareSystem(福利发放系统)
- 计算机组成原理唐朔飞重点,计算机组成原理唐朔飞高分笔记
- 使用DevExpress的PdfViewer实现PDF打开、预览、另存为、打印(附源码下载)
- EViews10.0程序安装及注意事项
- “醒着拼”的东鹏饮料发中报,“饮料界茅台”名副其实吗?
- 基于Java Web的航空售票管理系统(酒店管理系统,图书管理系统、学生管理系统)
- 《职场正能量》读后感
- 电邮里面是图片怎么下载_这是最有效的采访后谢谢您的电子邮件
- axios中的put和patch有什么区别
- RL极简入门:从MDP、DP MC TC到Q函数、策略学习、PPO
- 在公司三年跌宕起伏的经历
- 北京SAP-AGS CoE support consultant intern 面试总结
- python爬虫--cookie、防盗链、代理
热门文章
- 智点创科机器人_秒会机器人教育_秒会机器人教育加盟_秒会机器人教育加盟费多少钱-武汉智点创科机器人科技发展有限公司-项目网...
- python爬取公众号历史文章_python爬微信公众号前10篇历史文章(6)-话说http cookies...
- Java数据结构与算法:堆
- Java基础:类加载器
- 云平台管理与部署---虚拟化平台-----KVM
- 匈牙利算法学习笔记_Python代码
- 如何做出受欢迎的字体排版风格?
- git 上传代码到指定仓库_初次使用git上传代码到github远程仓库
- 实现快速排序的算法_排序算法-快速排序
- socket Php 粘包,python3 tcp的粘包现象和解决办法解析