设计模式之四:建造者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/woxueplc/article/details/82052773

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

猜你喜欢

转载自blog.csdn.net/woxueplc/article/details/82052773