Python的创建型设计模式之抽象工厂模式

注:书上定义和展示代码均来自《Python编程实战》


抽象工厂模式,书上定义:用来创建复杂的对象,这种对象由许多小的对象组成,而这些小的对象都属于特定的“系列”。回头再读这段话,然后再回想敲过书上的这个实例。
用简单话来概括就是,你现在要完成一个东西,这个东西里面有几部分(3部分吧),这3部分吧,你可以用红色完成,但你也可以用绿色完成,反正最后这个东西成型了,咦你一看,哦这里面是3部分哦。因此,关键就在于红色有它自己的心路历程,绿色也有它的心路历程,但是总的目的,都是成为这个东西的一部分。这是我现在所能举例子来说明的所谓“经典的抽象工厂模式”。
而python风格的抽象工厂模式是,因为,虽然红色是红色,绿色是绿色,但它们要成为这个东西的一部分,有些心路历程是一样的嘛,因此,没有必要把这些一样的心路历程再写一边,需要完成的就是属于自己的那部分。


class RedFactory:

    @classmethod
    def make_diagram(Class, width, height):
        return Class.Diagram(width, height)

    @classmethod
    def make_rectangle(Class, x, y, width, height, fill="white", stroke="black"):
        return Class.Rectangle(x, y, width, height, fill, stroke)

    @classmethod
    def make_text(Class, x, y, text, fontsize=12):
        return Class.Text(x, y, text, fontsize)

    class Text:
        def __init__(self, x, y, text, fontsize):
            self.x = x
            self.y = y
            self.rows = [list(text)]

    class Rectangle:
        def __init__(self, x, y, width, height, fill, stroke):
            pass

    class Diagram:
        def __init__(self, width, height):
            self.width = width
            self.height = height

        def add(self):
            pass


class GreenFactory(RedFactory):
    SVE_TEXT = """<text x="{x}" y="{y}" text-anchor="left" font-family="sans-serif"
    font-siez="{fontsize}">{text}</text>"""
    SVE_SCALE = 20

    class Text:
        def __init__(self, x, y, text, fontsize):
            x *= SvgDiagramFactory.SVE_SCALE
            y *= SvgDiagramFactory.SVE_SCALE

    class Rectangle:
        def __init__(self):
            pass

    class Diagram:
        def __init__(self):
            pass

        def add(self):
            pass

我们具体看看代码,红色和绿色所共有的心路历程,叫做“类方法”,到时调用这些方法的时候,就是红色、绿色这个类调用。


我个人这里对抽象工厂模式还是没什么感觉呢,只能说自己接触的少吧。这种模式就是慢慢向并发理念靠近哦?我是这样想,好比AB两个人同时完成一件事,这样抽象工程模式可能比AB两人完全不鸟对方只顾各自完成自己的任务高吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值