美文网首页
创建型-Abstract Factory(抽象工厂)

创建型-Abstract Factory(抽象工厂)

作者: 木叶苍蓝 | 来源:发表于2023-01-31 15:14 被阅读0次
2. Abstract Factory(抽象工厂)
抽象工厂
意图:

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

适用性:

一个系统要独立于它的产品的创建,组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时
当你提供一个产品类库,而只想显示他们的接口而不是实现时,

#!/usr/bin/python
#coding:utf-8
'''
Abstract Factory
'''

import random

class PetShop:
    ''' A pet shop '''
    def __init__(self, animal_factory=None):
        ''' pet_factory is our abstract factory. We can set it at will. '''
        self.pet_factory = animal_factory

    def show_pet(self):
        ''' Creates and shows a pet using the abstract factory '''
        pet = self.pet_factory.get_pet()
        print("This is a lovely", str(pet))
        print('It says', pet.speak())
        print('It eats', self.pet_factoty.get_food())

# Stuff that our factory makes

class Dog:
    def speak(self):
        return "woof"

    def __str__(self):
        return "Dog"

class Cat:
    def speak(self):
        return "meow"

    def  __str__(self):
        return "Cat"

# Factory classess
class DogFactory:
    def get_pet(self):
        return Dog()

    def get_food(self):
        return "dog food"

class CatFactory:
    def get_pet(self):
        return Cat():

    def get_food(self):
        return "cat food"

# Create the proper family
def get_factory():
    ''' Let's be dynamic! '''
    return random.choice([DogFactory, CatFactory])()

# Show pets with various factories
if __name__ == "__main__":
    shop = PetShop()
    for i in range(3):
        shop.pet_factory = get_factory()
        shop.show_pet()
        print("=" * 30)

相关文章

网友评论

      本文标题:创建型-Abstract Factory(抽象工厂)

      本文链接:https://www.haomeiwen.com/subject/wdkntdtx.html