(1)定义:
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
(2)适用范围
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同表示时。
Person.java
package com.zhoujian.buildermodel;
/**
* Created by zhoujian on 2016/12/8.
*/
public class Person
{
private String head;
private String body;
private String foot;
public String getBody()
{
return body;
}
public void setBody(String body)
{
this.body = body;
}
public String getFoot()
{
return foot;
}
public void setFoot(String foot)
{
this.foot = foot;
}
public String getHead() {
return head;
}
public void setHead(String head)
{
this.head = head;
}
}
Man.java和Woman.java
package com.zhoujian.buildermodel;
import android.util.Log;
/**
* Created by zhoujian on 2016/12/8.
*/
public class Man extends Person
{
private static final String TAG = "Man";
public Man()
{
Log.d(TAG, "开始建造男人");
}
}
package com.zhoujian.buildermodel;
import android.util.Log;
/**
* Created by zhoujian on 2016/12/8.
*/
public class Woman extends Person
{
private static final String TAG ="Woman";
public Woman()
{
Log.d(TAG, "开始建造女人");
}
}
PersonBuider.java
package com.zhoujian.buildermodel;
/**
* Created by zhoujian on 2016/12/8.
*/
public interface PersonBuider
{
void buliderHead();
void builderBody();
void bulderFoot();
Person builderPeson();
}
ManBuilder.java 和 WomanBuilder.java
package com.zhoujian.buildermodel;
/**
* Created by zhoujian on 2016/12/8.
*/
public class ManBuilder implements PersonBuider
{
private Person mPerson;
public ManBuilder()
{
mPerson = new Man();
}
@Override
public void buliderHead() {
mPerson.setBody("建造男人的头");
}
@Override
public void builderBody()
{
mPerson.setBody("建造男人的身体");
}
@Override
public void bulderFoot()
{
mPerson.setFoot("建造男人的脚");
}
@Override
public Person builderPeson() {
return mPerson;
}
}
package com.zhoujian.buildermodel;
/**
* Created by zhoujian on 2016/12/8.
*/
public class WomanBuilder implements PersonBuider
{
private Person mPerson;
public WomanBuilder()
{
mPerson = new Woman();
}
@Override
public void buliderHead() {
mPerson.setHead("建造女人的头");
}
@Override
public void builderBody()
{
mPerson.setBody("建造女人的身体");
}
@Override
public void bulderFoot() {
mPerson.setFoot("建造女人的脚");
}
@Override
public Person builderPeson() {
return mPerson;
}
}
PersonDirector.java
package com.zhoujian.buildermodel;
/**
* Created by zhoujian on 2016/12/8.
*/
public class PersonDirector
{
private Person mPerson;
public Person contructPerson(PersonBuider mPersonBuilder)
{
mPersonBuilder.buliderHead();
mPersonBuilder.builderBody();
mPersonBuilder.bulderFoot();
mPerson = mPersonBuilder.builderPeson();
return mPerson;
}
}
测试类MainActivity.java
package com.zhoujian.buildermodel;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private Person manPerson;
private Person womanPerson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PersonDirector mPersonDirector = new PersonDirector();
manPerson = mPersonDirector.contructPerson(new ManBuilder());
womanPerson = mPersonDirector.contructPerson(new WomanBuilder());
}
}