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