PPT_python设计模式_建造者工厂模式和抽象工厂模式
PPT_python设计模式_建造者工厂模式和抽象工厂模式
1、抽象工厂模式可以将建造者模式与工厂模式合一
i 工厂模式是 定义一个factory ,由用户输入生产条件,然后产出产品 factory 封装的产品类
ii 建造者 是定义一个建造者,由用户输入要准备产出的类对象, 然后建造者开始生产。 建造者接收类对象。
iii 抽象工厂模式 是对工厂模式更高集成,解决当有多个工厂的场景。
先用工厂模式选择工厂类
再用建造者模式 将产品类生产出来。
抽象工厂模式
抽象工厂类
工厂类1 工厂类2 工厂类3
产品类1 产品类2
2、具体例子 工厂模式
#-*- coding:utf-8 -*-
#! /usr/bin/env python
class Catproduct(object):
def run(self):
print "miaomiao"
class Dogproduct(object):
def run(self):
print "wangwang"
class Factory(object):
def __init__(self):
self.productdict = {"cat":Catproduct(),"dog":Dogproduct()}
def produce(self,order):
if self.productdict.get(order,None):
self.productdict.get(order).run()
return self.productdict.get(order,None)
factory = Factory()
cat = factory.produce("cat")
dog = factory.produce("dog")
print type(cat)
工厂生产产品的菜单在工厂的生产方法中,依照输入的字符串进行索引返回生产好的类对象。
建造者模式
建造者将各个物品类对象传入自己的类中,然后编排物品的建造过程在自己的建造方法中。
#-*- coding:utf-8 -*-
#! /usr/bin/env python
class Catproduct(object):
typename = 'cat'
def buildHead(self):
print "build %s hear"%(self.typename)
def buildBody(self):
print "build %s body"%(self.typename)
def run(self):
print "miaomiao"
class Dogproduct(object):
typename = 'dog'
def buildHead(self):
print "build %s hear"%(self.typename)
def buildBody(self):
print "build %s body"%(self.typename)
def run(self):
print "wangwang"
class Builder(object):
def __init__(self,org):
self.inerorg = org
def startBuild(self):
self.inerorg.buildHead()
self.inerorg.buildBody()
self.inerorg.run()
cat = Catproduct()
dog = Dogproduct()
catbuild = Builder(cat)
dogbuild = Builder(dog)
catbuild.startBuild()
dogbuild.startBuild()
3、抽象工厂
抽象工厂模式为工厂模式和建造者模式的组合
#-*- coding:utf-8 -*-
#! /usr/bin/env python
class WhiteCatproduct(object):
typename = 'whitecat'
def buildHead(self):
print "build %s hear"%(self.typename)
def buildBody(self):
print "build %s body"%(self.typename)
def run(self):
print "miaomiao"
class BlackCatproduct(object):
typename = 'blackcat'
def buildHead(self):
print "build %s hear"%(self.typename)
def buildBody(self):
print "build %s body"%(self.typename)
def run(self):
print "miaomiao"
class ZhangDogproduct(object):
typename = 'zhangao'
def buildHead(self):
print "build %s hear"%(self.typename)
def buildBody(self):
print "build %s body"%(self.typename)
def run(self):
print "wangwang"
class SongshiDogproduct(object):
typename = 'songshi'
def buildHead(self):
print "build %s hear"%(self.typename)
def buildBody(self):
print "build %s body"%(self.typename)
def run(self):
print "wangwang"
class CatFactory(object):
def __init__(self,org):
self.inerorg = org
def startBuild(self):
self.inerorg.buildHead()
self.inerorg.buildBody()
self.inerorg.run()
class DogFactory(object):
def __init__(self,org):
self.inerorg = org
def startBuild(self):
self.inerorg.buildHead()
self.inerorg.buildBody()
self.inerorg.run()
# class Builder(object):
# def __init__(self,org):
# self.inerorg = org
# def startBuild(self):
# self.inerorg.buildHead()
# self.inerorg.buildBody()
# self.inerorg.run()
class AbstractFactory(object):
def __init__(self):
self.factorydict = {"catfactory":CatFactory,"dogfactory":DogFactory}
def abtPro(self,order):
if self.factorydict.get(order,None):
return self.factorydict.get(order,None)
abtfactory = AbstractFactory()
#--------------create a white cat
whitecatproduct = WhiteCatproduct()
catfactory = abtfactory.abtPro('catfactory')
whitecatfactory = catfactory(whitecatproduct)
whitecatfactory.startBuild()
经典例子 http://www.jb51.net/article/91233.htm
浙公网安备 33010602011771号