当前位置: 首页 > news >正文

Java设计模式-12 、建造者模式

建造者模式

(将一个 复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。) 

建造者模式是一种创建型的模式,有一些对象的创建过程new 是很繁杂的。

什么时候去使用建造者模式

由上文可以得出在一些对象创建非常繁杂的场景就可以使用建造者模式。指定创建顺序以免出错。

还有一种场景。可能产品细节会改变。比如升级了第二代。这时候只需要重新定义一个具体的建造者就可以了。方便于扩展。

建造者模式与工厂模式的不同:

建造者模式最主要的功能是基本方法的调用顺序安排,这些基本方法已经实现了, 顺序不同产生的对象也不同; 工厂方法则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心的。

 

@Builder 注解用了建造者模式。

 代码:

1 . 建造对象

/*** 肯德基的套餐(fond+drink)* @author WHM**/
public class Product {private String food;private String drink;public String getFood() {return food;}public String getDrink() {return drink;}public void setFood(String food) {this.food = food;}public void setDrink(String drink) {this.drink = drink;}
}

2 产品扩展

 

public class MealA extends MealBuilder{@Overridepublic void buildFood() {pro.setFood("牛肉汉堡");}@Overridepublic void buildDrink() {pro.setDrink("可口可乐");}}
public class MealB extends MealBuilder{@Overridepublic void buildFood() {pro.setFood("鸡翅鸡腿");}@Overridepublic void buildDrink() {pro.setDrink("牛奶");}}

 3 抽象建造者,用于扩展

/*** 抽象建造者,用于扩展* @author WHM**/
public abstract class MealBuilder {Product pro = new Product();public abstract void buildFood();public abstract void buildDrink();public Product getProcdut() {return pro;}}

4 建造类

/*** 指挥生产套餐* * @author WHM**/
public class MealDirector {private MealBuilder mealBuilder;//传入构造器中public MealDirector(MealBuilder mealBuilder) {this.mealBuilder = mealBuilder;}public Product combine() {mealBuilder.buildDrink();mealBuilder.buildFood();return mealBuilder.getProcdut();}
}

 5 测试

package pattern.builder;/*** 1.建造者是对一个复杂对象的分解. 2.1抽象工厂模式实现对产品家族的创建:具有不同分类维度的产品组合;* 2.2它的主要目的是通过组装零配件而产生一个新产品 3.Product(产品角色):一个具体的产品对象(分解)。* Builder(抽象建造者):创建一个Product对象的各个分解部件指定的抽象接口。* ConcreteBuilder(具体建造者):实现抽象接口,构建和装配各个部件。 Director(指挥者):构建一个使用Builder接口的对象,松偶。* * 4.用户只需要传入我想生产的套餐,并不需要关心套餐生产过程* @author WHM**/
public class TMain {public static void main(String[] args) {// 套餐AMealA a = new MealA();// 准备套餐A的服务员MealDirector waiter = new MealDirector(a);// 获得套餐Product mealA = waiter.combine();System.out.print("套餐A的组成部分:");System.out.println("食物:" + mealA.getFood() + ";   " + "饮品:" + mealA.getDrink());}
}

 

引入

import lombok.Builder;

 

 

 获取对象就可以用builder,不在是new,如果10几个直接设置属性值就行。

 

http://www.lryc.cn/news/43225.html

相关文章:

  • 一款全新的基于GPT4的Python神器,关键还免费
  • 上岸整理:2023前端面试题-vue,小程序,js,css
  • Linux下LED设备驱动开发(LED灯实现闪烁)
  • JavaEE-多线程中wait和notify都有哪些区别?
  • JavaScript实现列表分页(小白版)
  • Python调用GPT3.5接口的最新方法
  • Java开发 - 拦截器初体验
  • 【数据仓库-7】-- 使用维度建模的一些缘由
  • 【开发实践】在线考试系统(一) 生成错题知识点的思维导图
  • Java Web 实战 17 - 计算机网络之传输层协议(2)
  • MyBatis<3>:动态SQL的使用<if><trim><where><set><foreach>
  • 【超好懂的比赛题解】暨南大学2023东软教育杯ACM校赛个人题解
  • go-zero学习及使用中遇到的问题
  • CCF-CSP认证 202303 500分题解
  • 板内盘中孔设计狂飙,细密间距线路中招
  • 面试热点题:回溯算法 递增子序列与全排列 II
  • 怎么找回回收站删除的文件
  • dp-打家劫舍
  • C++预处理连接
  • 3、DRF实战总结:基于类的视图APIView, GenericAPIView和GenericViewSet视图集(附源码)
  • AutoSAR PduR -AutoSAR PDU常用的使用方式【发送,接收,网关】
  • 瑟瑟发抖吧~OpenAI刚刚推出王炸——引入ChatGPT插件,开启AI新生态
  • 脉诊(切脉、诊脉、按脉、持脉)之法——入门篇
  • 【十二天学java】day09常用api介绍
  • 软件测试 - 测试用例常见面试题
  • 几种常见的API接口分页方案
  • 【Object 类的方法】
  • 留用户、补内容,在线音乐暗战不停
  • python--exec
  • 干货分享!这6个高效率办公软件,总有一个值得你收藏!