Java设计模式之建造者模式的示例详解

目录
  • 定义
  • 案例
    • 需求
    • 方案一
    • 方案二
  • 对比分析
  • 总结
    • 建造者模式的优势:
    • 注意点

定义

建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可 以构建它们,用户不需要知道内部的具体构建细节。

案例

需求

女生每天化妆,假如只需要做发型,香水,衣服,并要求按照发型——》香水——》衣服的顺序进行,用代码实现

方案一

定义女生抽象类

/**
 * 女生抽象类
 * @author:liyajie
 * @createTime:2022/2/16 10:20
 * @version:1.0
 */
public abstract class AbstractWoman {
    //设计发型
    public abstract void buildHairstyle();
    //使用香水
    public abstract void buildPerfume();
    //设计衣服
    public abstract void buildClothing();
}

定义女生实现类

/**
 * 女生实现类
 * @author:liyajie
 * @createTime:2022/2/16 10:21
 * @version:1.0
 */
public class Woman extends AbstractWoman {
    @Override
    public void buildHairstyle() {
        System.out.println("马尾造型");
    }

    @Override
    public void buildPerfume() {
        System.out.println("古龙香水");
    }

    @Override
    public void buildClothing() {
        System.out.println("海澜之家");
    }
}

测试类

/**
 * 测试类
 * @author:liyajie
 * @createTime:2022/2/15 16:35
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        Woman woman = new Woman();
        woman.buildHairstyle();
        woman.buildPerfume();
        woman.buildClothing();
        System.out.println(woman);
    }
}

查看测试结果

方案二

定义女生类

/**
 * 女生化妆
 * @author:liyajie
 * @createTime:2022/2/15 15:40
 * @version:1.0
 */
@Data
public class WomanNew {
    // 发型
    private String hairstyle;
    // 香水
    private String perfume;
    // 服装
    private String clothing;

    //化完妆后的展示效果
    public void show(){
        System.out.println("化妆完成");
    }
}

定义化妆师抽象类

/**
 * 化妆师抽象类
 * @author:liyajie
 * @createTime:2022/2/15 15:58
 * @version:1.0
 */
public abstract class AbstractDresserNew {
    protected Woman woman = new Woman();

    //设计发型
    public abstract void buildHairstyle();
    //使用香水
    public abstract void buildPerfume();
    //设计衣服
    public abstract void buildClothing();

    public Woman getWoman(){
        return woman;
    }
}

定义具体的化妆师类

/**
 * 具体的化妆师
 * @author:liyajie
 * @createTime:2022/2/15 16:17
 * @version:1.0
 */
public class DresserNew extends AbstractDresserNew{
    @Override
    public void buildHairstyle() {
        woman.setHairstyle("马尾造型");
    }

    @Override
    public void buildPerfume() {
        woman.setPerfume("古龙香水");
    }

    @Override
    public void buildClothing() {
        woman.setClothing("海澜之家");
    }
}

定义化妆总设计师类(指挥者)

/**
 * 化妆总设计师(指挥者)
 * @author:liyajie
 * @createTime:2022/2/15 16:22
 * @version:1.0
 */
public class DresserManage {

    private AbstractDresser abstractDresser;

    public DresserManage(AbstractDresser abstractDresser){
        this.abstractDresser = abstractDresser;
    }

    public Woman makeUp(){
        abstractDresser.buildHairstyle();
        abstractDresser.buildPerfume();
        abstractDresser.buildClothing();
        return abstractDresser.getWoman();
    }
}

定义测试类

/**
 * 测试类
 * @author:liyajie
 * @createTime:2022/2/15 16:35
 * @version:1.0
 */
public class TestNew {
    public static void main(String[] args) {
        DresserNew dresser = new DresserNew();
        DresserManage dresserManage = new DresserManage(dresser);
        WomanNew womanNew = dresserManage.makeUp();
        System.out.println(womanNew);
    }
}

查看结果

对比分析

  • 方案一:普通的实现方式,采用了继承抽象类的方式进行实现,耦合性非常高,不易扩展
  • 方案二:建造者模式,将女生和化妆师化妆进行了解耦合,并且易扩展,更换化妆师也很方便;并且有一个化妆总设计师作为指挥者的角色,可以方便的控制化妆的顺序,符合开闭原则

总结

建造者模式的优势:

将产品本身与产品的创建过程解耦合

扩展性很高,很方便的增加或者替换具体建造者

方便用程序来控制产品的创建过程以及顺序

指挥者类针对抽象建造者编程,系统扩展方便,符合开闭原则

注意点

建造者模式创建的产品一般组成部分类似,如果产品差异性非常大,不适合了,合理利用

如果产品内部变化复杂,导致系统非常庞大,权衡

到此这篇关于Java设计模式之建造者模式的示例详解的文章就介绍到这了,更多相关Java建造者模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java设计模式--建造者模式详解

    目录 引例 一般解法 代码: AbstractHouse(房子) Bungalow(平房) Villa (别墅) 客户端调用 建造者模式 建造者模式解法 代码: House类(Product产品) HouseBuilder类(Builder抽象建造者) 3.Bungalow类(ConcreteBuilder具体建造者A) 4.Villa类(ConcreteBuilder具体建造者B) 5.HouseDirector类(Director指挥者) 客户端调用 总结 引例 需求:建造房子,建造过程包括

  • Java设计模式之建造者模式实例详解

    本文实例讲述了Java设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式(builder)可以将部件和其组装过程分开.一步一步创建一个复杂的对象. 用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节. 什么情况下会用到建造者模式? 个人理解,当我们创建的对象在创建时需要逻辑的时候. 比如,一个简单的pojo对象,我们想要创建,直接就可以new出来,没有什么逻辑. 当有一个复杂的对象,你想要创建它时,它的各个属性之间是有逻辑关系的. 一个属性赋值取值依赖于

  • JAVA设计模式之建造者模式原理与用法详解

    本文实例讲述了JAVA设计模式之建造者模式定义与用法.分享给大家供大家参考,具体如下: 建造者模式:将复杂对象的构造与它的实现相分离,让相同的构建过程可以创建不同的对象. 适用场合: 复杂对象的算法应该独立于该对象的组成部分或当构造过程允许被构造不同的对象时. 组成角色: 1 创建者(Builder)接口:为创建一个对象的对应部件所指定抽象接口. 2 具体创建者(ConcreteBuilder):实现Builder的接口以构造对象的各个部件. 3 具体创建者管理对象(Director):使用Bu

  • Java通俗易懂系列设计模式之建造者模式

    介绍 今天我们将研究java中的Builder模式.Builder 设计模式是一种创造性的设计模式,如工厂模式和抽象工厂模式. 当Object包含许多属性时,引入了Builder模式来解决Factory和Abstract Factory设计模式的一些问题. 当Object包含许多属性时,Factory和Abstract Factory设计模式存在三个主要问题. 从客户端程序传递到Factory类的参数太多,可能容易出错,因为大多数情况下,参数的类型是相同的,而从客户端来说,很难维护参数的顺序.

  • 深入理解Java设计模式之建造者模式

    目录 一.什么是建造者模式 二.建造者模式的应用场景 三.建造者模式的优缺点 四.工厂模式和建造者模式的对比 五.建造者模式的实现 六.总结 一.什么是建造者模式 建造者模式也称生成器模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(依赖倒转) 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量.在本类图中,产品类是一个具体的类,而非抽象类.实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们

  • 理解java设计模式之建造者模式

    建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中"分步骤"是一个稳定的算法,而复杂对象的各个部分则经常变化.因此, 建造者模式主要用来解决"对象部分"的需求变化. 这样可以对对象构造的过程进行更加精细的控制. package com.shejimoshi.create.Builder; /** * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 * 适用性: * 当创

  • Java设计模式之建造者模式的示例详解

    目录 定义 案例 需求 方案一 方案二 对比分析 总结 建造者模式的优势: 注意点 定义 建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象.建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可 以构建它们,用户不需要知道内部的具体构建细节. 案例 需求 女生每天化妆,假如只需要做发型,香水,衣服,并要求按照发型——>香水——>衣服的顺序进行,

  • Java设计模式之原型模式的示例详解

    目录 定义 案例 需求 方案一 方案二 对比分析 总结 定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 即实现了一个原型接口,该接口用于创建当前对象的克隆,当直接创建对象的代价比较大时,则采用这种模式 案例 需求 张三要打印100000份照片 方案一 定义照片类 /** * 照片类 * @author:liyajie * @createTime:2022/2/15 11:47 * @version:1.0 */ @Data @AllArgsConstructor publi

  • Java设计模式之桥接模式的示例详解

    目录 定义 案例 需求 方案一 方案二 对比分析 总结 定义 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”. 案例 需求 通过企业微信和qq的方式给员工发送消息 方案一 定义发送消息的接口 /** * 发送消息的接口 * @author:liyajie * @createTime:2022/2/21 10:33

  • Java设计模式之组合模式的示例详解

    目录 定义 原理类图 案例 需求 方案 分析 总结 定义 组合模式,又叫部分整体模式,它创建了对象组的数据结构(将对象组合成树状结构,用来表示部分整体的层级关系)组合模式使得用户对单个对象和组合对象的访问具有一致性 原理类图 Component :这是组合模式中的抽象构件,他里面定义了所有类共有的默认行为,用来访问和管理Component的子部件,Component可以是抽象类,也可以是接口 leaf :在组合模式中表示叶子节点,叶子节点没有子节点了,他是最末端存放数据的结构 Composite

  • java设计模式责任链模式原理案例详解

    目录 引言 责任链模式定义 类图 角色 核心 示例代码 1.对请求处理者的抽象 2.对请求处理者的抽象 3.责任链的创建 责任链实现请假案例 案例类图 可扩展性 纯与不纯的责任链模式 纯的责任链模式 不纯的责任链模式 责任链模式主要优点 职责链模式的主要缺点 适用场景 模拟实现Tomcat中的过滤器机制 运行过程如下 分析Tomcat 过滤器中的责任链模式 引言 以请假流程为例,一般公司普通员工的请假流程简化如下: 普通员工发起一个请假申请,当请假天数小于3天时只需要得到主管批准即可:当请假天数

  • Java设计模式之状态模式State Pattern详解

    目录 概述 UML类图 状态模式与策略模式 谁决定状态转换的流向 State是接口还是抽象类 应用案例分析 状态抽象类 可以抽奖的状态 奖品发放完毕状态 发放奖品的状态 不能抽奖状态 抽奖活动(Context) 测试状态模式 概述 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.这个模式将状态封装成独立的类,并将动作委托到 代表当前状态的对象,我们知道行为会随着内部状态而改变. 一个对象“看起来好像修改了它的类”是什么意思呢?从客户的视角来看:如果说你使用的对象能够完全

  • Java设计模式之工厂模式实现方法详解

    本文实例讲述了Java设计模式之工厂模式实现方法.分享给大家供大家参考,具体如下: 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的 工厂模式在分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品: 一.简单工厂模式 简单工厂模式又称静态工厂方法模式

  • Java设计模式之责任链模式的示例详解

    目录 应用场景 实际代码案例 无模式情况下的代码 采用责任链模式优化代码 采用建造者+责任链模式优化代码 责任链模式优缺点 责任链模式是将链中的每一个节点看做是一个对象,每个节点处理的请求均不相同,且内部自动维护下一个节点对象,当一个请求从链式的首段发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求位置,属于行为模式. 这里需要注意的是每个节点都能对对象进行一定的处理(也可以不处理),处理完成之后节点再进行判断还要进行后续处理还是说传递给下一个节点. 应用场景 首先举一个日常

  • java设计模式策略模式图文示例详解

    目录 策略模式 意图 问题 解决方案 真实世界类比 策略模式结构 伪代码 策略模式适合应用场景 实现方式 策略模式优缺点 策略模式优缺点 与其他模式的关系 策略模式 亦称:Strategy 意图 策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换. 问题 一天,你打算为游客们创建一款导游程序.该程序的核心功能是提供美观的地图,以帮助用户在任何城市中快速定位. 用户期待的程序新功能是自动路线规划:他们希望输入地址后就能在地图上看到前往目的

随机推荐