文章目录
一、建造者模式简介
二、建造者模式适用场景
三、建造者模式优缺点
四、建造者模式与工厂模式
五、建造者模式代码示例
1、学生类
2、建造者抽象类
3、建造者实现类
4、教师类 ( 非必须 )
5、测试类
六、实例类和建造者类定义在同一个类中 ( 建造者模式常用用法 )
1、实例类 + 建造者类
2、测试类
一、建造者模式简介
建造者模式 : 将 一个复杂对象 的 构建过程 与其 表示 分离 , 使得 同样的构建过程 , 可以 创建不同的表示 ;
用户只需要 指定 需要建造的类型 就可以 得到该类型对应的产品实例 , 不关心建造过程细节 ;
建造者模式就是 如何逐步构建包含多个组件的对象 , 相同的构建过程 , 可以创建不同的产品 ,
建造者模式类型 : 创建型 ;
二、建造者模式适用场景
建造者模式适用场景 :
结构复杂 : 对象 有 非常复杂的内部结构 , 有很多属性 ;
分离创建和使用 : 想把 复杂对象 的 创建 和 使用 分离 ;
当创造一个对象 需要很多步骤时 , 适合使用建造者模式 ;
当创造一个对象 只需要一个简单的方法就可以完成 , 适合使用工厂模式 ;
三、建造者模式优缺点
建造者模式优点 :
封装性好 : 创建 和 使用 分离 ;
扩展性好 : 建造类之间 相互独立 , 在 一定程度上解耦 ;
建造者模式缺点 :
增加类数量 : 产生多余的 Builder 对象 ;
内部修改困难 : 如果 产品内部发生变化 , 建造者也要相应修改 ;
四、建造者模式与工厂模式
建造者模式 与 工厂模式 :
注重点不同 : 建造者模式 更注重于 方法的调用顺序 ; 工厂模式 注重于 创建产品 , 不关心方法调用的顺序 ;
创建对象力度不同 : 创建对象的力度不同 , 建造者模式可以创建复杂的产品 , 由各种复杂的部件组成 , 工厂模式创建出来的都是相同的实例对象 ,
五、建造者模式代码示例
1、学生类
package builder; /** * 学生类 */ public class Student { private String name; private String age; private String number; private String address; private String school; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", number='" + number + '\'' + ", address='" + address + '\'' + ", school='" + school + '\'' + '}'; } }
2、建造者抽象类
package builder; /** * 抽象建造者 */ public abstract class StudentBuilder { public abstract void buildName(String name); public abstract void buildAge(String age); public abstract void buildNumber(String number); public abstract void buildAddress(String address); public abstract void buildSchool(String school); public abstract Student makeCourse(); }
3、建造者实现类
package builder; /** * 建造者实现类 */ public class StudentBuilderImpl extends StudentBuilder { private Student student = new Student(); @Override public void buildName(String name) { this.student.setName(name); } @Override public void buildAge(String age) { this.student.setAge(age); } @Override public void buildNumber(String number) { this.student.setNumber(number); } @Override public void buildAddress(String address) { this.student.setAddress(address); } @Override public void buildSchool(String school) { this.student.setSchool(school); } @Override public Student makeCourse() { return this.student; } }