每日一题 为了工作 2020 0427 第五十六题

//设计模式 python版本的简单工厂模式 和 单例模式

# coding=utf-8
# 简单工厂模式

class Ace(object):

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

    def cut_tree(self):
        print("使用"+self.name+"砍树")

class Stone(Ace):

    def __init__(self):
        pass

    def cut_tree(self):
        print("使用石头去砍树")

class Stell(Ace):

    def __init__(self):
        pass

    def cut_tree(self):
        print("使用钢铁开始砍树")


class Factory(object):

    @staticmethod
    def getAce(ace_type):
        if "stone" == ace_type:
            return Stone()
        elif "stell" == ace_type:
            return Stell()
        else:
            return Ace()

class Worker(object):

    def __init__(self,worker_name,ace_type):
        self.worker_name = worker_name
        self.ace_type = ace_type

    def work_action(self):
        ace = Factory.getAce(self.ace_type)
        print(self.worker_name)
        ace.cut_tree()

if __name__ == '__main__':

    work = Worker("zhangsna","stone")
    work.work_action()

  

# coding=utf-8
# 单例设计模式

class Singleton:
    instance = None
    firstInit = True

    def __init__(self,name):
        if self.firstInit:
            print("init")
            self.firstInit = False
            self.name = name

    def __new__(cls, name,*args, **kwargs):
        if not cls.instance:
            cls.instance = object.__new__(cls)
        return cls.instance

    def run(self):
        print("{0} is run".format(self.name))


if __name__ == '__main__':
    s1 = Singleton("zs")
    s2 = Singleton("ls")

    print(id(s1))
    print(id(s2))
    s1.run()
    s2.run()

  

原文地址:https://www.cnblogs.com/walxt/p/12787944.html