自己怎么在网上做网站,网站建设前期策划,11月70款国产网络游戏获批,绿色在线网站模板概述 建造者模式是较为复杂的创建型模式#xff0c;它将客户端与包含多个组成部分#xff08;或部件#xff09;的复杂对象的创建过程分离#xff0c;客户端无须知道复杂对象的内部组成部分与装配方式#xff0c;只需要知道所需建造者的类型即可。它关注如何一步一步创建一…概述 建造者模式是较为复杂的创建型模式它将客户端与包含多个组成部分或部件的复杂对象的创建过程分离客户端无须知道复杂对象的内部组成部分与装配方式只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象不同的具体建造者定义了不同的创建过程且具体建造者相互独立增加新的建造者非常方便无须修改已有代码系统具有较好的扩展性。建造者模式定义如下建造者模式(Builder Pattern)将一个复杂对象的构建与它的表示分离使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。 建造者模式一步一步创建一个复杂的对象它允许用户只通过指定复杂对象的类型和内容就可以构建它们用户不需要知道内部的具体构建细节。建造者模式结构如图所示 在建造者模式结构图中包含如下几个角色
● Builder抽象建造者它为创建一个产品Product对象的各个部件指定抽象接口在该接口中一般声明两类方法一类方法是buildPartX()它们用于创建复杂对象的各个部件另一类方法是getResult()它们用于返回复杂对象。Builder既可以是抽象类也可以是接口。
●ConcreteBuilder具体建造者它实现了Builder接口实现各个部件的具体构造和装配方法定义并明确它所创建的复杂对象也可以提供一个方法返回创建好的复杂产品对象。
●Product产品角色它是被构建的复杂对象包含多个组成部件具体建造者创建该产品的内部表示并定义它的装配过程。
● Director指挥者指挥者又称为导演类它负责安排复杂对象的建造次序指挥者与抽象建造者之间存在关联关系可以在其construct()建造方法中调用建造者对象的部件构造与装配方法完成复杂对象的建造。客户端一般只需要与指挥者进行交互在客户端确定具体建造者的类型并实例化具体建造者对象也可以通过配置文件和反射机制然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。
简单实现
常规实现 编写测试代码并运行 上面示例是建造者模式的常规用法指挥者类ComputerDirector在建造者模式中具有很重要的作用它用于指导具体构建者如何构建产品控制调用先后次序并向调用者返回完整的产品类但是有些情况下需要简化系统结构可以把指挥者类和抽象建造者进行结合于是就有了下面的简化写法。
简化实现 编写测试代码并运行 可以看到对比常规写法这样写确实简化了系统结构但同时也加重了建造者类的职责也不是太符合单一职责原则如果construct() 过于复杂建议还是封装到 Director 中。 链式实现 可以看到其实链式写法与普通写法的区别并不大只是在建造者类组装部件的时候同时将建造者类返回即可使用链式写法使用起来更方便某种程度上也可以提高开发效率。从软件设计上对程序员的要求比较高。比较常见的mybatis-plus中的条件构造器就是使用的这种链式写法。
钩子方法 建造者模式除了逐步构建一个复杂产品对象外还可以通过Director类来更加精细地控制产品的创建过程例如增加一类称之为钩子方法(HookMethod)的特殊方法来控制是否对某个buildPartX()的调用。 钩子方法的返回类型通常为boolean类型方法名一般为isXXX()钩子方法定义在抽象建造者类中。例如我们可以在组装电脑的的抽象建造者类ComputerBuilder中定义一个方法isGpu()用于判断某个电脑是否需要组装Gpu在ComputerBuilder为之提供一个默认实现其返回值为false代码如下所示 如果某个电脑无需组装Gpu则对应的具体建造者将覆盖isGpu()方法并设置值为true代码如下 此时。指挥者类ComputerDirector代码修改如下 运行如下 上图可以看出Gpu是null没有组装上去通过引入钩子方法我们可以在Director中对复杂产品的构建进行精细的控制不仅指定buildPartX()方法的执行顺序还可以控制是否需要执行某个buildPartX()方法。
总结 建造者模式与抽象工厂模式有点相似但是建造者模式返回一个完整的复杂产品而抽象工厂模式返回一系列相关的产品在抽象工厂模式中客户端通过选择具体工厂来生成所需对象而在建造者模式中客户端通过指定具体建造者类型并指导Director类如何去生成对象侧重于一步步构造一个复杂对象然后将结果返回。如果将抽象工厂模式看成一个汽车配件生产厂生成不同类型的汽车配件那么建造者模式就是一个汽车组装厂通过对配件进行组装返回一辆完整的汽车。建造者模式的核心在于如何一步步构建一个包含多个组成部件的完整对象使用相同的构建过程构建不同的产品在软件开发中如果我们需要创建复杂对象并希望系统具备很好的灵活性和可扩展性可以考虑使用建造者模式。
1.主要优点
建造者模式的主要优点如下
(1) 在建造者模式中客户端不必知道产品内部组成的细节将产品本身与产品的创建过程解耦使得相同的创建过程可以创建不同的产品对象。
(2) 每一个具体建造者都相对独立而与其他的具体建造者无关因此可以很方便地替换具体建造者或增加新的具体建造者用户使用不同的具体建造者即可得到不同的产品对象。由于指挥者类针对抽象建造者编程增加新的具体建造者无须修改原有类库的代码系统扩展方便符合“开闭原则”
(3) 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中使得创建过程更加清晰也更方便使用程序来控制创建过程。
2.主要缺点
建造者模式的主要缺点如下
(1) 建造者模式所创建的产品一般具有较多的共同点其组成部分相似如果产品之间的差异性很大例如很多组成部分都不相同不适合使用建造者模式因此其使用范围受到一定的限制。
(2) 如果产品的内部变化复杂可能会导致需要定义很多具体建造者类来实现这种变化导致系统变得很庞大增加系统的理解难度和运行成本。
3.适用场景
在以下情况下可以考虑使用建造者模式
(1) 需要生成的产品对象有复杂的内部结构这些产品对象通常包含多个成员属性。
(2) 需要生成的产品对象的属性相互依赖需要指定其生成顺序。
(3) 对象的创建过程独立于创建该对象的类。在建造者模式中通过引入了指挥者类将创建过程封装在指挥者类中而不在建造者类和客户类中。
(4) 隔离复杂对象的创建和使用并使得相同的创建过程可以创建不同的产品。