python设计模式(一):工厂方法与抽象工厂及应用场景-阿里云开发者社区

开发者社区> 开发与运维> 正文

python设计模式(一):工厂方法与抽象工厂及应用场景

简介: 工厂方法与抽象工厂是否傻傻分不清,力求以最简单和最直接的方式来理解模式设计,毕竟模式的初衷是化繁为简,就该用最简单的方式来理解。 示例code: 工厂模式 # -*- coding:utf-8 -*-class A:     def __init__(self):         self.

工厂方法与抽象工厂是否傻傻分不清,力求以最简单和最直接的方式来理解模式设计,毕竟模式的初衷是化繁为简,就该用最简单的方式来理解。


示例code:

工厂模式

# -*- coding:utf-8 -*-


class A:

    def __init__(self):
        self.word = "运行A"

    def run(self):
        print(self.word)


class B:

    def __init__(self):
        self.word = "运行B"

    def run(self):
        print(self.word)


def Interface(classname):
    """
    工厂模式接口函数
    :param classname:
    :return:
    """

    run = dict(A=A, B=B)
    return run[classname]()


if __name__ == '__main__':
    test1 = Interface('A')
    test1.run()
    test2 = Interface('B')
    test2.run()
    
    结果:
   运行A
   运行B
   


抽象工厂模式:

# -*- coding:utf-8 -*-


class A:

    def __init__(self):
        self.word = "运行A"

    def run(self):
        print(self.word)


class B:

    def __init__(self):
        self.word = "运行B"

    def run(self):
        print(self.word)


class Interface:
    """
    抽象工厂模式接口类
    :param classname:
    :return:
    "
""
    def __init__(self, classname=None):
        self.test = classname

    def run(self):
        self.test().run()


if __name__ == '__main__':
    test1 = Interface()
    test1.test = A
    test1.run()
    test1.test = B
    test1.run()

    结果:
   运行A
   运行B


抽象工厂:创建一系列相关或相互依赖抽象出来的的对象接口Interface,不需要具体指明实例化A类或B类

工厂方法:定义一个用于创建对象的接口函数Interface,让子类决定实例化哪一个类A或者B

抽象工厂、工厂方法异同比较:抽象工厂实例化的类在接口方法里已经通过字典方式例举出来了,也就是不是实例化A就是B,但是抽象工厂实例化的类未知,可以在抽象接口类里传入A或者B,也可以新建一个C类传入。

类本身就是对象的抽象,但是抽象工厂是对类的抽象,相同方法、相同属性的归并。

2019-03-12-17_39_40.png

2019-03-12-17_39_41.png

如上图,抽象工厂有两个方法生产车架和制造轮胎,但是他没有指定是生产那种牌子的,上图有两种牌子:飞鸽自行车、永久自行车,也就可以增加一个凤凰自行车等等。工厂模式里面就指定了飞鸽厂和永久厂,并且这两个厂只能生产各自对应的轮胎。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章