• 抽象工厂模式-设计模式-第5篇


    1. 定义

    定义一个工厂类接口,让工厂子类 创建一系列相关或相互依赖的对象

    举例:
    生产一部手机,需要手机壳, CPU, 操作系统三大类对象进行组装,
    手机壳有不同的种类,大手机壳,小手机壳,
    CPU也有种鸽种类,高通,骁龙,等等
    操作系统有多个种类,比如,ios,android
    对于每个具体的工厂,生产一部手机,需要三个对象,

    相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品

    2. 代码

    from abc import abstractmethod, ABCMeta
    
    
    # ---------抽象产品-----------
    class PhoneShell(metaclass=ABCMeta):
        @abstractmethod
        def show_shell(self):
            pass
    
    
    class CPU(metaclass=ABCMeta):
        @abstractmethod
        def show_cpu(self):
            pass
    
    
    class OS(metaclass=ABCMeta):
        @abstractmethod
        def show_os(self):
            pass
    
    
    # --------抽象工厂--------
    class PhoneFactory(metaclass=ABCMeta):
        @abstractmethod
        def make_shell(self):
            pass
    
        @abstractmethod
        def make_cpu(self):
            pass
    
        @abstractmethod
        def make_os(self):
            pass
    
    
    # ------具体的产品-------
    class SmallShell(PhoneShell):
        def show_shell(self):
            print("普通的小手机壳")
    
    
    class BigShell(PhoneShell):
        def show_shell(self):
            print("普通的大手机壳子")
    
    
    class AppleShell(PhoneShell):
        def show_shell(self):
            print("苹果手机壳子。。。")
    
    
    class SnapDragnCPU(CPU):
        def show_cpu(self):
            print("骁龙手机CPU。。。。")
    
    
    class MediaTekCPU(CPU):
        def show_cpu(self):
            print("联发科 手机CPU ....")
    
    
    class AppleCPU(CPU):
        def show_cpu(self):
            print("苹果手机 CPU 。。。")
    
    
    class AndroidOS(OS):
        def show_os(self):
            print("安卓手机操作系统")
    
    
    class IOS(OS):
        def show_os(self):
            print("苹果手机操作体统。。。")
    
    
    # ---------具体的工厂-------
    class XiaoMiFactory(PhoneFactory):
        def make_shell(self):
            return BigShell()
    
        def make_cpu(self):
            return SnapDragnCPU()
    
        def make_os(self):
            return AndroidOS()
    
    
    class IPhoneFactory(PhoneFactory):
        def make_os(self):
            return IOS()
    
        def make_cpu(self):
            return AppleCPU()
    
        def make_shell(self):
            return AppleShell()
    
    
    # --- 客户端 ----
    class Phone:
        def __init__(self, cpu, os, shell):
            self.cpu = cpu
            self.os = os
            self.shell = shell
    
        def show_info(self):
            print("手机信息:")
            self.cpu.show_cpu()
            self.os.show_os()
            self.shell.show_shell()
    
    
    def make_phone(factory):
        cpu = factory.make_cpu()
        os = factory.make_os()
        shell = factory.make_shell()
        return Phone(cpu, os, shell)
    
    
    if __name__ == '__main__':
        phone1 = make_phone(XiaoMiFactory())
        phone1.show_info()
        print("------------------")
        phone2 = make_phone(IPhoneFactory())
        phone2.show_info()
    

    3 优缺点

    优缺点:
    每个工厂创建了一个完整的产品系列,
    有利于产品的一致性
    缺点:
    难以支持新种类的抽象产品
    例如 PhoneFactory 当需要增加零部件的时候 例如增加 一个部件 内存条
    则需要改动的代码量较大

  • 相关阅读:
    增值业务
    话题:jQuery 关于文件上传表单处理的一个非常怪异的问题
    net use 的使用
    c#开发snmp应用
    PowerDesigner15使用时的十五个问题
    一段JS代码,让你的WordPress支持简繁转换(转)
    聚集索引查询优化
    NHibernate 2.1.2相关地址
    Oracle expdp/impdp导出导入命令及数据库备份(转)
    大型ORACLE数据库优化设计方案
  • 原文地址:https://www.cnblogs.com/cavalier-chen/p/14746651.html
Copyright © 2020-2023  润新知