设计模式之创建者模式(Builder)

          创建者模式就是将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示,而且客户端不用知道对象的构建细节

 

我们先来了解一下为什么要用创建者模式:

      假如我们要组装一台摩托车,我们需要螺丝、螺母、轮胎、发动机等许多零件,这些零件有的有联系有的没联系,但最终都会组装到一台摩托车上,假如我们用工厂模式或抽象工厂模式来设计,那么很难进行工厂类的划分,即使我们划分好了工厂类,各个零件由工厂创建后,如果在客户端对这些零件进行组装,那么将会是客户端显得异常庞大,如果我们把组建的过程放在工厂类里完成,那么又违反了类的单一职责,这是我们就要用到我们的Builder模式了。

 

既然要生产一台摩托车,我们首先设计一个抽象的摩托车类:

package com.dxy.design.pattern.builder;

public interface MotorCycle {
	public void builder();
}


具体的摩托车类:

package com.dxy.design.pattern.builder;

public class MotorCycle1 implements MotorCycle{

	@Override
	public void builder() {
		System.out.println("组建开始");
	}
}


接着进行摩托车的零件类设计:

抽象的摩托车发动机类:

package com.dxy.design.pattern.builder;

public interface Engine {
	
	public void build();
}


具体的发动机类:

package com.dxy.design.pattern.builder;

public class Engine1 implements Engine {

	@Override
	public void build() {
		System.out.println("发动机开始创建");
	}

}


抽象的轮胎类:

package com.dxy.design.pattern.builder;

public interface Tyre {
	
	public void build();
}

具体的轮胎类:

package com.dxy.design.pattern.builder;

public class Tyre1 implements Tyre{

	@Override
	public void build() {
		System.out.println("轮胎开始创建");
	}

}

这里指列举两个零件,接下来我们创建一个抽象的工厂类,来定义摩托车的创建方式:

package com.dxy.design.pattern.builder.factory;

import com.dxy.design.pattern.builder.Engine;
import com.dxy.design.pattern.builder.Tyre;

public interface MotorCycleFactory {
	
	public Engine createEngine();
	
	public Tyre createTyre();
}


接着创建一个具体的工厂类来创建摩托车零件:

package com.dxy.design.pattern.builder.factory;

import com.dxy.design.pattern.builder.Engine;
import com.dxy.design.pattern.builder.Engine1;
import com.dxy.design.pattern.builder.Tyre;
import com.dxy.design.pattern.builder.Tyre1;

public class MotorCycleFactory1 implements MotorCycleFactory {

	@Override
	public Engine createEngine() {
		return new Engine1();
	}

	@Override
	public Tyre createTyre() {
		return new Tyre1();
	}

}


上文中提到,为了不使客户端过于臃肿,而又不违反类的单一职责,这里我们需要一个摩托车的组装类Builder:

package com.dxy.design.pattern.builder;

import com.dxy.design.pattern.builder.factory.MotorCycleFactory;

public class Builder {
	
	private MotorCycleFactory mcf;
	
	public Builder(MotorCycleFactory mcf) {
		this.mcf = mcf;
	}
	
	public MotorCycle createMotorCycle() {
		Engine engine = mcf.createEngine();
		engine.build();
		Tyre tyre = mcf.createTyre();
		tyre.build();
		return new MotorCycle1();
	}
}


这样我们就可以在客户端进行简单调用了:

package com.dxy.design.pattern.builder;

import com.dxy.design.pattern.builder.factory.MotorCycleFactory1;

public class Client {
	
	public static void main(String[] args) {
		Builder builder = new Builder(new MotorCycleFactory1());
		builder.createMotorCycle();
	}
}


UML图如下:


大致上就是这样吧,不会画,以后再学吧
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值