3 设计模式之构建者模式(三)

来源:互联网 发布:什么是网络贷款诈骗 编辑:程序博客网 时间:2024/06/07 04:01

在应用中我们通常会创建一些类型相同的对象,但是这些对象又有不同的内部表示,不过构造这些对象的方法或者顺序都是一致的,只不过具体的内部表示不一样而已,这个时候我们就可以使用所谓的构建者模式,它专门会构造这种类型的对象提供了便于扩展的解决方案,它把对象的构建与表示分离,使得相同的构造过程可以表示不同的对象。下面是构建者模式客户端的组装代码:

public class PersonBuilderClient {private String TAG = "PersonBuilderClient";@Testpublic 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();}@Overridepublic void createHead() {}@Overridepublic void createBody() {}@Overridepublic void createHand() {createHandLeft();createHandRight();}@Overridepublic void createLeg() {createLegLeft();createLegRight();}@Overridepublic Person getPerson() {return person;}}



0 0
原创粉丝点击