Python设计模式之工厂方法模式实例详解

yipeiwu_com6年前Python基础

本文实例讲述了Python设计模式之工厂方法模式。分享给大家供大家参考,具体如下:

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——工厂方法模式
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类.
工厂方法模式克服了简单工厂模式违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点
场景:雷锋工厂,不关心执行者,只关心执行结果
"""
class LeiFeng(object):
  def Sweep(self):
    print "扫地"
  def Wash(self):
    print "洗衣"
  def BuyRice(self):
    print "买米"
class IFactory(LeiFeng):
  def CreateLeiFeng(self):
    pass
#大学生
class Undergraduate(LeiFeng):
  pass
#新增社区服务者
class Volunteer(LeiFeng):
  pass
# 学习雷锋的大学生工厂
class UndergraduateFactory(IFactory):
  def CreateLeiFeng(self):
    return Undergraduate()
#新增一个社区服务者的工厂e
class VolunteerFactory(IFactory):
  def CreateLeiFeng(self):
    return Volunteer()
if __name__ == "__main__":
  student = UndergraduateFactory()
  volunteer = VolunteerFactory()
  student.BuyRice()
  student.Sweep()
  volunteer.Wash()

运行结果:

买米
扫地
洗衣

上面类的设计如下图:

创建一个抽象工厂类CreateLeiFeng和一个抽象对象类LeiFeng,当创建具体leifeng对象-Undergradiate去dosomething时,使用继承抽象工厂的UndergraduateFactory工厂类,该类返回一个Undergradiate实例,如果还要去做另一个dosomething时,再创建一个VolunteerFactory工厂方法创建创建一个Volunteer实例就可以了

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

pyqt5 键盘监听按下enter 就登陆的实例

记得导入包,其他按键可类比 def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Enter:...

python 计算文件的md5值实例

较小文件处理方法: import hashlib import os def get_md5_01(file_path): md5 = None if os.path.is...

python模拟enum枚举类型的方法小结

本文实例总结了python模拟enum枚举类型的方法。分享给大家供大家参考。具体分析如下: python中没有enum枚举类型,可能python认为这玩意压根就没用,下面列举了三种方法模...

python使用xpath中遇到:<Element a at 0x39a9a80>到底是什么?

前言 大家在学习python爬虫的过程中,会发现一个问题,语法我看完了,说的也很详细,我也认真看了,爬虫还是不会写,或者没有思路,所以我的所有文章都会从实例的角度来解析一些常见的问题和...

python中sets模块的用法实例

本文实例简单讲述了python中sets模块的用法,分享给大家供大家参考。 具体方法如下: import sets magic_chars = sets.Set('abracada...