132 lines
2.8 KiB
Python
132 lines
2.8 KiB
Python
"""
|
|
实例
|
|
今天伟哥约自己在富士康工作的老乡出来喝酒,没想到老乡最近一直在加班。听说接了个大活,要同时为小米公司和苹果公司代工他们的笔记本电脑和手机生产业务。
|
|
"""
|
|
|
|
from abc import ABC, abstractmethod
|
|
|
|
|
|
# 抽象产品 - 手机
|
|
class Phone(ABC):
|
|
brand: str
|
|
|
|
@abstractmethod
|
|
def setOS(self) -> None:
|
|
pass
|
|
|
|
|
|
# 具体产品 - 苹果手机
|
|
class Iphone(Phone):
|
|
def __init__(self):
|
|
self.brand = "Apple"
|
|
|
|
def setOS(self):
|
|
print(" 为该手机安装IOS系统")
|
|
|
|
|
|
# 具体产品 - 小米手机
|
|
class MiPhone(Phone):
|
|
def __init__(self):
|
|
self.brand = "Xiaomi"
|
|
|
|
def setOS(self):
|
|
print(" 为该手机安装安卓系统")
|
|
|
|
|
|
# 抽象产品 - 笔记本电脑
|
|
class Laptop(ABC):
|
|
brand: str
|
|
|
|
@abstractmethod
|
|
def setOS(self) -> None:
|
|
pass
|
|
|
|
|
|
# 具体产品 - 苹果笔记本电脑
|
|
class Macbook(Laptop):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.brand = "Apple"
|
|
|
|
def setOS(self):
|
|
print(" 为该笔记本电脑安装macOS系统")
|
|
|
|
|
|
# 具体产品 - 小米笔记本电脑
|
|
class MiLaptop(Laptop):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.brand = "Xiaomi"
|
|
|
|
def setOS(self):
|
|
print(" 为该笔记本电脑安装Windows系统")
|
|
|
|
|
|
# 抽象工厂
|
|
class AbstractFactory(ABC):
|
|
name: str
|
|
|
|
@abstractmethod
|
|
def createPhone(self) -> Phone:
|
|
pass
|
|
|
|
@abstractmethod
|
|
def createLaptop(self) -> Laptop:
|
|
pass
|
|
|
|
|
|
# 具体工厂 - 苹果工厂
|
|
class AppleFactory(AbstractFactory):
|
|
def __init__(self):
|
|
self.name = "苹果工厂"
|
|
|
|
def createPhone(self):
|
|
return Iphone()
|
|
|
|
def createLaptop(self):
|
|
return Macbook()
|
|
|
|
|
|
# 具体工厂 - 小米工厂
|
|
class XiaomiFactory(AbstractFactory):
|
|
def __init__(self):
|
|
self.name = "小米工厂"
|
|
|
|
def createPhone(self):
|
|
return MiPhone()
|
|
|
|
def createLaptop(self):
|
|
return MiLaptop()
|
|
|
|
|
|
def client(factory: AbstractFactory):
|
|
phone = factory.createPhone()
|
|
laptop = factory.createLaptop()
|
|
print(f" 生产了一台{phone.brand}手机")
|
|
phone.setOS()
|
|
print(f" 生产了一台{laptop.brand}笔记本电脑")
|
|
laptop.setOS()
|
|
|
|
|
|
def main():
|
|
print("======== 抽象工厂模式 ========")
|
|
|
|
# 伟哥先去苹果工厂生产产品
|
|
print("伟哥选择了苹果工厂生产产品:")
|
|
factory = AppleFactory()
|
|
print(f"伟哥选择了{factory.name}生产产品:")
|
|
client(factory)
|
|
|
|
print("\n切换工厂生产其他品牌的产品...\n")
|
|
|
|
# 然后伟哥去小米工厂生产产品
|
|
factory = XiaomiFactory()
|
|
print(f"伟哥选择了{factory.name}生产产品:")
|
|
client(factory)
|
|
|
|
print("====== 抽象工厂模式结束 ======")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|