1.前言
1.1 定义
首先介绍下什么是建造者模式.通过网络查询,得知:将一个复杂对象的表示和构建过程分开,使得同样的表示过程可以创建不同的表示.
下面介绍下我个人对它的的理解.分别进行介绍.
将一个复杂对象的表示:通过面向对象的编程方式,让我们知道任何对象都可以用一个类虚拟表示.比如一个人,一关管家,一个国家,一个地球.或者别的更为复杂的对象,我们都可以通过写一个类来对其进行表示.
构建过程分开:作为对比,介绍下什么叫构建构成不分开,我们已经有了一个类,我们打算构建一个这样的对象.以前,我们知道,构建一个类需要对象提供构造函数,需要构建的时候我们new 对象,调用其构造函数并并赋予初值,那么,返回的对象就是我们希望得到的对象实例.那么我们可以说.这个过程,这个对象的表示和构建是没有分开的.那么构建过程分开,是指:当我new这个对象的时候(这个new的过程仅仅是获取一个对象的表示,因为它没有被赋值),不给其赋初值,把构建过程给"别的类"来做的.而这个过程,我们可以说表示和构建过程是分开的.
使得同样的表示过程可以创建不同的表示:在"构建过程分开"中我们说了,在建造者模式中,我们会把类的表示和构建过程分开,在"别的类"对该类进行构建.那么,在这个过程中,这个别的类是可以定制化的,通过创建不同的"别的类",来达到创建不同的类的的标示.
2.框架
3.案例实现
3.案例实现
这个通过通过建造者模式构建一个学校.学校里面有老师,学生,教学楼,后勤服务,等等.
1. 建造者的抽象类
抽象类的目的是提供构建方法的声明
package com.example.designmode;
abstract class Builder {
public abstract void buildTeacher();
public abstract void buildStudent();
public abstract void buildBuilding();
public abstract void buildRearServices();
public abstract Object getObject();
}
2. 产品类
产品类的标示,也是我们最终需要的类:
package com.example.designmode;
import java.util.ArrayList;
import java.util.List;
public class School {
private List<String> mList = new ArrayList<String>();
public void add(String str){
mList.add(str);
}
public List<String> getList(){
return mList;
}
}
3. 建造者的实现类
基于抽象类的实现.主要是实现了抽象类的接口:
package com.example.designmode;
public class ConcreteBuilder extends Builder {
public School mSchool = new School();
@Override
public void buildRearServices() {
mSchool.add("Rear services");
}
@Override
public void buildBuilding() {
mSchool.add("Buildings");
}
@Override
public void buildStudent() {
mSchool.add("Students");
}
@Override
public void buildTeacher() {
mSchool.add("Two teachers");
}
@Override
public School getObject() {
return mSchool;
}
}
}
4. 建造者的管家类
这个类非常重要:它是建造者模式的核心,它通过类的方法,构建出一个产品.用户可以直接调用它,从而获得一个产品
package com.example.designmode;
public class Director {
public Object createSchool(Builder builder){
builder.buildBuilding();
builder.buildRearServices();
builder.buildStudent();
builder.buildTeacher();
return builder.getObject();
}
}
5. 具体调用类
使用管家类,获得一个产品.
在这里我们可以看出:仅仅看这个地方,我们是不知道构建的过程的.
package com.example.designmode;
import java.util.Iterator;
public class myClass {
public static void main(String[] args){
ConcreteBuilder mConcreateBuilder = new ConcreteBuilder();
Director mDirector = new Director();
School mSchool = (School)mDirector.createSchool(mConcreateBuilder);
if (mSchool != null) {
Iterator mIterator = mSchool.getList().iterator();
while (mIterator.hasNext()) {
System.out.println(" School has :"+mIterator.next());
}
}
}
}
输出:
School has :Buildings
School has :Rear services
School has :Students
School has :Two teachers
Process finished with exit code 0