3 设计模式之构建者模式(三)
2015-05-23 10:46
225 查看
在应用中我们通常会创建一些类型相同的对象,但是这些对象又有不同的内部表示,不过构造这些对象的方法或者顺序都是一致的,只不过具体的内部表示不一样而已,这个时候我们就可以使用所谓的构建者模式,它专门会构造这种类型的对象提供了便于扩展的解决方案,它把对象的构建与表示分离,使得相同的构造过程可以表示不同的对象。下面是构建者模式客户端的组装代码:
public class PersonBuilderClient {
private String TAG = "PersonBuilderClient";
@Test
public void test() {
PersonDirector personDirector = new PersonDirector();
PersonThinBuilder personThinBuilder = new PersonThinBuilder();
personDirector.builderPerson(personThinBuilder);
Person personThin = personThinBuilder.getPerson();
System.out.println(TAG + " personThin = " + personThin);
PersonFatBuilder personFatBuilder = new PersonFatBuilder();
personDirector.builderPerson(personFatBuilder);
Person personFat = personFatBuilder.getPerson();
System.out.println(TAG + " peronFat = " + personFat);
}
}下面是相关的接口与实现类:
1 PersonDirector.java
它根据提供的PersonBuilderImpl(其实它真正的对象是实现该抽象类的不同对象)来构造不同的Person,它虽然调用相同的构造代码(相同的构造过程),但是它会根据不同的PersonBuilderImpl构造出不同的Person对象(),
package com.ops.builder.base;
import com.ops.builder.PersonBuilderImpl;
public class PersonDirector {
private PersonBuilderImpl pbImpl = null;
public PersonDirector() {
}
public void builderPerson(PersonBuilderImpl pb) {
this.pbImpl = pb;
this.pbImpl.createHead();
this.pbImpl.createBody();
this.pbImpl.createHand();
this.pbImpl.createLeg();
}
}
2 PersonBuilder.java、PersonBuilderImpl.java
根据Person需要的方法接口,由于构造过程中需要构造左右手、左右腿,所以我把他们放在一个PersonBuilderImpl抽象类中了,具体的Builder类则需要继续于PersonBuilderImpl抽象类,例如这里的PersonFatBuilder、PersonThinBuilder,它就是具体的构造类了,这里我就不粘出它的代码了。这里只给出接口及抽象类的代码,具体的代码请到后面的文章获取整个代码工程,下面是接口与抽象类代码:
package com.ops.builder;
public interface PersonBuilder {
public void createHead();
public void createBody();
public void createHand();
public void createLeg();
public Person getPerson();
}
package com.ops.builder;
public abstract class PersonBuilderImpl implements PersonBuilder{
protected Person person = null;
abstract public void createHandLeft();
abstract public void createHandRight();
abstract public void createLegLeft();
abstract public void createLegRight();
public PersonBuilderImpl() {
this.person = new Person();
}
@Override
public void createHead() {
}
@Override
public void createBody() {
}
@Override
public void createHand() {
createHandLeft();
createHandRight();
}
@Override
public void createLeg() {
createLegLeft();
createLegRight();
}
@Override
public Person getPerson() {
return person;
}
}
public class PersonBuilderClient {
private String TAG = "PersonBuilderClient";
@Test
public void test() {
PersonDirector personDirector = new PersonDirector();
PersonThinBuilder personThinBuilder = new PersonThinBuilder();
personDirector.builderPerson(personThinBuilder);
Person personThin = personThinBuilder.getPerson();
System.out.println(TAG + " personThin = " + personThin);
PersonFatBuilder personFatBuilder = new PersonFatBuilder();
personDirector.builderPerson(personFatBuilder);
Person personFat = personFatBuilder.getPerson();
System.out.println(TAG + " peronFat = " + personFat);
}
}下面是相关的接口与实现类:
1 PersonDirector.java
它根据提供的PersonBuilderImpl(其实它真正的对象是实现该抽象类的不同对象)来构造不同的Person,它虽然调用相同的构造代码(相同的构造过程),但是它会根据不同的PersonBuilderImpl构造出不同的Person对象(),
package com.ops.builder.base;
import com.ops.builder.PersonBuilderImpl;
public class PersonDirector {
private PersonBuilderImpl pbImpl = null;
public PersonDirector() {
}
public void builderPerson(PersonBuilderImpl pb) {
this.pbImpl = pb;
this.pbImpl.createHead();
this.pbImpl.createBody();
this.pbImpl.createHand();
this.pbImpl.createLeg();
}
}
2 PersonBuilder.java、PersonBuilderImpl.java
根据Person需要的方法接口,由于构造过程中需要构造左右手、左右腿,所以我把他们放在一个PersonBuilderImpl抽象类中了,具体的Builder类则需要继续于PersonBuilderImpl抽象类,例如这里的PersonFatBuilder、PersonThinBuilder,它就是具体的构造类了,这里我就不粘出它的代码了。这里只给出接口及抽象类的代码,具体的代码请到后面的文章获取整个代码工程,下面是接口与抽象类代码:
package com.ops.builder;
public interface PersonBuilder {
public void createHead();
public void createBody();
public void createHand();
public void createLeg();
public Person getPerson();
}
package com.ops.builder;
public abstract class PersonBuilderImpl implements PersonBuilder{
protected Person person = null;
abstract public void createHandLeft();
abstract public void createHandRight();
abstract public void createLegLeft();
abstract public void createLegRight();
public PersonBuilderImpl() {
this.person = new Person();
}
@Override
public void createHead() {
}
@Override
public void createBody() {
}
@Override
public void createHand() {
createHandLeft();
createHandRight();
}
@Override
public void createLeg() {
createLegLeft();
createLegRight();
}
@Override
public Person getPerson() {
return person;
}
}
相关文章推荐
- JAVA设计模式之——构建者设计模式
- 设计模式之构建者模式(Builder):初步理解
- 23种设计模式之_构建者模式
- 设计模式系列:构建者模式
- 优雅设计封装基于Okhttp3的网络框架(五):多线程、单例模式优化 及 volatile、构建者模式使用解析
- 设计模式之构建者(Builder)模式
- 设计模式-创建型-构建者模式
- Retrofit框架设计-构建者+工厂模式高级应用
- 设计模式——__构建者模式 Builder模式
- 设计模式之构建者模式
- Retrofit框架设计-构建者+工厂模式高级应用
- 设计模式之05构建者模式(笔记)
- 设计模式4 - 构建者模式Builder Design Pattern
- Retrofit 框架设计+构建者+工厂模式高级应用
- 设计模式学习笔记--构建者模式
- 设计模式——构建者模式(Builder)
- PHP设计模式-建造者模式(构建者模式)
- 设计模式之构建者模式(Builder)
- 设计模式中的构建者Builder模式&c++
- 设计模式--构建者模式