最近看了一些设计模式,感觉短短的代码,能抽象出很多东西,
原来写代码的时候每整体的考虑,也许只有写了一段时间的代码,才会对设计模式有比较深的体会
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种模式的理解还不够深刻,代码写
的不够多