
from abc import abstractmethod, ABC
# -------------------------抽象产品(接口)-------------------------
class WashMode(ABC):
@abstractmethod
def wash(self):
pass
# -------------------------具体产品-------------------------
class WashingPowder(WashMode):
def wash(self):
print("使用洗衣粉洗衣服")
class WashingLiquid(WashMode):
def wash(self):
print("使用洗衣液洗衣服")
class WashingBall(WashMode):
def wash(self):
print("使用洗衣凝珠洗衣服")
# -------------------------工厂类-------------------------
class SimpleFactory:
@staticmethod
def choose_mode(method):
if method == "powder":
return WashingPowder()
elif method == "liquid":
return WashingLiquid()
else:
return WashingBall()
if __name__ == '__main__':
sf = SimpleFactory()
powder = sf.choose_mode("powder")
powder.wash()
liquid = sf.choose_mode("liquid")
liquid.wash()
ball = sf.choose_mode("ball")
ball.wash()
```,
```py
使用洗衣粉洗衣服
使用洗衣液洗衣服
使用洗衣凝珠洗衣服
elif判断),违反了开闭原则
from abc import abstractmethod, ABC
# -------------------------抽象产品类(接口)-------------------------
class WashMode(ABC):
@abstractmethod
def wash(self):
pass
# -------------------------具体产品类-------------------------
class WashingPowder(WashMode):
def wash(self):
print("使用洗衣粉洗衣服")
class WashingLiquid(WashMode):
def wash(self):
print("使用洗衣液洗衣服")
class WashingBall(WashMode):
def wash(self):
print("使用洗衣凝珠洗衣服")
# -------------------------抽象工厂类-------------------------
class WashFactory(ABC):
@abstractmethod
def wash_method(self):
pass
# -------------------------具体工厂类-------------------------
class LiquidWash(WashFactory):
def wash_method(self):
return WashingPowder()
class PowderWash(WashFactory):
def wash_method(self):
return WashingLiquid()
class BallWash(WashFactory):
def wash_method(self):
return WashingBall()
if __name__ == '__main__':
liquid = PowderWash()
lw = liquid.wash_method()
lw.wash()
powder = LiquidWash()
pw = powder.wash_method()
pw.wash()
ball = BallWash()
bw = ball.wash_method()
bw.wash()
使用洗衣液洗衣服
使用洗衣粉洗衣服
使用洗衣凝珠洗衣服
WashingPowder类,调用它的wash方法即可WashingLiquid类,调用它的wash方法
from abc import abstractmethod, ABC
# -------------------------抽象工厂类-------------------------
class AbstractFactory(ABC):
@abstractmethod
def wash_with_powder(self):
pass
@abstractmethod
def wash_with_liquid(self):
pass
@abstractmethod
def wash_with_ball(self):
pass
# -------------------------实际工厂类-------------------------
class LiBaiFactory(AbstractFactory):
def __init__(self):
print("欢迎来到立白工厂...")
def wash_with_powder(self):
return WashingPowder()
def wash_with_liquid(self):
return WashingLiquid()
def wash_with_ball(self):
return WashingBall()
class TaiZiFactory(AbstractFactory):
def __init__(self):
print("欢迎来到汰渍工厂...")
def wash_with_powder(self):
return WashingPowder()
def wash_with_liquid(self):
return WashingLiquid()
def wash_with_ball(self):
return WashingBall()
# -------------------------抽象产品-------------------------
class WashMode(ABC):
@abstractmethod
def wash(self):
pass
# -------------------------具体产品-------------------------
class WashingPowder(WashMode):
def wash(self):
print("使用洗衣粉洗衣服")
class WashingLiquid(WashMode):
def wash(self):
print("使用洗衣液洗衣服")
class WashingBall(WashMode):
def wash(self):
print("使用洗衣凝珠洗衣服")
if __name__ == '__main__':
lb = LiBaiFactory()
lbp = lb.wash_with_powder()
lbp.wash()
lbp = lb.wash_with_liquid()
lbp.wash()
lbp = lb.wash_with_ball()
lbp.wash()
tz = TaiZiFactory()
tzp = tz.wash_with_powder()
tzp.wash()
欢迎来到立白工厂...
使用洗衣粉洗衣服
使用洗衣液洗衣服
使用洗衣凝珠洗衣服
欢迎来到汰渍工厂...
使用洗衣粉洗衣服
产品族和产品等级结构概念,其目的是为了更加高效的生产同一个产品组产品
产品族:可以理解为具体的工厂产品等级:可以理解为具体工厂对象中的方法产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象产品族很方便,无须修改已有系统,符合“开闭原则”。