动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

30天自动登录
微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

Java生成器模式

03-29 17:05 422浏览
举报 T字号
  • 大字
  • 中字
  • 小字

介绍:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

场景:我们在创建对象时可能会碰到过一个问题,比如,如果需要赋值的属性过多,构造函数会很多,而且有的会很长。通过JavaBean的方式可能不需要担心构造函数,但是,我们的set部分又会很长很难看,这里推荐大家试试builder模式

1.角色及作用

角色 作用
产品(Product) 目标创建的复杂对象
抽象生成器(Builder) 提供创建一个Product对象的各个组件的方法及返回Product对象的方法
具体生成器(ConcreteBuilder) 实现Buidler接口的类。
管理者(Director) 用于管理builder对象的工作

2.场景

玩过《我的世界》这类沙盒游戏的玩家,很多都是冲着其开放式的制作功能去的。比如,我们要建造一个房子就需要以下:墙,屋顶,门,床。但是这些东西的制作也十分麻烦。如果每次都让客户端来创建会需要很多代码

内部组件

// 床
public class Bed {
    public Bed(String s) {
        System.out.println(s);
    }
}
// 门
public class Door {
    public Door(String s) {
        System.out.println(s);
    }
}
// 屋顶
public class Roof {
    public Roof(String s) {
        System.out.println(s);
    }
}
// 墙
public class Wall {
    public Wall(String s) {
        System.out.println(s);
    }
}

(1)使用构造函数的方式

public class House {
    public Bed bed;
    public Door door;
    public Roof roof;
    public Wall wall;

    public House(Bed bed){
        this.bed = bed;
    }

    public House(Bed bed,Door door){
        this.bed = bed;
        this.door = door;
    }

    // ......省略各种组合的构造函数

}

可见,这种方式会使此类中存在很多构造方法,而且不能满足所有的组合,客户端在制作房屋的时候,比较不适用。

(2)使用setter方式

public class House {
    public Bed bed;
    public Door door;
    public Roof roof;
    public Wall wall;

    // setter and getter
}

典型的java bean 的形式,解决上面构造函数的不足,但是让我们来看看使用。

House house = new House();
house.setBed(1);// ......省略其它set方法

如果我们的私有属性增加到二十,那么我们每次创建的时候就需要写二十行setter代码,上面这两种方法,在每次创建房屋的时候,客户端还需要每次去创建各种类型的对象,会产生很多重复代码。

0人推荐
共同学习,写下你的评论
0条评论
我是码农
程序员我是码农

25篇文章贡献87343字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

代码小兵66904-21 20:01

6道经典算法面试题

杨晶珍05-12 16:39

简述Spring MVC的核心组件

代码小兵49806-11 16:26

SpringMVC 中的组件

代码小兵49806-11 16:28

Spring常见面试题

代码小兵92504-17 16:07

发评论

举报

0/150

取消