聊聊创建者’'三模式,创建者三模式指,工厂方法,抽象工厂,创建者。
工厂方法,创建一个对象。
抽象工厂,创建一组相关对象。
创建者,按照固定的步骤创建对象。
一 先说说工厂方法和抽象工厂
差别就是,一个给客户端一个对象,一个是一系列对象。
那么这一系列的对象也是为了创建对象。
这时候我们可以将两种模式联合使用。
抽象工厂,创建一系列的小部件。
工厂方法讲部件组合,创建一个产品,提供给客户端。
因为,部件最终是组装成产品的,
抽象工厂加工的一系列部件一定是要进一步使用的。
交给工厂组合,交给创建者组合都是可以的。
那么怎么组合呢?
当然,要桥接。
工厂方法或创建者桥接抽象工厂。
他们俩在被客户端桥接或使用。
这就形成了二级可变的设计。
二 在说
刚才说到,创建者。
下面说说,创建者和抽象工厂。
他们刚才发生了合作的桥接关系,
下面把他俩的位置放平,
说说他俩的对比关系。
共性,就是都有一组函数约定。
差别在于,创建者这组函数运行的最终结果,会完成产品的创建。
而抽象工厂没有,他只是完成了一系列部件的创建。
组合工作需要有其他人来完成。
如果一系列产品的某个,产品创建过程有固定的步骤。
也可以交给创建者模式去做。
创建者和抽象工厂的,共同特点是一组函数。
那么这组函数有啥不同呢?
抽象工厂的函数是平行关系,
即,一系列的创建函数没有相互依赖。
而创建者的一系列对象有相互依赖。
创建者一般也可以把一个产品的个步骤分派给个创建函数。
但他必须同时完成组装。
这样看来创建者做了两家事,创建+组装。
那么抽象工厂能不能也干两家事呢,
能,怎么办呢,得变一下。
虽然不大,但不能叫抽象工厂了。
得在加一个模板模式。
模式编程这样。
抽象工厂家一个对外提供组合完一系列产品后形成的最终产品的接口。
那部件接口还需要提供吗,不需要了。
这里在加一个组合都的总产品作为成员。
个个部件创建完了,就直接给总产品组装上。
一系列的接口调用完了。
总产品也组装完了,
这是你会发现,这时的抽象工厂,干了两件事。
是不是就变成,创建者模式了。
用我的思维方式,我觉得可以。
但还有一点差别,哪呢?
创建者是有一个导演类的,
这里没有了导演类,怎么做到的呢?
当然是有人兼职做了导演类,
对,刚才给抽象工厂家的那个模板模式就是抽象工厂兼职做了导演类的活。
这就是我刚才为什么说,我认为可以叫创建者模式的原因。
我用了我认为可以是因为,他,变更后的抽象工厂。
确实具备了创建者模式的机能。
强调个人是因为不完全一样,差别我上面也说了。
这里在表达一下自己的观点。
在实际开发中没有必要一定要加个导演类的。
当然导演作为一个中层的引用,起到了,
统一共性,隔离变化的作业。
但放到父类也是可以的,
起码有一个优点,个个创建函数不需要用总产品做参数。
但缺点,这里主要关乎一个设计原则。
就是组合聚会原则。
我用抽象工厂改造的创建者,是相当于导演和创建者编程了继承关系。
标准的创建者是组合。
哦,说多了
我这里的目的是强调两种模式的关系,方便大家理解记忆。
创建者模式是抽象工厂的升降。
创建者模式=抽象工厂+模板
三 他俩与模板。
说到模板,我一直认为模板和桥接是两个最基本的设计元素。
创建者和抽象工厂明显都用到了模板的思想。
因为都有对一系列接口的约定。
而这正式模板的价值。
抽象工厂因为没有一个统一的函数调用他们。
但是整个抽象接口的定义。
就已经把这组对象模板化了。
将来一定是有一个函数统一处理这一系列构建的对象的。
这就相当于模板的主函数了。
所以我认为,以上两种模式都是以模板的思想为基础的模式。
聊聊“创建者三模式”(工厂方法,创建者,抽象工厂)
最新推荐文章于 2024-04-30 20:24:36 发布