简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.

下面使用简单工厂模式实现一个简单的四则运算

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3
 4 __author__ = 'Andy'
 5
 6 '''
 7 大话设计模式
 8 用任意一种面向对象语言实现一个计算器控制台程序。要求输入两个数和运算符号,得到结果
 9 设计模式——简单工厂模式
10 简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
11 '''
12
13 class Operation(object):
14     '''
15     四则运算的父类,接收用户输入的数值
16     '''
17     def __init__(self, number1=0, number2=0):
18         self.num1 = number1
19         self.num2 = number2
20
21     def GetResult(self):
22         pass
23     pass
24
25 #加法运算类
26 class OperationAdd(Operation):
27     def GetResult(self):
28         return self.num1 + self.num2
29
30 #减法运算类
31 class OperationSub(Operation):
32     def GetResult(self):
33         return self.num1 - self.num2
34
35 #乘法运算类
36 class OperationMul(Operation):
37     def GetResult(self):
38         return self.num1 * self.num2
39
40 #除法运算类
41 class OperationDiv(Operation):
42     def GetResult(self):
43         if self.num2 == 0:
44             return '除数不能为0 '
45         return 1.0*self.num1 / self.num2
46
47 #其他操作符类
48 class OperationUndef(Operation):
49     def GetResult(self):
50         return '操作符错误'
51
52 #简单工厂类
53 class OperationFactory(object):
54     def choose_oper(self,ch):
55         if ch == '+':
56             return OperationAdd()
57         elif ch == '-':
58             return OperationSub()
59         elif ch == '*':
60             return OperationMul()
61         elif ch == '/':
62             return OperationDiv()
63         else:
64             return OperationUndef()
65
66 if __name__ == "__main__":
67     ch = ''
68     while not ch == 'q':
69         num1 = input('请输入第一个数值:  ')
70         oper = str(raw_input('请输入一个四则运算符:  '))
71         num2 = input('请输入第二个数值:  ')
72         # Operation(num1,num2)
73         OF = OperationFactory()
74         oper_obj = OF.choose_oper(oper)
75         oper_obj.num1 = num1
76         oper_obj.num2 = num2
77         print '运算结果为: ',oper_obj.GetResult()

这几个类的结构图如下:

专门定义一个Operation类作为父类,加减乘除运算类继承Operation类,OperationFactory类用来决定什么时候创建对应的类

作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/onepiece-andy/p/python-simple-factory-pattern.html

大话设计模式Python实现-简单工厂模式相关推荐

  1. 23种设计模式 -----Day01:简单工厂模式

    目录 前言 1.设计模式(Design pattern)定义 2.为什么要使用设计模式(使用设计模式的意义) 3.设计原则 a.单一职责原则 b.开放封闭原则 c.里氏代换原则 d.迪米特法则 e.依 ...

  2. 设计模式 笔记4 | 简单工厂模式 在源码中的应用 | Calendar 日历 | 源码浅析 | 使用总结 | 建造者模式

    文章目录 一.Calendar 日历类 1.1 内部属性 1.2 设置时间属性值 1.3 获取时间属性 1.4 使用 Calander 计算时间 二.Calender 类中的设计模式 2.1 简单工厂 ...

  3. 手撕设计模式之「简单工厂模式」(Java描述)

    前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...

  4. 设计模式----2(简单工厂模式的概念,简单工厂模式的实现,简单工厂模式的优缺点)

    简单工厂模式 简单工厂模式的概念 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负 责创建其他类的实例,被创建的实例通常都具有共同的父类. 具体分类 工厂(Creator ...

  5. 设计模式(1):简单工厂模式(Simple Factory Pattern)

    1. 从一个简单的例子开始 在众多的设计原则中,有一条原则是这么说的:要针对接口编程,不要针对实现编程. 针对接口编程的话,可以使用不同的实现类来创建这个对象.比如需要一个List: List< ...

  6. Java描述设计模式(02):简单工厂模式

    一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根据食品名称,加工指定类型食品 4).模拟客户端预定操作 2 ...

  7. 设计模式学习-简单工厂模式

    模式概述: 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属 ...

  8. 从王者荣耀看设计模式(四.简单工厂模式)

    从王者荣耀看设计模式(简单工厂模式) 一.简介 游戏开始前,玩家可从英雄池自由挑选将要出战的英雄 二.简单工厂模式 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫 ...

  9. 设计模式第一篇——简单工厂模式&类图

    从今天开始,小菜决定记录下来自己学习设计模式的过程,并总结每天所学内容记录在博客中. 以编写计算器程序为例,有+,-,*,/--很多种运算,因此需要if,else或switch,case进行判断,当有 ...

最新文章

  1. html网页在指定位置嵌入表格,网页制作中表格的主要作用 网页制作中插入表格怎么调整位置...
  2. 全球及中国卫星通信设备市场应用需求分析与投资潜力预测报告2022年
  3. 五子棋开发案列c语言,C语言案例:控制台版本的五子棋游戏【代码】
  4. xp版php,PHP5.3以后的版本如何在XP中安装
  5. Javascript 面向对象编程定义接口的一种方法
  6. 软件工程课堂作业——寻找“水王”
  7. 分布式事务选型的取舍 | 建议收藏
  8. InnoDB 的索引模型
  9. 应用的生命周期各个程序运行状态时代理的回调
  10. centos系统设置局域网静态IP
  11. docker export_docker使用简介
  12. 可重复使用的MicroProfile Health探针
  13. 将Jersey与Spring整合
  14. eclipse中查看mysql_eclipse中怎样查看sqlite数据库的表
  15. 设计模式1——设计模式的原则
  16. 智能体行为建模与方法
  17. git 暂存文件操作 stash
  18. 泛函分析笔记08:有界线性算子和泛函介绍与共鸣定理
  19. 黑马 Python 数据结构与算法第一章
  20. matlab里的dsolve,matlab_dsolve

热门文章

  1. dbForge Studio 2020 for MySQL中文版
  2. 仿基金查询输入框下拉筛选值效果(JavaScript)
  3. git学习创建项目仓库
  4. codevs 1085 数字游戏 dp或者暴搜
  5. 如何在MyEclipse中将项目部署Tomcat
  6. [转]C#中的委托和事件(续)
  7. Cocos2d-CCScene所有场景切换特效[转载]
  8. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
  9. 山西五台警方通报“男子强拽女学生”:嫌疑人被刑拘
  10. 《软件建模与设计: UML、用例、模式和软件体系结构》一一