23种设计模式_MODE06建造者模式_手写代码实现

简介: 23种设计模式_MODE06建造者模式_手写代码实现

1. 建造者模式测试 == 客户购买蛋糕

package com.zhaoshuangjian.mode06_建造者模式;
import com.zhaoshuangjian.mode06_建造者模式.mode06.Cake;
import com.zhaoshuangjian.mode06_建造者模式.mode06.CakeMaker;
import com.zhaoshuangjian.mode06_建造者模式.mode06.CakeSeller;
/**
 * <p>建造者模式测试 == 客户购买蛋糕</p>
 *
 * @Author zhaoshuangjian  2023-03-24 下午10:39
 */
public class BuilderTest {
    /**
     * 1、假设我要去蛋糕店买蛋糕,我只需要付钱,蛋糕销售员给我一个蛋糕即可
     * 2、作为购买者,我不关心我买到的蛋糕是怎么制作出来的,即我只关心显示【蛋糕】,不关心行为【制作蛋糕】
     * 3、而蛋糕肯定是按照一定的制作工序才能制作出来的,谁会这种制作工序呢?答案肯定是蛋糕制作师傅了
     * 4、话又说回来,蛋糕师傅只会制作蛋糕,他并不关心蛋糕的去向
     * 5、但是客户又要买蛋糕,所以最后还是会绕到销售员的身上
     * 6、即 -- 蛋糕制作师傅  --> 蛋糕销售员 --> 蛋糕购买者
     *
     * 接下来,我们来实现一下
     */
    public static void main(String[] args) {
        /**
         * 先指定一个蛋糕师傅  == 李师傅
         */
        CakeMaker cakeMaker = new CakeMaker("李师傅");
        /**
         * 指定蛋糕销售员
         */
        CakeSeller cakeSeller = new CakeSeller();
        /**
         * 销售员卖个客户一个蛋糕 == 注意,这个蛋糕的制作工程已经被隐藏了
         */
        Cake cake = cakeSeller.sell(cakeMaker);
        /**
         * 这一句其实没必要显示,这里显示是为了说明,蛋糕不是平白无故的创造出来的
         */
        cake.show();
        /**
         * Product: 具体产品【本案例中☞Cake】
         * Builder: 创建一个Product对象的各个部分指定的抽象接口【本案例中☞CakeBuilder】
         * ConcreteBuilder:具体的建造者,实现Builder接口,构建和装配各个部件【本案例中☞CakeMaker】
         * Director: 构建一个使用builder接口的对象【本案例中☞CakeSeller】
         * 场景:创建一些复杂的对象,这些对象内部构建之间的建造顺序是稳定的,但是对象内部的构建通常面临着复杂的变化
         * 好处:建造代码与表示代码分离,隐藏了该产品是如何组装的,
         *       若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了 == 这个就非常很了
         */
    }
}

2. 蛋糕师 == 根据builder定义的制作工序制作蛋糕

package com.zhaoshuangjian.mode06_建造者模式.mode06;
/**
 * <p>蛋糕师 == 根据builder定义的制作工序制作蛋糕</p>
 *
 * @Author zhaoshuangjian  2023-03-24 下午10:39
 */
public class CakeMaker implements  CakeBuilder{
    /**
     * 蛋糕师傅的姓名
     */
    private String name ;
    /**
     * 蛋糕师要制作的蛋糕,蛋糕师不关心蛋糕最后去了哪,他只需要把做好的蛋糕放在货架上即可
     */
    private Cake cake = new Cake();
    public  CakeMaker(){
    }
    public  CakeMaker(String name){
        this.name = name;
    }
    /**
   * @return the name
   */
  public String getName() {
    return name;
  }
  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }
  /**
   * @param cake the cake to set
   */
  public void setCake(Cake cake) {
    this.cake = cake;
  }
  @Override
    public void knead() {
       cake.addProcess("揉面 -- 软软的,滑滑的");
    }
    @Override
    public void ferment() {
        cake.addProcess("发酵 -- 酵一酵");
    }
    @Override
    public void bake(int minutes) {
        cake.addProcess("烘烤 -- "+minutes+"分钟");
    }
    @Override
    public Cake getCake() {
        return this.cake;
    }
}

3. 蛋糕销售者 == 告诉蛋糕师,货架上没蛋糕了,赶紧给我做一个出来,客户等着要呢

package com.zhaoshuangjian.mode06_建造者模式.mode06;
/**
 * <p>蛋糕销售者 == 告诉蛋糕师,货架上没蛋糕了,赶紧给我做一个出来,客户等着要呢</p>
 *
 * @Author zhaoshuangjian  2023-03-24 下午10:39
 */
public class CakeSeller {
    public  CakeSeller(){
    }
    public  Cake  sell(CakeBuilder cakeBuilder){
        cakeBuilder.knead();
        cakeBuilder.ferment();
        cakeBuilder.bake(30);
        return  cakeBuilder.getCake();
    }
}

4. 蛋糕类

package com.zhaoshuangjian.mode06_建造者模式.mode06;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>蛋糕类</p>
 *
 * @Author zhaoshuangjian  2023-03-24 下午10:39
 */
public class Cake {
    /**
     * 制作一个蛋糕所需要的所有工序【或一个产品所有组成部分的实现】
     */
    private List<String> parts = new ArrayList<>();
    public Cake(){}
    public List<String> getParts() {
        return parts;
    }
    public void setParts(List<String> parts) {
        this.parts = parts;
    }
    public void addProcess(String process){
        this.parts.add(process);
    }
    public void show(){
        System.out.println("先生你好,香喷喷的蛋糕已为你准备好了,它的制作流程如下:");
        for (String part : parts) {
            System.out.println(part);
        }
    }
}

5. 蛋糕制作器接口,规定制作流程,具体实现过程取决于builder的人

package com.zhaoshuangjian.mode06_建造者模式.mode06;
/**
 * <p>蛋糕制作器接口,规定制作流程,具体实现过程取决于builder的人</p>
 * <p>除了定义制作流程【工序】外,还需要定义一个根据流程制作好的蛋糕【获取产品】</p>
 *
 * @Author zhaoshuangjian  2023-03-24 下午10:39
 */
public interface CakeBuilder {
    /**
     * 揉面
     */
    void  knead();
    /**
     * 发酵
     */
    void  ferment();
    /**
     * 烘烤
     * @param minutes 烘烤的分钟数
     */
    void bake(int minutes);
    /**
     * 返回builder后的产品、结果  == 即行为和展示分离,你怎么制作的我不关心,我关心的是,什么时候能让我吃上蛋糕,哈哈
     * @return
     */
    Cake getCake();
}
相关文章
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
2月前
|
设计模式 算法
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
|
13天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性和扩展性
【10月更文挑战第13天】 本文将探讨PHP中常见的设计模式及其在实际项目中的应用。通过对比传统编程方式,我们将展示设计模式如何有效地提高代码的可维护性和扩展性。无论是单例模式确保类的单一实例,还是观察者模式实现对象间的松耦合,每一种设计模式都为开发者提供了解决特定问题的最佳实践。阅读本文后,读者将能更好地理解和应用这些设计模式,从而提升PHP编程的效率和质量。
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
2月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性与扩展性
设计模式在PHP开发中至关重要,如单例模式确保类仅有一个实例并提供全局访问点,适用于管理数据库连接或日志记录。工厂模式封装对象创建过程,降低系统耦合度;策略模式定义算法系列并使其可互换,便于实现不同算法间的切换。合理选择设计模式需基于需求分析,考虑系统架构,并通过测试驱动开发验证有效性,确保团队协作一致性和代码持续优化。设计模式能显著提升代码质量,解决开发中的设计难题。
33 8
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:提升代码的灵活性与可维护性
在本文中,我们将深入探讨PHP编程语言中的一种重要概念——设计模式。设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它代表了最佳的实践,被有经验的面向对象的软件开发人员所采用。本文将通过具体的实例,展示如何在PHP项目中应用设计模式,以提高代码的灵活性和可维护性。无论你是PHP初学者还是经验丰富的开发者,都能从中获得有价值的见解。
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
2月前
|
设计模式 存储 数据库连接
探索PHP中的设计模式:提高代码的可维护性与扩展性
本文将深入探讨PHP中常用的设计模式,包括单例模式、工厂模式和观察者模式。通过具体的代码示例,展示如何在实际项目中应用这些设计模式,以提高代码的可维护性与扩展性。无论你是PHP初学者还是有一定经验的开发者,都可以通过本文的学习,提升你的编程技巧和项目架构能力。
|
2月前
|
设计模式 算法 搜索推荐
PHP中的设计模式:提高代码可维护性的秘诀
在本文中,我们将探讨PHP设计模式的重要性以及它们如何帮助开发者编写出更加灵活、可维护的代码。我们将介绍几种常见的设计模式,包括单例模式、工厂模式和策略模式,并通过实际示例展示它们在PHP中的应用。最后,我们会讨论何时使用这些设计模式以及在实际项目开发中的最佳实践。
39 1