Creational Patterns Part 4/5: Builder Pattern
2016-05-30 23:17
417 查看
Creational Patterns Part 4/5: Builder Pattern
目录
Creational Patterns Part 45 Builder Pattern目录
Definition
UML Class Diagram
Implementation
Definition
Builder Pattern使用一些简单的对象来build一个复杂的对象,逐步完成build的过程。在Factory Pattern中一个method call就可以创建出一个对象,而如果一个对象的创建需要准备很多事情,就可以使用Builder Pattern。何时使用?创建对象需要事先做很多事时/当构造方法或静态工厂的参数过多时。
使用频率:
Medium Low
UML Class Diagram
Implementation
现在要组装一台电脑,那么通常需要主板、内存、显卡、屏幕和键盘等设备。也就是说在组装电脑之前,要提前准备好以上这些对象,可以用Builder Pattern来实现。// Device.java package designpatterns.creationalpatterns.builder; public interface Device { String name(); Integer price(); } // DeviceImpl.java package designpatterns.creationalpatterns.builder; class MainBoard implements Device { @Override public String name() { return "MainBoard"; } @Override public Integer price() { return 1000; } } class Memory implements Device { @Override public String name() { return "Memory"; } @Override public Integer price() { return 500; } } class VideoCard implements Device { @Override public String name() { return "VideoCard"; } @Override public Integer price() { return 2000; } } class Screen implements Device { @Override public String name() { return "Screen"; } @Override public Integer price() { return 1000; } } class KeyBoard implements Device { @Override public String name() { return "KeyBoard"; } @Override public Integer price() { return 500; } } // BuilderDemo.java package designpatterns.creationalpatterns.builder; import java.util.*; public class BuilderDemo { public static void main(String[] args) { ComputerBuilder builder = new ComputerBuilder(); // The client does't know or care about how the object is created Computer computer = builder.assembleComputer(); computer.showParts(); } } class ComputerBuilder { public Computer assembleComputer() { Computer computer = new Computer(); computer.add(new MainBoard()); computer.add(new Memory()); computer.add(new VideoCard()); computer.add(new Screen()); computer.add(new KeyBoard()); return computer; } } class Computer { private List<Device> deviceList = new ArrayList<Device>(); public void add(Device device) { deviceList.add(device); } public void showParts() { System.out.println(String.format("%-10s %5s", "Device", "Price")); System.out.println("——————————————————"); Integer totalPrice = 0; for(Device device: deviceList) { System.out.println(String.format("%-10s %5d", device.name(), device.price())); totalPrice += device.price(); } System.out.println("——————————————————"); System.out.println(String.format("%-10s %5d", "Computer", totalPrice)); } } // output Device Price —————————————————— MainBoard 1000 Memory 500 VideoCard 2000 Screen 1000 KeyBoard 500 —————————————————— Computer 5000
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用