建造者模式

参考 1设计模式之蝉

         2 点击打开链接

定义:将一个复杂对象的构建与它的表示分离,使得同样的创建过程可以创建不同的表示。

角色:

Product:产品类 通常实现了模板方法模式,有模板方法和基本方法,(也可以是普通的继承关系的)。

Builder:抽象建造者 规范产品的组建,一般是由子类实现。

ConcreteBuilder:具体建造者 实现抽象类的方法,并且返回一个组建好的对象。

Director:负责安排已有模块的顺序,然后告诉builder开始构建。


优点:

1.封装性 使用建造者模式 可以使客户端不必知道 产品内部组成的细节。

2.建造者独立 容易扩展

3.便于控制细节风险 由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不影响其他模块。


使用场景:

1.相同的方法,不同的执行顺序,产生不同的结果(模板方法模式),可以采用建造者模式

2.多个部件或零件,都可以装配到一个对象中,产生的运行结果不相同时,可以采用建造者模式

3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,可以采用建造者模式


与工厂模式的区别:建造者模式最主要的是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗的说是零件的装配,工厂方法重点是创建,创建零件是它的职责,组装顺序不是它关心的。


/**
 * 
 * @author lm
 *Product 产品类 产品抽象类
 */
public abstract class Mobile {
	public int mColorId ;
	public int mModel ;
	public int mMemory;
	
	public abstract void setColor(int ColorID);
	
	public abstract void setModel(int model);
	
	public abstract void setMemory(int memory);

}
</pre><pre name="code" class="java"><pre name="code" class="java">public class LaMobile extends Mobile {

	public void setColor(int ColorID) {
		mColorId = ColorID;

	}

	public void setModel(int model) {
		
		mModel = model;

	}

	public void setMemory(int memory) {
		mMemory = memory;

	}

}

/**
 * Builder抽象建造者
 * @author lm
 *
 */
public abstract class MobileBuilder {
	
	public abstract void setColor(int ColorID);
	
	public abstract void setModel(int model);
	
	public abstract void setMemory(int memory);
	
	public abstract Mobile createMobile();

}

/**
 * 具体建造者
 * @author lm
 *
 */
public class LaMobileBuilder extends MobileBuilder {

	LaMobile laMobile = new LaMobile();
	public void setColor(int ColorID) {
		laMobile.setColor(ColorID);

	}

	public void setModel(int model) {
		laMobile.setModel(model);

	}

	public void setMemory(int memory) {
		laMobile.setMemory(memory);
	}

	public Mobile createMobile() {
		
		return laMobile;
	}

	
}

public class Director {
	MobileBuilder mBuilder ;
	
	public Director(MobileBuilder builder){
		mBuilder = builder;
	}
	public void construct(int colorId ,int model , int memory){
		mBuilder.setColor(colorId);
		mBuilder.setModel(model);
		mBuilder.setMemory(memory);
	} 

}

public class Test {
	public static void main(String args[]){
		
		MobileBuilder builder = new LaMobileBuilder();
		Director director = new Director(builder);
		director.construct(0, 12, 1024);
		Mobile mobile = builder.createMobile();
		
	}

}


 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值