一、建造者模式的基本实现
建造者模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表示
下面将以画人的形式展现建造者模式的基本实现
abstract class PersonBuilder{
protected Graphics g;//以java写的不含有Graphics和Pen,为了方便理解特别使用,可使用基本类型或引用类型代替
protected Pen p;
public PersonBuilder(Graphics g,Pen p) {
this.g=g;
this.p=p;
}
//人一定要有头、身子、胳膊、腿的基本元素
//抽象类将这些元素固定,防止了必要元素的缺失
public abstract void BuildHead();
public abstract void BuildBody();
public abstract void BuildArmLeft();
public abstract void BuildArmRigth();
public abstract void BuildLegLeft();
public abstract void BuildLegRigth();
}
class PersonThinBuilder extends PersonBuilder{
public PersonThinBuilder(Graphics g,Pen p) {
super(g,p);
}
@Override
public void BuildHead() {
// TODO Auto-generated method stub
System.out.println("画头");
}
@Override
public void BuildBody() {
// TODO Auto-generated method stub
System.out.println("画身");
}
@Override
public void BuildArmLeft() {
// TODO Auto-generated method stub
System.out.println("左胳膊");
}
@Override
public void BuildArmRigth() {
// TODO Auto-generated method stub
System.out.println("右胳膊");
}
@Override
public void BuildLegLeft() {
// TODO Auto-generated method stub
System.out.println("左腿");
}
@Override
public void BuildLegRigth() {
// TODO Auto-generated method stub
System.out.println("右腿");
}
}
//建造者模式中的指挥者
class PersonDirector{
private PersonBuilder pd;
public PersonDirector(PersonBuilder pd) {//用户告诉指挥者,需要什么样的小人
this.pd=pd;
}
public void CreatPerson() {//根据用户需要建造小人
pd.BuildArmLeft();
pd.BuildArmRigth();
pd.BuildBody();
pd.BuildHead();
pd.BuildLegLeft();
pd.BuildLegRigth();
}
}
基本实现理解起来可能不是特别顺利,因为java写的源码,对于画图的使用无法实现,可以通过二对建造者模式进行更好的理解。
二、建造者模式的基本代码
建造者模式是在当创建复杂对象的算法应该独立与该对象的组成部分以及它们的装配方式时适用的模式
//Product——产品类,有多个部件组成
class Product{
java.util.List<String> parts=new ArrayList<String>();
public void Add(String part) {
parts.add(part);
}
public void Show() {
for(String part:parts) {//列举所有产品部件
System.out.println(part);
}
}
}
//Builder类——抽象建造者类,确定产品的两个PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult
abstract class Builder{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetRusult();
}
//ConcreteBuilder1类——具体建造者类
class ConcreteBuilder1 extends Builder{
private Product product=new Product();
@Override
public void BuildPartA() {
// TODO Auto-generated method stub
product.Add("部件A");
}
@Override
public void BuildPartB() {
// TODO Auto-generated method stub
product.Add("部件B");
}
@Override
public Product GetRusult() {
// TODO Auto-generated method stub
return product;
}
}
//ConcreteBuilder2——具体建造者类
class ConcreteBuilder2 extends Builder{
private Product product=new Product();
@Override
public void BuildPartA() {
// TODO Auto-generated method stub
product.Add("部件X");
}
@Override
public void BuildPartB() {
// TODO Auto-generated method stub
product.Add("部件Y");
}
@Override
public Product GetRusult() {
// TODO Auto-generated method stub
return product;
}
}
//Director——指挥者类
class Director{
public void Construct(Builder builder) {
builder.BuildPartA();
builder.BuildPartB();
}
}
public class jzz {
public static void main(String[] args) {
// TODO Auto-generated method stub
Director director=new Director();
Builder b1=new ConcreteBuilder1();
Builder b2=new ConcreteBuilder2();
director.Construct(b1);//指挥者用ConcreteBuilder1的方法建造产品
Product p1=b1.GetRusult();
p1.Show();
director.Construct(b2);//指挥者用ConcreteBuilder1的方法建造产品
Product p2=b2.GetRusult();
p2.Show();
}
}
//建造者模式是在当创建复杂对象的算法应该独立与该对象的组成部分以及它们的装配方式时适用的模式