Python实现设计模式.创建类设计模式

抽象工厂(abstact_foctory)模式

抽象工厂是什么

抽象工厂是为了提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

例子

我创建了一个抽象工厂类,它的表现取决于我们选择什么工厂来初始化它。例子中,抽象工厂类是宠物店(PetShop),它有一个动作(show_pet)用来展示动物,我们如果用猫(Cat)初始化宠物店,展示时,它会”喵呜“。

代码实现例子
import random


class PetShop(object):

    """宠物店"""

    def __init__(self, animal_factory=None):
        """pet_factory是我们的抽象工厂"""

        self.pet_factory = animal_factory

    def show_pet(self):
        """使用抽象工厂创造和展示宠物"""

        pet = self.pet_factory()
        print("我们有一只可爱的 {}".format(pet))
        print("它看到了你,对你 {}".format(pet.speak()))


class Dog(object):
    def speak(self):
        return '汪汪'

    def __str__(self):
        return '小狗'


class Cat(object):
    def speak(self):
        return '喵呜'

    def __str__(self):
        return '小猫'


# 随机一种动物
def random_animal():
    return random.choice([Dog, Cat])()


if __name__ == "__main__":
    cat_shop = PetShop(Cat)
    cat_shop.show_pet()

    shop = PetShop(random_animal)
    for _ in range(3):
        shop.show_pet()
        print('=' * 20)
### 输出 ###
我们有一只可爱的 小猫
它看到了你,对你 喵呜
我们有一只可爱的 小狗
它看到了你,对你 汪汪
====================
我们有一只可爱的 小猫
它看到了你,对你 喵呜
====================
我们有一只可爱的 小狗
它看到了你,对你 汪汪
====================

Borg(borg)模式

Borg模式是什么

Brog模式(也称Monostata模式)可以用来实现单例,但是不是指一个类只有一个实例,它会多个具有相同属性的实例。换一句话说,它关注于共享属性为不是共享实例。

例子

首先你需要知道的是,Python实例的属性存储在一个叫做__dict__ 的字典中。通常,每个实例都会有一个这样的字典,但是,Borg 模式修改了这一规定,从而使每个实例有一个相同的字典。

在这个例子中,__shared_state 属性会成为所有实例的公共字典,这是通过确保当初始化一个新的实例时(__init__())方法执行时),将 __dict__ 属性赋值为类的静态变量 _shared_state 来实现的。

代码实现例子
class Borg(object):
    __shared_state = {}

    def __init__(self):
        self.__dict__ = self.__shared_state
        self.state = 'Init'

    def __str__(self):
        return self.state


class YourBorg(Borg):
    pass


if __name__ == '__main__':
    rm1 = Borg()
    rm2 = Borg()

    rm1.state = 'Idle'
    rm2.state = 'Running'

    print('rm1: {0}'.format(rm1))
    print('rm2: {0}'.format(rm2))

    rm2.state = 'Zombie'

    print('rm1: {0}'.format(rm1))
    print('rm2: {0}'.format(rm2))

    print('rm1 id: {0}'.format(id(rm1)))
    print('rm2 id: {0}'.format(id(rm2)))

    rm3 = YourBorg()

    print('rm1: {0}'.format(rm1))
    print('rm2: {0}'.format(rm2))
    print('rm3: {0}'.format(rm3))

### 输出 ###
rm1: Running
rm2: Running
rm1: Zombie
rm2: Zombie
rm1 id: 2306371518816
rm2 id: 2306371552704
rm1: Init
rm2: Init
rm3: Init

建造者(builder)模式

建造者模式是什么
例子
代码实现例子

工厂(factory)模式

工厂模式是什么
例子
代码实现例子

lazy_evalution模式

lazy_evalution模式是什么
例子
代码实现例子

池(pool)模式

池模式是什么
例子
代码实现例子

原型(prototype)模式

原型模式是什么
例子
代码实现例子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值