java设计模式-建造者模式
适用场景:一个对象有多个子对象构成,我们要建这个对象的时候,需要很多步骤,构建多个子对象,然后再由子对象构成一个对象,我们就可以考虑用建造者模式建造者本质:让建造子对象的builder和装配对象director解耦,从而建造出复杂的对象举个例子:我们来构建一个电脑对象,它有鼠标,显示器,键盘等子对象构成,我们如何来装配这个对呢/*** 电脑实体类** @author liu
·
适用场景:
一个对象有多个子对象构成,我们要建这个对象的时候,需要很多步骤,构建多个子对象,然后再由子对象构成一个对象,我们就可以考虑用建造者模式
建造者本质:
让建造子对象的builder和装配对象director解耦,从而建造出复杂的对象
举个例子:
我们来构建一个电脑对象,它有鼠标,显示器,键盘等子对象构成,我们如何来装配这个对呢
/**
* 电脑实体类
*
* @author liuxg
* @date 2016年5月24日 下午8:37:58
*/
public class Computer {
private Monitor monitor;
private Keyboard keyboard;
private Mouse mouse;
public Monitor getMonitor() {
return monitor;
}
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
public Keyboard getKeyboard() {
return keyboard;
}
public void setKeyboard(Keyboard keyboard) {
this.keyboard = keyboard;
}
public Mouse getMouse() {
return mouse;
}
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
}
class Monitor {
public void deviceName() {
System.out.println("显示器");
}
}
class Keyboard {
public void deviceName() {
System.out.println("键盘");
}
}
class Mouse {
public void deviceName() {
System.out.println("鼠标");
}
}
接下来我们来创建一个构建子对象的builder来构建子对象
/**
* 电脑建造器
* @author liuxg
* @date 2016年5月24日 下午8:40:12
*/
public interface ComputerBuilder {
Monitor buildMonitor();
Keyboard buildKeyboard();
Mouse buildMouse();
}
/**
* 电脑建造起的实现类
* @author liuxg
* @date 2016年5月24日 下午8:40:48
*/
public class ComputerBuilderImpl implements ComputerBuilder{
@Override
public Monitor buildMonitor() {
return new Monitor();
}
@Override
public Keyboard buildKeyboard() {
return new Keyboard();
}
@Override
public Mouse buildMouse() {
return new Mouse();
}
}
然后我们再定义一个类,专门用来专配电脑,这样子就实现构建者和组装者的解耦和分离
/**
* 装配器
* @author liuxg
* @date 2016年5月24日 下午8:42:18
*/
public class Dirctor {
public static Computer getCompute(ComputerBuilder builder){
Computer computer = new Computer();
computer.setKeyboard(builder.buildKeyboard());
computer.setMonitor(builder.buildMonitor());
computer.setMouse(builder.buildMouse());
return computer;
}
}
我们来使用客户端测试一下
public class Client01 {
public static void main(String[] args) {
ComputerBuilder builder = new ComputerBuilderImpl();
Computer computer = Dirctor.getCompute(builder);
computer.getKeyboard().deviceName();
computer.getMonitor().deviceName();
computer.getMouse().deviceName();
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)