Java设计模式|建造者模式Builder Pattern

本文介绍了建造者模式(Builder Pattern),一种创建型设计模式,用于逐步构建复杂对象。通过将构造过程与表示分离,允许使用相同的构造过程生成不同表示。文中以点餐套餐为例,阐述了建造者模式的优势,并提供了Java代码实现。
摘要由CSDN通过智能技术生成

Java设计模式|建造者模式Builder Pattern

前言:

在日常生活中,我们可能会遇到这一类型的需求,例如一个实体类里有很多个属性,但是我们只想要其中的几种组合成一个新的对象,这个时候就可以使用建造者模式了,它提供了一种创建对象的最佳方式。建造者模式虽然比较好用,但是大家平时写代码的时候要谨记,不要滥用设计模式,不然的话可能会适得其反啊!

建造者模式

介绍:建造者模式又被称呼为生成器模式,这种类型的设计模式属于创建型模式,使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

作用: 建造者模式主要用于解决软件系统中复杂对象的创建问题。例如复杂对象的创建通过各个部分的子对象用一定的算法构成,在需求变化时复杂对象面临大的改变,不利于系统的稳定,使用建造者将各个部分的算法包装起来,需求变化只需要将算法的顺序以及组合方式改变即可。

解释: 我们可以这样理解一下:有一个特别好的例子,例如我们在麦当劳点餐有如下几个可点的东西

  1. 香辣鸡腿堡,奥尔良鸡腿堡,安格斯牛堡
  2. 可乐,橙汁,咖啡
  3. 薯条,鸡块,鸡腿
  4. 香辣鸡腿堡+可乐+薯条 =A套餐
  5. 奥尔良鸡腿堡+可乐+薯条 =B套餐
  6. 安格斯牛堡+可乐+薯条 =C套餐

看上边的条件,我们在转换成Java代码进行编码的时候得写3 * 3 * 3=27个实体类来进行表示每一个实体类,这就很不友好了,这个时候就可以使用建造者模式来优化上面的这种情况;

图片.png

代码实现:

第一步:定义Product

/**
 * 一个具体的产品对象,实体
 */
public class Meal {
    private String food;
    private String drink;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }
}
复制代码

第二步:定义Builder(抽象建造者): 创建一个Product对象的各个部件指定的抽象接口

/**
 * 抽象建造者
 */
public abstract class MealBuilder {

    Meal meal = new Meal();

    public abstract void buildFood();

    public abstract void buildDrink();

    public Meal getMeal(){
        return meal;
    }
}
复制代码

第三步,定义ConcreteBuilder(具体建造者): 实现抽象接口,构建和装配各个部件。

/**
 * 具体建造者:A套餐
 */
public class MealA extends MealBuilder{
    public void buildDrink() {
        meal.setDrink("可乐");
    }

    public void buildFood() {
        meal.setFood("薯条");
    }
}

/**
 * 具体建造者:B套餐
 */
public class MealB extends MealBuilder{
    public void buildDrink() {
        meal.setDrink("柠檬果汁");
    }

    public void buildFood() {
        meal.setFood("鸡翅");
    }
}
复制代码

第四步,定义Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

/**
 * 指挥者:构建一个使用Builder接口的对象
 */
public class KFCServer {
    private MealBuilder mealBuilder;

    public KFCServer(MealBuilder mealBuilder) { //构造方法
        this.mealBuilder = mealBuilder;
    }

    public Meal construct(){
        //准备食物
        mealBuilder.buildFood();
        //准备饮料
        mealBuilder.buildDrink();

        //准备完毕,返回一个完整的套餐给客户
        return mealBuilder.getMeal();
    }
}
复制代码

第五步,测试

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {

        MealA a = new MealA();//创建套餐A对象
        KFCServer waitera = new KFCServer(a);//准备套餐A的服务员
        Meal mealA = waitera.construct();//获得套餐A
        System.out.print("套餐A的组成部分:");
        System.out.println("食物:"+mealA.getFood()+";   "+"饮品:"+mealA.getDrink());

        MealB b = new MealB();
        KFCServer waiterb = new KFCServer(b);
        Meal mealB = waiterb.construct();
        System.out.print("套餐B的组成部分:");
        System.out.println("食物:"+mealB.getFood()+";   "+"饮品:"+mealB.getDrink());
    }
}

复制代码

ok!今天的文章就到这了,希望可以对大家有帮助,有不对的地方希望大家可以提出来的,共同成长;

整洁成就卓越代码,细节之中只有天地

最后:

我想,可能还有很多人在今年刚过去的金三银四春招中保持着观望的形势,害怕自己的能力不够,或者是安于现状,觉得目前拿着几千的月薪觉得能够接受,那么你就要注意了,这是非常危险的!

我们身为技术人员,最怕的就是安于现状,一直在原地踏步,那么你可能在30岁就会迎来自己的职业危机,因为你工作这么久提升的只有自己的年龄,技术还是万年不变!

如果你想在未来能够自我突破,圆梦大厂,那或许以上这份Java学习资料,你需要阅读阅读,希望能够对你的职业发展有所帮助。

获取方式: 只需你**点赞+关注**后,加入Java架构资源交流群,找管理员获取哦-!

这份Java学习资料,你需要阅读阅读,希望能够对你的职业发展有所帮助。

获取方式: 只需你**点赞+关注**后,加入Java架构资源交流群,找管理员获取哦-!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值