怎么找网站帮我做推广,网站开发调查问卷题,汕头网站建设制作公司,历史网站怎么做一、工厂模式 工厂模式实现了按需创建的最佳模式#xff0c;其目的是为了隐藏创建类的细节与过程#xff0c;通过一个统一的接口来创建所需的对象。
话说没了皇位争夺权的皇三接到了一个外征的工作#xff0c;始皇给了5个亿的经费让皇三组建一个军队。打权总是要进行武器采…一、工厂模式 工厂模式实现了按需创建的最佳模式其目的是为了隐藏创建类的细节与过程通过一个统一的接口来创建所需的对象。
话说没了皇位争夺权的皇三接到了一个外征的工作始皇给了5个亿的经费让皇三组建一个军队。打权总是要进行武器采购。
说到武器那可以是皇大的生意N久以前皇大就私下建了一个简单的生产工厂被给每条生产线设置口令。目前皇大只有三条生产线口令分别是皇大威武“皇大千秋”“皇大万岁”对应的“刀类矛类枪类”
皇三这天闲来无事来到武器店里订购由武器刀类矛类枪类等。 皇三对着一堆武器懵逼了不知道哪个好。这时皇大的掌柜要求皇三提供生产口令。
import abc # abstract class
from abc import abstractmethod
class Product(metaclassabc.ABCMeta):#拿到生产武器的生产资质及技术abstractmethoddef fabricate(): #定义能够生产武器的方法pass
#引进刀类矛类枪类的生产线
class ProductBittool(Product):#刀类生产线def fabricate(self):#生产工艺print(我是刀类生产线正在生产刀具)class ProductSpear(Product):#mao矛类生产线def fabricate(self):#生产工艺print(我是矛类生产线正在生产矛具)class ProductGun(Product):#刀类生产线def fabricate(self):#生产工艺print(我是枪类生产线正在生产枪具)class SimpleFactory():def create_product(product_type):if product_type HDWW:return ProductBittool()elif product_type HDQQ: return ProductSpear() elif product_type HDWS: return ProductGun() else: print(你的要求非法我们不能提供)product_a SimpleFactory.create_product(HDWW)
product_b SimpleFactory.create_product(HDQQ)
product_c SimpleFactory.create_product(CLQQ)
print(我是有底线的)
product_a.fabricate()
product_b.fabricate()
---------------------------------------------------------------------
你的要求非法我们不能提供
我是有底线的
我是刀类生产线正在生产刀具
我是矛类生产线正在生产矛具
当皇三把第三个口令改成“HDMZ--皇大混账”时想购买的枪类武器就被拒绝。由于皇大早期建的武器工厂的只是“简单的工厂模式”并没有考虑到后期武器的发展缺乏战略目光更多高科技武器快速发展但是皇大却只能在主工厂生产没有分厂建设能力。这相当不利于新的高科技武器开发目前所有新增加的武器都得对简单工厂SimpleFactory()进行改造并要求客户提供正常的口令才能实现生产极其不方便。
为了解决这个行来痛点皇大组织了N次头脑风暴并放下狠话来要是没有想到新的方法谁也不许回家睡觉。大家真的是急得像热锅上的蚂蚁这时皇大手下的一位掌故就想出来一个法子。他建议把生产权力下放让分厂拥有接单能力总厂只负责生产工艺。武器的生产则由生产部指导生产订单则由分厂接并向总厂申请生产工艺与技术。这样每当有新的高科技武器需求就开辟一条新的生产线同时为这条新生产线建造一个生产车间。总厂负责调度工艺文件生产部门负责下达生产任务。此问题不就解决了。只要有新的武器需求我们就开辟新生产车间同时下达新的生产任务这样就不用每次需求变更就都要整改总厂了。我们也不需要口令了而且无论是什么样的需求只要是生产让每个武器的掌柜去接单就可以生产了。
import abc
class Product(metaclassabc.ABCMeta):#拿到生产武器的生产资质及技术abstractmethoddef fabricate(): #定义能够生产武器的方法pass#引进刀类矛类枪类的生产线
class ProductBittool(Product):#刀类生产线def fabricate(self):#生产工艺print(我是刀类生产线正在生产刀具)class ProductSpear(Product):#mao矛类生产线def fabricate(self):#生产工艺print(我是矛类生产线正在生产矛具)class ProductGun(Product):#刀类生产线def fabricate(self):#生产工艺print(我是枪类生产线正在生产枪具)#开武器店接单不然那些工人不造反才怪现在的已经下滑日子真提无法过了快点来点单子吧。工厂接单子
class Creator(metaclassabc.ABCMeta):#工厂接订单abstractmethoddef factory_method(self):#接单根据定制要求给定订分配生产线,比如要求生产刀类则传入刀类生产线ProductBittool()passdef some_operation(self):#产生要求生产的需求product self.factory_method()product.fabricate()#具体生产过程class CreatorBittool(Creator):#刀类掌柜def factory_method(self):#接单return ProductBittool()#下单生产刀类class CreatorSpear(Creator):#矛类掌柜def factory_method(self):#接单return ProductSpear()#下单生产矛具class CreatorGun(Creator):#刀类掌柜def factory_method(self):#接单return ProductGun()#下单生产枪具
#开始疑惑掌柜接单后只需要告诉生产就好了为何还要经过工厂呢因为掌柜没有生产工艺只有工厂有。bittool CreatorBittool()
bittool.some_operation()
spear CreatorSpear()
spear.some_operation()
gun CreatorGun()
gun.some_operation()-------------------------------------------------------
我是刀类生产线正在生产刀具
我是矛类生产线正在生产矛具
我是枪类生产线正在生产枪具
皇三听说皇大的武器工厂最能升级了功能我来去试试看“掌柜的宝塔镇河妖皇大威武”。
掌柜“三皇子现在我们系统已经升级了已经不再需要口令了你需要哪种武器每种武器前面都有分掌柜只需要跟他们提要求就好了。如果他们无法满足你我们皇大也会专门您开辟新的武器研究的谁叫我们都是为皇家而战呢。”从此以后皇三再也不用直接去记住口令了。只需要找分掌故提要求就好了。皇三再逛店的时候就变成了这样了。终于可以友好只要动动嘴就行了 以上是对工厂模式的浅浅理解。
总结一下就是生产跟需求解偶为什么要有Product()这个抽像类理解是抽像共同的东西你是个生产武器的的产品虽然有不同的生产品要求都要有共同的标准粗理解就是行业要求总不能你是武器工厂然后来来生产内衣吧就算开辟一条特例生产线也不像话。有了Product()这个类那么你要生产的产品就都会是一样的生产武器就是武器内衣就是内衣。ProductBittool(Product)这些子类就是基于Product这个类的要求来生产产品这样你要生产什么武器就创建这个什么样的生产线。这就是生产部门决定的。
那跟工厂有什么关系
Creator()这个抽像类我理解是总公司定义了一个接单功能然后又不能直接去接单。就像背后的大佬一样让分公司棋子永远不知道棋手后面是什么去接。CreatorBittool(Creator),这个就像棋子去执行接单子任务然后记录你所要接武器属于哪一条生产线然后接到单子了就用使用总厂提供的方法上报给总厂生产部门生产部门就调用指定的生产线生产任务。
这样做了就跟总厂没有任何关系了总厂只做指导意见与中转这样就解偶了订单需求跟生产直接绑定了。订单不用关心生产要使用哪条生产线只要把我的需求准确生产出来就好我不管你是使用什么技术生产的也不用关心生产线在哪个地方。彻底的当起了甩手掌柜了。