3.Python_创建型模式_抽象工厂模式

1.定义

12
定义提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
应用场景1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。
角色抽象工厂角色(creator)
具体工厂角色(concrete creator)
多个抽象产品角色(product)
具体产品角色(concrete product)
客户端(client)
优点当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象
缺点产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码

2.示例

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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 SmallShell(PhoneShell):
    def show_shell(self):
        print("普通小手机壳")


class BigShell(PhoneShell):
    def show_shell(self):
        print("普通大手机壳")


class AppleShell(PhoneShell):
    def show_shell(self):
        print("苹果手机壳")


class SnapDragonCPU(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 IOS(OS):
    def show_os(self):
        print("IOS系统")


class Android(OS):
    def show_os(self):
        print("Android系统")


# ---抽象工厂---
class PhoneFactory(metaclass=ABCMeta):
    @abstractmethod
    def make_shell(self):
        pass

    @abstractmethod
    def make_cpu(self):
        pass

    @abstractmethod
    def make_os(self):
        pass


# ---具体工厂---
class MIFactory(PhoneFactory):
    def make_shell(self):
        return BigShell()

    def make_cpu(self):
        return SnapDragonCPU()

    def make_os(self):
        return Android()


class HuaWeiFactory(PhoneFactory):
    def make_shell(self):
        return SmallShell()

    def make_cpu(self):
        return MediaTekCPU()

    def make_os(self):
        return Android()


class IPhoneFactory(PhoneFactory):
    def make_shell(self):
        return SmallShell()

    def make_cpu(self):
        return AppleCPU()

    def make_os(self):
        return IOS()


# ---客户端---

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__':
    p1 = make_phone(MIFactory())
    p1.show_info()

3.总结

工厂模式:

定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类

抽象工厂模式

提供一个创建一创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类

注意

当产品只有一个的时候,抽象工厂模式即变成工厂模式,当工厂模式的产品变为多个时,工厂模式即变成抽象产品模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值