博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RE|GoF的23种设计模式-4
阅读量:7237 次
发布时间:2019-06-29

本文共 2543 字,大约阅读时间需要 8 分钟。

建造者模式

定义

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

主要解决

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

优点缺点注意事项

优点: 1、建造者独立,易扩展。 2、便于控制细节风险。

缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。

使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。

注意事项:与工厂模式的区别是,建造者模式更加关注与零件装配的顺序。

实例

public static interface IComputer { // 计算机的接口    String name(); // 名称    String price(); // 价格    IComputerConfig config(); // 配置}public static interface IComputerConfig { // 配置的接口    String cpu();    String card();}public static class LowerComputerConfig implements IComputerConfig{    @Override    public String cpu() {        return "i7-75000H";    }    @Override    public String card() {        return "GTX1080";    }}public static class SeniorComputerConfig implements IComputerConfig{    @Override    public String cpu() {        return "i9-75000H";    }    @Override    public String card() {        return "GTX1140";    }}public static abstract class AbsLowerComputer implements IComputer{    public IComputerConfig config() {        return new LowerComputerConfig();    }}public static abstract class AbsSeniorComputer implements IComputer{    public IComputerConfig config() {        return new SeniorComputerConfig();    }}public static class HuaWeiLowerComputer extends AbsLowerComputer{    @Override    public String name() {        return "HAWEI-A901";    }    @Override    public String price() {        return "3999";    }}public static class HuaWeiSeniorComputer extends AbsSeniorComputer{    @Override    public String name() {        return "HAWEI-Y8000";    }    @Override    public String price() {        return "8999";    }}public static class Shopping {    private List
list; public Shopping() { this.list = new ArrayList<>(); } public void add(IComputer computer) { list.add(computer); } public double count() { double count = 0.0; for (IComputer iComputer : list) { System.out.println("购物了:" + iComputer.name() + " " + iComputer.price() + " " + iComputer.config().cpu() + " " + iComputer.config().card()); count += Double.valueOf(iComputer.price()); } return count; }}public static void main(String[] args) { Shopping shopping = new Shopping(); shopping.add(new HuaWeiLowerComputer()); shopping.add(new HuaWeiLowerComputer()); shopping.add(new HuaWeiSeniorComputer()); System.out.println(shopping.count());}复制代码

转载于:https://juejin.im/post/5ce20121f265da1b7152c600

你可能感兴趣的文章
学习思路之ONETHINK
查看>>
堆的简单实现(仿函数)
查看>>
网工职业发展方向之网管
查看>>
HADOOP的HA搭建
查看>>
JavaScript 踩坑心得— 为了高速(下)
查看>>
DevSecOps 简介(一)
查看>>
python笔记(snow flower)倒小雪花
查看>>
vsftp
查看>>
Mysql 基础篇 --- yum和rpm安装详解
查看>>
Linux 2 图形界面与命令界面的切换
查看>>
jenkins第一次登陆密码
查看>>
解决mysql占用IO过高
查看>>
这个产品能支持多大数据量?
查看>>
openstack P版热迁移失败遇到的几种问题
查看>>
Html5前端开发的未来发展趋势
查看>>
文件管理命令
查看>>
java编程基本规范
查看>>
request.getContextPath()
查看>>
JS实现信息滚动效果
查看>>
软件模拟DHCP中继代理的配置
查看>>