首页 > 其他分享 >09-建造者模式

09-建造者模式

时间:2023-01-29 21:00:17浏览次数:39  
标签:builder Product void 09 建造 product 模式 part public

09-建造者模式

概念

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
建造者模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,单对象内部的构建通常面临着复杂的变化
建造者模式的好处就是是的建造代码与表示代码分离,由于建造者隐藏了改产品是如何组装的,所以如果需要改变一个产品内部表示,只需要再定义一个具体的建造者就可以了

例子

造车,无论是小汽车还是自行车,都需要构建轮子,车座,以及把手,虽然造车的流程相同,但是其具体实现千差万别
但如果造车的流程没有标准化,有可能某次改动自行车就缺失了轮子,就成了废品,所以流程的把控是很有必要的
使用一个抽象类Builder来表示造车需要哪些部件,用一个指挥类Director来控制造成的整个流程,最终获取到产品Product

具体实现如下

package com.gof.builder;

import java.util.ArrayList;
import java.util.List;

/**
 * 功能描述
 *
 * @since 2023-01-29
 */
public class Product {
    List<String> parts = new ArrayList<>();

    public void addPart(String part) {
        parts.add(part);
    }

    public void show() {
        for (String part : parts) {
            System.out.println(part);
        }
    }
}
package com.gof.builder;

/**
 * 功能描述
 *
 * @since 2023-01-29
 */
public abstract class Builder {
    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract Product getResult();
}
package com.gof.builder;

/**
 * 功能描述
 *
 * @since 2023-01-29
 */
public class BicycleBuilder extends Builder {
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.addPart("bicycle part A");
    }

    @Override
    public void buildPartB() {
        product.addPart("bicycle part B");
    }

    @Override
    public Product getResult() {
        return product;
    }
}
package com.gof.builder;

/**
 * 功能描述
 *
 * @since 2023-01-29
 */
public class CarBuilder extends Builder {
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.addPart("car part A.");
    }

    @Override
    public void buildPartB() {
        product.addPart("car part B.");
    }

    @Override
    public Product getResult() {
        return product;
    }
}
package com.gof.builder;

/**
 * 功能描述
 *
 * @since 2023-01-29
 */
public class Director {
    public void construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
    }
}
package com.gof.builder;

/**
 * 功能描述
 *
 * @since 2023-01-29
 */
public class Client {
    public static void main(String[] args) {
        CarBuilder carBuilder = new CarBuilder();
        BicycleBuilder bicycleBuilder = new BicycleBuilder();
        Director director = new Director();
        director.construct(carBuilder);
        Product car = carBuilder.getResult();
        car.show();

        director.construct(bicycleBuilder);
        Product bicycle = bicycleBuilder.getResult();
        bicycle.show();
    }
}

标签:builder,Product,void,09,建造,product,模式,part,public
From: https://www.cnblogs.com/Oh-mydream/p/17073811.html

相关文章

  • Blazor模式讲解
    Blazor的三种模式BlazorServer:BlazorServer在ASP.NETCore应用中支持在服务器上托管Razor组件。可通过SignalR连接处理UI更新。运行时停留在服务器上并处理......
  • Seata源码结构及事务模式介绍
    1.Seata是什么Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式......
  • redis的简易哨兵模式
    某一天突然收到通知说redis的服务器挂了,因为是支付服务用到的redis,所以赶紧去查一下对服务流程有没有影响,结果是一切正常,松了一口气。后面看了一下代码发现里面自己封装的......
  • [AHOI2009] 中国象棋 题解
    每行每列的炮数量\(\leq2\),那么整个图就可以被分解为一些环和链。考虑答案的二元生成函数,显然环和链分别的生成函数都是平凡的多项式,而答案的多项式无非是加起来后求exp......
  • java常用的设计模式
     java的设计模式一、单例模式  基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点。常见写法:  1.饿汉式publicclassSingleton{priva......
  • C++ 设计模式--模板方法Template Method
    1.定义定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。TemplateMethod使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某......
  • 装饰者模式和代理模式
    代理模式和装饰器模式很像,这里用【到咖啡馆喝咖啡】作例子来讲解。基础实现定义一个咖啡的接口。publicinterfaceCoffee{/***打印当前咖啡里有什么......
  • 【设计模式】行为型
    职责链模式Client->A->B->C,避免请求发送者与接收者耦合,将接收者对象连接成一条链,直到有对象处理命令模式 将请求转换为一个包含与请求相关的所有信息的独立对象。 可......
  • golang并发编程-生产者消费者模式
    https://blog.csdn.net/qq_55752792/article/details/125917846packagemainimport("fmt""math/rand""sync""time")//JobstructtypeJobst......
  • ExtJS-自定义事件(观察者模式)实现
    更新记录2023年1月6日从笔记迁移到博客。转载请注明出处:ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html使用Ext.util.Observable类型即可。代码......