python同一个例子工厂模式、策略模式、建造者模式和观察者模式

一、实例类

定义一个父类 Dog,三个子类 Erha、Samoye、Tugou;
class Dog:

    def walk(self):
        pass

    def run(self):
        pass

    def bark(self, msg=''):
        pass


class Erha(Dog):

    def walk(self):
        print('二哈 走路 ...')

    def run(self):
        print('二哈 跑步 ...')

    def bark(self, msg=''):
        print(msg + '二哈 狂吠 ...')


class Samoye(Dog):

    def walk(self):
        print('萨摩耶 走路 ...')

    def run(self):
        print('萨摩耶 跑步 ...')

    def bark(self, msg=''):
        print(msg + '萨摩耶 狂吠 ...')


class Tugou(Dog):

    def walk(self):
        print('土狗 走路 ...')

    def run(self):
        print('土狗 跑步 ...')

    def bark(self, msg=''):
        print(msg + '土狗 狂吠 ...')

二、工厂模式

# 工厂模式:根据客户的选择返回相应的实例
class DogFactory:

    def choose_dog(self, type):
        if type == 'e':
            dog = Erha()
        elif type == 's':
            dog = Samoye()
        else:
            dog = Tugou()
        return dog

三、策略模式

class Strategy:

    def __init__(self, dog):
        self.dog = dog

    def set_strategy(self, dog):
        self.dog = dog

    def walk(self):
        self.dog.walk()

    def run(self):
        self.dog.run()

    def bark(self):
        self.dog.bark()


strategy = Strategy(Erha())
strategy.walk()
strategy.set_strategy(Samoye())
strategy.bark()

二哈 走路 ...
萨摩耶 狂吠 ...

四、建造者模式

# 建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节.
class Director:

    def __init__(self, dog):
        self.dog = dog

    def play(self):
        self.dog.walk()
        self.dog.run()
        self.dog.bark()


Director(Erha()).play()  # 二哈游戏

二哈 走路 ...
二哈 跑步 ...
二哈 狂吠 ...

五、观察者模式

class Master:

    def __init__(self):
        self.dogs = []

    def register(self, dog):
        if not dog in self.dogs:
            self.dogs.append(dog)

    def unregister(self, dog):
        self.dogs.remove(dog)

    def notify(self, order):
        for dog in self.dogs:
            dog.bark(order)


master = Master()
master.register(Erha())
master.register(Tugou())
master.register(Samoye())
master.notify('有美女,')

有美女,二哈 狂吠 ...
有美女,土狗 狂吠 ...
有美女,萨摩耶 狂吠 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值