admin管理员组文章数量:1609936
目录
前言
一、建造者模式是什么?
二、JAVA实战例子
三、UML图解
总结
其他设计模式和设计原则
【七大设计原则实战图解】
【工厂模式演变实战图解】
前言
设计模式在开发中作用之大,它以一种标准的方式供广大开发人员使用,为开发者的沟通提供了一套机制,帮助开发者更好地明白和更清晰地描述一段被给出的代码。可以使人们更加方便简单复用成功的设计模式和结构。可以使人们深入理解面向对象的设计思想,提高软件的开发效率,节约设计成本等等。LZ这里介绍一下二十三种设计模式之建造者模式。
一、建造者模式是什么?
建造者模式实际上是将复杂的对象构建过程进行抽取封装,并暴露出来对象的创建方法,使得不同的对象展示,可以通过同样的建造者来实现不同的表象。通过与工厂设计模式对比简单来讲:工厂模式,都是直接实例化出一个类的对象即可,建造者模式,是在实例化出类的对象之后,还要给该对象的属性赋值。
二、JAVA实战例子
例子:LZ这里以配置电脑场景举例,三个对象对应三个类:产品类Computer——>电脑、三个建造者ABC——>可理解为三个电脑厂商、客户端Client类——>可理解为购物平台。
问:为什么这样设计呢?
解释(优点):1、创建对象的过程稳定不变的(因为有专门负责封装某产品类的属性的接口(ComputerBuilder)来稳定过程)。2、创建对象的过程只写了一次代码,没有重复代码(指挥者完成的)。3、当需要扩展指挥者的时候,不用修改之前的代码,这符合开闭原则。
代码如下(示例):
import lombok.Data;
/**
* @Author yz
* @Date 2022/9/13 20:26
**/
@Data
class Computer{//产品类
private String cpu;
private String gpu;
private String memery;
private String hardDisk;
}
interface ComputerBuilder{//建造者接口
void setCpu();
void setGpu();
void setMemery();
void setHardDisk();
Computer build();
}
class LowComputerBuilder implements ComputerBuilder{//建造者A
private Computer computer = new Computer();
@Override
public void setCpu() {
computer.setCpu("i7 7500u");
}
@Override
public void setGpu() {
computer.setGpu("gtx940mx");
}
@Override
public void setMemery() {
computer.setMemery("8g");
}
@Override
public void setHardDisk() {
computer.setHardDisk("1T机械硬盘");
}
@Override
public Computer build() {
return computer;
}
}
class MiddleComputerBuilder implements ComputerBuilder{//建造者B
private Computer computer = new Computer();
@Override
public void setCpu() {
computer.setCpu("i7 7700hq");
}
@Override
public void setGpu() {
computer.setGpu("gtx1060");
}
@Override
public void setMemery() {
computer.setMemery("16g");
}
@Override
public void setHardDisk() {
computer.setHardDisk("250g固态+1T机械硬盘");
}
@Override
public Computer build() {
return computer;
}
}
class AdvancadComputerBuilder implements ComputerBuilder{//建造者C
private Computer computer = new Computer();
@Override
public void setCpu() {
computer.setCpu("i7 7850HK");
}
@Override
public void setGpu() {
computer.setGpu("rtx2080ti");
}
@Override
public void setMemery() {
computer.setMemery("32g");
}
@Override
public void setHardDisk() {
computer.setHardDisk("500g固态+2T机械硬盘");
}
@Override
public Computer build() {
return computer;
}
}
class Director{//指挥者
public Computer build(ComputerBuilder cb){
cb.setCpu();
cb.setGpu();
cb.setHardDisk();
cb.setMemery();
return cb.build();
}
}
public class Client {//客户端调用
public static void main(String[] args) {
LowComputerBuilder lcb = new LowComputerBuilder();
MiddleComputerBuilder mcb = new MiddleComputerBuilder();
AdvancadComputerBuilder acb = new AdvancadComputerBuilder();
Director director = new Director();
//玩游戏
System.out.println("玩游戏配置:"+director.build(acb));
//开发
System.out.println("开发配置:"+director.build(mcb));
//办公
System.out.println("办公配置:"+director.build(lcb));
}
}
三、UML图解
可以看出客户端只需要关联指挥者和建造者就可以满足自己的需求,而不需要客户端知道玩游戏需要什么cpu、gpu、硬盘、内存条等配置,只要告诉向指挥者提出需求:玩游戏需要什么配置,开发需要什么配置,办公需要什么配置。指挥者就会根据需求去找对应建造者(可理解为厂商)给客户端搭配好。
总结
结合生活例子:建造者模式就和生活中私人定制服务商家一样,用户(Client)需要什么配置的商品,商家(Director)根据用户需求寻找不同的工厂(Builder)创造出满足用户需求的商品。
-----结束语:人总是会为过去感到后悔,对将来感到迷茫。昨日已是历史,明日是个谜团,今天是上天赐给的礼物,想珍惜礼物那样珍惜今天
版权声明:本文标题:建造者模式之Java实战个人理解和图解 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728582780a1164707.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论