Java设计模式(三)——生成器模式

阅读: 评论:0

Java设计模式(三)——生成器模式

Java设计模式(三)——生成器模式

        生成器模式是指将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。适合该模式的情景如下:对象结构复杂,利用构造方法创建对象无法满足用户需求,对象创建过程必须独立于创建该对象的类。

        在类的应用中,有些类是容易创建对象的,直接调用构造方法即可,如:

Student student = new Student("1001","张印","20")

然而有的类却是不宜直接创建对象的,成员变量是自定义类型,如:

public class Product {Unit u;Unit2 u2;Unit3 u3;
}

可知,Product由Unit、Unit2、Unit3三个单元组成,所以Product对象的产生不能简单地由

Product product = new Product(Unit,Unit2,Unit3)

获得,必须先产生具体的对象 u,u2,u3,然后才能获得Product对象。这就需要用到生成器模式

生成器模式

        生成器模式也成为建造者模式,生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。在软件设计中,有时候面临一个非常复杂的对象的创建工作。这个发杂的对象通常可以分成几个较小的部分,由各个子对象组合出这个复杂对象的过程相对来说比较稳定,但是子对象的创建过程各不相同并且可能面临变化,根据OOD(面向对象设计)的OCP(开闭)原则,应该对这些子对象的二创建过程进行变化封装。

生成器模式编程步骤

(1)定义一个产品类

因为不在该Product类中创建对象,所以不必定义构造方法。

public class Unit {
}
public class Unit2 {
}
public class Unit3 {
}public class Product {Unit u;Unit2 u2;Unit3 u3;
}

(2)定义n个生成器Build类

生成器是用来生成Product对象的,Product是生成器类的一个成员变量。每创建一个对象,本质上都需要先创建Unit1、Unit2、...、UnitN,然后再把它们组合成所需的Product对象,因此需要n个createUnit()方法以及一个而组合方法composite()。

定义生成器类接口: 

public interface IBuild {public void createUnit();public void createUnit2();public void createUnit3();public Product composite();
}

定义三个生成器类:

如果需求发生变化,只需增加或删除相应的生成器类即可,不需要求改已有的类的代码。

第一个

public class BuildProduct implements IBuild{//product是成员变量Product product = new Product();//定义product的三个属性@Overridepublic void createUnit() {//product.u = ...;}@Overridepublic void createUnit2() {//product.u2 = ...;}@Overridepublic void createUnit3() {//product.u3 = ...;}@Overridepublic Product composite() {//...  关联Unit Unit2 Unit3return product;   //返回product对象}
}

第二个

public class BuildProduct2 implements IBuild{//product是成员变量Product product = new Product();//定义product的三个属性@Overridepublic void createUnit() {//product.u = ...;}@Overridepublic void createUnit2() {//product.u2 = ...;}@Overridepublic void createUnit3() {//product.u3 = ...;}@Overridepublic Product composite() {//...  关联Unit Unit2 Unit3return product;   //返回product对象}
}

第三个

public class BuildProduct3 implements IBuild{//product是成员变量Product product = new Product();//定义product的三个属性@Overridepublic void createUnit() {//product.u = ...;}@Overridepublic void createUnit2() {//product.u2 = ...;}@Overridepublic void createUnit3() {//product.u3 = ...;}@Overridepublic Product composite() {//...  关联Unit Unit2 Unit3return product;   //返回product对象}
}

(3)定义一个统一调度类(非必须)

也叫指挥类,是对生成器接口IBuild的封装。

public class Director {//定义一个build属性private IBuild build;//需要传入一个IBuild对象 下面测试的时候传入了 BuildProductpublic Director(IBuild build) {this.build = build;}//这个指挥类有一个build方法,在该方法中调用IBuild接口的所有方法 生成Productpublic Product build() {ateUnit();ateUnit2();ateUnit3();return buildposite();}public static void main(String[] args) {IBuild build = new BuildProduct();Director director = new Director(build);Product product = director.build();System.out.println(product);}
}

本文发布于:2024-01-31 05:16:52,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664941725830.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式   生成器   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23