python工厂模式 django_python设计模式-建造者模式

创建 Pizza 创建者

首先我们定义一个 Pizza

然后我们抽象出一个创建者:

创建具体建造者

创建指挥者

从这个例子我可以看出,建造者模式包含如下角色:Builder:抽象建造者(Builder)(引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。)

ConcreteBuilder:具体建造者(CommonBuilder、SuperBuilder)(实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。)

Director:指挥者(Director)(负责调用适当的建造者来组建产品,指挥者类一般不与产品类发生依赖关系,与指挥者类直接交互的是建造者类。一般来说,指挥者类被用来封装程序中易变的部分。)

Product:产品角色(Role)

建造者模式

造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。也可以说,每个产品的建造会遵循同样的流程,不过流程内的每一个步骤都不尽相同。

建造者模式又可以称为生成器模式。

建造者模式在软件中的应用django-widgy是一个 Django的第三方树编辑器扩展,可用作内容管理系统(Content Management System,CMS)。它包含一个网页构建器,用来创建具有不同布局的HTML页面。

django-query-builder是另一个基于建造者模式的Django第三方扩展库,该扩展库可用于动态 地构建SQL查询。使用它,我们能够控制一个查询的方方面面,并能创建不同种类的查询,从简 单的到非常复杂的都可以

建造者模式和工厂模式的区别

看上边这个例子,你可能会疑惑,为什么明明可以使用工厂方法模式可以解决的问题,要换成建造者模式呢?

通过代码可以看出,建造者模式和工厂方法模式最大的区别是,建造者模式多了一个指挥者的角色。建造者负责创建复杂对象的各个组成部分。而指挥者使用一个建造者实例控制建造的过程。

与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——指挥者类。

建造者模式通常用于补充工厂模式的不足,尤其是在如下场景中:要求一个对象有不同的表现,并且希望将对象的构造与表现解耦

要求在某个时间点创建对象,但在稍后的时间点再访问

你可能感兴趣的:(python工厂模式,django)