python 工厂方法
工厂方法模式(FACTORY METHOD)是一种常用创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类, 通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
'''
矿泉水生产
矿泉水有:农夫水、娃哈哈水、怡宝水 这块是变化的部分,不变的是水 水是稳定的 所以提取出来做抽象类
''' import abc
import datetime class AbsShui(abc.ABC): def __init__(self):
'生产日期'
self.datatiem = datetime.datetime.now() @abc.abstractmethod
def say(self):
pass '娃哈哈水' class WaHaHaShui(AbsShui):
def say(self):
return "hi~我叫娃哈哈 %s" % self.datatiem '农夫水' class NongFuShui(AbsShui):
def say(self):
return "hi~我叫小农 %s" % self.datatiem '工厂类' class ShuiFactory(abc.ABC): @abc.abstractmethod
def __call__(self):
pass class WaHaHaFactory(ShuiFactory):
def __call__(self):
return WaHaHaShui() class NongFuShuiFactory(ShuiFactory):
def __call__(self):
return NongFuShui() '专卖店' class ZhuanMaiDian: def __init__(self, factory: ShuiFactory):
self.shui = factory # 多态 解耦 def chu_shou(self):
o = self.shui() # 生产水
print(o.say()) '哇哈哈专卖店'
whh = ZhuanMaiDian(WaHaHaFactory()) '''
生产水
'''
whh.chu_shou()
whh.chu_shou()
whh.chu_shou() '农夫专卖店'
hf = ZhuanMaiDian(NongFuShuiFactory()) hf.chu_shou()
python 工厂方法的更多相关文章
- 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式
本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...
- 设计模式:工厂方法模式(Python)
来自:http://blog.csdn.net/ericzhong83/article/details/7604728 工厂方法模式(Factory Method Pattern): 定义了一个创建对 ...
- 大话设计模式Python实现-工厂方法模式
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. #!/usr/bin/env python ...
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
- 【python设计模式-创建型】工厂方法模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...
- Python设计模式——工厂方法模式(FactoryMethod)
需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样. 如果用简单工厂模式实现: #encoding=utf-8 __author__ = 'kevinlu ...
- [Python设计模式] 第8章 学习雷锋好榜样——工厂方法模式
github地址:https://github.com/cheesezh/python_design_patterns 简单工厂模式 v.s. 工厂方法模式 以简单计算器为例,对比一下简单工厂模式和工 ...
- 《精通Python设计模式》学习之工厂方法
小书,在我以前作数据库的连接时,就用了这个工厂方法的. 归纳总结一下,更有利于成长吧. import xml.etree.ElementTree as etree import json class ...
- 第四十篇 Python之设计模式总结-简单工厂、工厂方法、抽象工厂、单例模式
一. 简单工厂 简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂的用处不大,主要就是一个if... ...
随机推荐
- 【深入学习linux】CentOS 7 最小化安装后程序必须安装的组件
centos平台编译环境使用如下指令 安装make: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc ...
- SearchLookupEdit 选择后联动
直接改绑定数据源--实体的属性会导致选择内容变空 所有改相应控件的text然后再写入数据源 最好将需要联动的控件设置成只读 mNoTextEdit.EditValueChanged += (s, e) ...
- 【MySQL】Mysql模糊查询like提速优化
一般情况下like模糊查询的写法为(field已建立索引): SELECT `column` FROM `table` WHERE `field` like '%keyword%'; 上面的语句用ex ...
- python快速搭建http服务
在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器. 如果python为2.x,则可执行:$ python -m SimpleH ...
- ubuntu 16.04 安装teamviewer
很多人可能会问,为什么要在ubuntu上安装teamview?shell不就够用了吗?但实际上,很多时候,在远程连接linux的时候,我们需要在图形用户界面上进行操作.现在我就遇到了一个实际的问题:每 ...
- visual studio 2019 error MSB3073 exited with code 1
在用vs2019编译C++工程时,出现错误. 原因是设置的命令没有运行成功,需要将这条命令关闭.不编译就行了. 解决方法,打开property manager,打开property pages,将其中 ...
- (原)关于OpenSL ES播放音频数据的一个奇怪的问题
关于OpenSL ES播放音频数据的一个奇怪的问题 Author:lihaiping1603@aliyun.com 最近用业余时间做了一个android平台的播放器sdk,其中视频用的opengl e ...
- (原)关于音频onset detection算法的阅读
Orgin:Using Audio Onset Detection Algorithms 本文档只记录了部分的内容,主要以aubio相关内容为主,并非整个文档的完整内容,记录人:lihaiping16 ...
- 生成pcf文件
import os import datetime import hashlib def checksum(filename): with open(filename, mode='rb') as f ...
- An unexpected exception occurred while binding a dynamic operation 错误的一种情况
这种错误,出现在dynamic传值的时候,无法动态访问变量. 出错原因是: 使用了嵌套类,class里面又定义了class