工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题

首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。

工厂方法模式的对简单工厂模式进行了抽象。

有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。

在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。   

代码:

"""设计模式--工厂模式"""
class A():
'''工厂类'''
def __init__(self):
self.classname = '工厂类' class A1(A):
def run(self):
print(self.classname + '-- this is A1') class A2(A):
def run(self):
print(self.classname + '-- this is A2') class B():
'''接口基类'''
def create(self):
'''把要创建的工厂对象装配进来'''
raise NotImplementedError class B1(B):
def create(self):
return A1() class B2(B):
def create(self):
return A2() B1().create().run()
B2().create().run()

结果:

工厂类-- this is A1
工厂类-- this is A2

  

Python设计模式----2.工厂模式的更多相关文章

  1. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

  2. Python: 设计模式 之 工厂模式例(2)(神奇的Python)

    #!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...

  3. Python: 设计模式 之 工厂模式例(1)

    #!/usr/bin/env python #coding=utf-8 # # 工厂模式一例 # 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) ...

  4. python设计模式之工厂模式

    一.理解工厂模式 在面向对象编程中,术语“工厂”表示一个负责创建替他类型对象的类.通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法.客户端使用某些参数调用此方法,之后,工厂会据此创建所需类 ...

  5. Python 设计模式--简单工厂模式

    简单工厂模式(Factory Pattern)是一种创建型的设计模式,像工厂一样根据要求生产对象实例. 特点:根据不同的条件,工厂实例化出合适的对象. <大话设计模式>中实例:四则运算计算 ...

  6. 浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  7. 大话设计模式Python实现- 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 下面是一个抽象工厂的demo: #!/usr/bin/env pyth ...

  8. python设计模式之建造者模式

    python设计模式之建造者模式 ​ 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...

  9. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  10. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

随机推荐

  1. 【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)

    问题描述 使用Azure Storage Table的REST API,实现根据过滤条件删除满足条件的数据,调用方法为  Delete Entity (Azure Storage) 问题实现 第一步: ...

  2. 【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误

    问题描述 使用VS Code创建Python Function,处理Event Hub中的数据.当部署到Azure Function App后,函数无法执行,查看 Function 日志出现 Valu ...

  3. 【自动化】使用PlayWright+代理IP实现多环境隔离

    Playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行Chromium.Firefox.WebKit等主流浏览器自动化 ...

  4. Java 常见的两个错误 -------1.栈溢出 java.lang.StackOverflowError 2.堆溢出 java.lang.OutOfMemoryError /OOM

    1 package com.bytezero.exception; 2 3 /** 4 * 5 * @Description Error 6 * @author Bytezero·zhenglei! ...

  5. Java 四种不同的权限修饰

    private 私有属性 只在同一个包下 同一个类中可以调用 同一个包下,不同的类中,可以调用 缺省,保护(protected),公共(public)可以调用, 不同的包下的类中,继承关系,可以调用 ...

  6. [学习笔记]Rocket.Chat业务数据备份

    Rocket.Chat 的业务数据主要存储于mongodb数据库的rocketchat库中,聊天中通过发送文件功能产生的文件储存于/app/uploads中(文件方式设置为"FileSyst ...

  7. vue 下 placeholder 修改颜色

    input::placeholder{ color:#585c89 !important; }

  8. python 文件操作常用方法

    一 python文件创建 import os import argparse def file_write(file_name,msg): f = open(file_name,"a&quo ...

  9. java多线程的锁整理

    参考,欢迎点击原文:https://www.jianshu.com/p/473a3d96a1b0(java锁总结) https://www.jianshu.com/p/dcabdf695557(Ree ...

  10. 记一次由于linux buff cache引发的问题

    简介 在前一段时间,在帮一个朋友处理一个问题是时,遇到这么一个问题.功能做的是一个vue分片式上传,在测试定位问题时,我就发现,分片上传14次,其中有那么一两次是上传失败,导致文件上传不完整.报了以下 ...