Creational Patterns Part 4/5: Builder Pattern

来源:互联网 发布:光学镜头的优化设计pdf 编辑:程序博客网 时间:2024/04/29 08:32

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。

何时使用?创建对象需要事先做很多事时/当构造方法或静态工厂的参数过多时。

使用频率:Frequency of use Medium Low


UML Class Diagram

Builder Pattern


Implementation

现在要组装一台电脑,那么通常需要主板、内存、显卡、屏幕和键盘等设备。也就是说在组装电脑之前,要提前准备好以上这些对象,可以用Builder Pattern来实现。

// Device.javapackage designpatterns.creationalpatterns.builder;public interface Device {    String name();    Integer price();}// DeviceImpl.javapackage 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.javapackage 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));    }}// outputDevice     Price——————————————————MainBoard   1000Memory       500VideoCard   2000Screen      1000KeyBoard     500——————————————————Computer    5000
0 0
原创粉丝点击