一、对工厂设计模式的理解

在现实生活中,工厂是用于生产产品的,我们告诉工厂,我们需要什么样的产品,工厂就会生产出该产品,我们无需知道该产品到底是怎么生产的。在python中也是一样的,我们只需要调用工厂类的方法,传入参数后,就能得到我们想要的对象,此时我们并不关心该对象的内部实现。

二、工厂设计模式的优点

1、工厂模式巨有非常好的封装性,代码结构清晰;

2、屏蔽产品类,使产品的被使用业务场景和产品的功能细节可以分而开发进行,是比较典型的解耦框架。

三、工厂模式的简单实现

流程图:

代码实现

class Factory(object):"""定义工厂类"""def create_fruit(self,fruit):"""定义创建水果方法"""if fruit == "apple":return Apple()elif fruit == "peach":return Peach()class Fruit(object):"""创建水果类"""def __str__(self):return "fruit"class Apple(Fruit):"""创建苹果类"""def __str__(self):return "apple"class Peach(Fruit):"""创建桃子类"""def __str__(self):return "peach"if __name__ == "__main__":#工厂实例化factory = Factory()#使用工厂创建水果fruit = factory.create_fruit("apple")print(fruit)

python 工厂设计模式相关推荐

  1. 工厂设计模式----python版本

    #!/usr/bin/python # -*- coding: UTF-8 -*- #工厂设计模式 ''' date:2016/8/21 ''' #形状接口 class Shape(object):d ...

  2. python 与设计模式 ——工厂与单例

    python 与设计模式 源码地址:http://git.oschina.net/duoduo3_69/python_design_pattern git checkout v001(这个版本与此篇博 ...

  3. python工厂模式 简书_工厂模式

    什么是工厂设计模式? 定义一个用于创建对象的接口,让子类决定将哪一个类实例化,专门用来生产对象.在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如 ...

  4. Python常见设计模式

    设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. 0:接口 定义:一种特殊的类,声明了若干方法,要求继 ...

  5. python做平面设计-Python系列干货之——Python与设计模式

    原标题:Python系列干货之--Python与设计模式 一.创建类设计模式 前言: 什么样的程序员是一个好的程序员?学会很多门编程语言,就是一个好的程序员了么?事实上,学会一门编程语言不是一件很难的 ...

  6. 用于可扩展、可重用和优雅的代码的Python工厂

    用于可扩展.可重用和优雅的代码的Python工厂 通过将行为(在工厂超类中定义)与对象创建(在子类中)解耦,创建灵活.可扩展的代码. 在现实生活中的工厂中,相同或相似对象的生产不是单独完成的,而是在流 ...

  7. python常用设计模式

    python常用设计模式 一.设计模式基础 1. 基础知识 2. 面向对象设计SOLID原则 3. 设计模式分类 4. 简单工厂模式(Simple Factory Pattern) 二.创建型模式(5 ...

  8. python工厂模式 django_Mastering.Python.Design.Patterns

    第一章 工厂模式 创造模式处理一个对象的创建.创造模式的目的是为了在不按照约定而直接地创建的地方提供可选择的情况. 在工厂模式中,客户端查询一个对象而不知道这个对象来自哪里(即,哪一个类被用来生成它) ...

  9. Java设计模式(四):工厂设计模式

    1. 工厂设计模式 1.1 应用场景 由于需求的变化,一个类的子类经常面临着剧烈的变化,但他却拥有比较稳定的接口.使用一种封装机制来"隔离这种易变对象的变化",工厂方法定义一个用于 ...

最新文章

  1. Silverlight实用窍门系列:59.多个中心点联动多线的可拖动控件扩展为拓扑图
  2. MVC4做网站后台:栏目管理1、添加栏目
  3. source insight(SI)C/C++符号标记含义
  4. ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象...
  5. Effective C++: 06继承与面向对象设计
  6. MFC为窗口创建线程,以及线程与窗口间的通信
  7. 熊猫DataFrame groupby()函数
  8. github设置添加SSH(转载自:破男孩)
  9. 山西农业大学c语言程序设计试卷答案,2016年宁夏医科大学公共卫生与管理学院C语言程序设计(加试)复试笔试最后押题五套卷...
  10. 网络存储学习之网络存储技术的发展现状及趋势
  11. csgo服务器怎么显示cmd,CSGO服务器搭建教程——KZ模式
  12. 你以为 Snapchat 做的是社交,但它却说自己是一家相机公司
  13. 【C# 单因素方差分析(One Way ANOVA)】
  14. es java 查询为空和非空的数据
  15. Hawk-and-Chicken详解
  16. AI溃败,被Dota2职业战队打蠢!独家专访OpenAI:我们发现一个Bug
  17. 2021地理设计组一等奖:融合短视频和深度学习的城市空间意象解构与分析
  18. 2019爪哇部落第十届新生选拔赛 题解
  19. corners边框_Js实现的6种圆角边框样式
  20. SOAP在java中的应用实例

热门文章

  1. PHP 微信 扫码登录 pc网站
  2. ubuntu硬盘修复
  3. 纳维斯托克方程_托克如何检验其网络安全性
  4. MediaPlayer播放视频
  5. 各大牛逼网站推荐系统
  6. Nginx 配置 SSL 证书 + HTTPS 站点小记
  7. Android 网络请求、网络状态及各种权限判断
  8. 隐私计算+区块链原生融合之后平台开放、提升性能,蚂蚁链隐私协作平台FAIR重磅架构升级
  9. Android 自定义圆形进度条(圆环刻度)View
  10. 验证千字文中有没有重复的字。