您的位置:首页 > 其它

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 构建者