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

最近看了一些设计模式,感觉短短的代码,能抽象出很多东西,

 

原来写代码的时候每整体的考虑,也许只有写了一段时间的代码,才会对设计模式有比较深的体会

 

builder创建者,从名字上理解,他主要承担的是构件对象的操作

 

书上定义

 

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

 

builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.用户不知

 

道内部的具体构建细节.有点类似工厂方法模式和抽象工厂模式,

 

从概念上,大家理解都差不多,大概的意思就是简化代码,只要写几行代码就可以创建一个你需要的对象,而且可以从用.从用还

 

比较简单.

 

贴代码吧

 

我这里创建了一个电脑builder

 

Computer.java这里实现了一台电脑需要的配件

 

package com.linpyi.mode;

public class Computer {

	private String CPU;
	private String disk;//硬盘
	private String memory;//内存
	private String mainboard;//主板

	public String getCPU() {
		return CPU;
	}

	public void setCPU(String cpu) {
		CPU = cpu;
	}

	public String getDisk() {
		return disk;
	}

	public void setDisk(String disk) {
		this.disk = disk;
	}

	public String getMemory() {
		return memory;
	}

	public void setMemory(String memory) {
		this.memory = memory;
	}

	public String getMainboard() {
		return mainboard;
	}

	public void setMainboard(String mainboard) {
		this.mainboard = mainboard;
	}
}

 

ComputerBuilder.java 抽象电脑组装类,每个不同产品的电脑都继承这个类,里面实现组装电脑的基本方法

 

package com.linpyi.mode;

/**
 * 建造电脑组装类
 * 
 * @author work
 * 
 */
public abstract class ComputerBuilder {

	public abstract void makeCPU();

	public abstract void makeDisk();

	public abstract void makeMemory();

	public abstract void makeMainboard();
	
	public abstract Computer getComputer();
}

 

LenvoBuilder.java  联想电脑组装类,

 

package com.linpyi.mode;

public class LenvoBuilder extends ComputerBuilder{

	Computer computer = new Computer();
	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return computer;
	}

	@Override
	public void makeCPU() {
		computer.setCPU("Lenvo-AMD");
	}

	@Override
	public void makeDisk() {
		// TODO Auto-generated method stub
		computer.setDisk("Lenvo-seagate");
	}

	@Override
	public void makeMainboard() {
		// TODO Auto-generated method stub
		computer.setMainboard("Lenvo-ausu");
	}

	@Override
	public void makeMemory() {
		// TODO Auto-generated method stub
		computer.setMemory("Lenvo-kingston");
	}

}

 

ComputerDirector.java 组装类(DIR)自己组装电脑拉

 

package com.linpyi.mode;

/**
 * 电脑组装类
 * @author work
 *
 */
public class ComputerDirector {

	public void makeComputer(ComputerBuilder builder){
		builder.makeCPU();
		builder.makeDisk();
		builder.makeMainboard();
		builder.makeMemory();
	}
}

 

Client.java 客户操作类

 

package com.linpyi.mode;

/**
 * 操作类
 * @author work
 *
 */
public class Client {

	public static void main(String[] args){
		//实例化一个创建者
		ComputerDirector director = new ComputerDirector();
		//实例化一个lenvo的类
		ComputerBuilder builder = new LenvoBuilder();
		//创建产品,用户不需要知道创建里面的方法
		director.makeComputer(builder);
		//获得产品
		Computer computer = builder.getComputer();
		System.out.println(computer.getCPU());
		System.out.println(computer.getDisk());
		System.out.println(computer.getMainboard());
		System.out.println(computer.getMemory());
	}
}

 

运行结果

Lenvo-AMD
Lenvo-seagate
Lenvo-ausu
Lenvo-kingston

 

 

以后如果需要增加电脑生产品牌,只要创建一个builder 例如 HPBuilder.java

 

貌似一看起来和工厂模式很像很像,我也对比了下,确实有点像

 

总感觉他和抽象工厂模式还是有一定差别,比如在创建对象上,但是又写不出来,也许我对这2种模式的理解还不够深刻,代码写

 

的不够多

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值