结构型设计模式之建造者模式

【软考笔记 ——软件设计师】(七) 设计模式 总结 总结看红色设计模式4个基本要素1、模式名称2、问题3、解决方案4 、 效果背 中英都要适配器模式 类和对象都一样背创建型 和 结构型创建型 (类 / 对象 ) 模式。 阅读详情

概述

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

1、分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。
2、 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。
3、 建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。

结构

建造者(Builder)模式包含如下角色:

1、抽象建造者类(Builder):这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的部件对象的创建。 

2、具体建造者类(ConcreteBuilder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。在构造过程完成后,提供产品的实例。 

3、产品类(Product):要创建的复杂对象。

4、指挥者类(Director):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。 

类图如下:

 实例

创建共享单车

生产自行车是一个复杂的过程,它包含了车架,车座等组件的生产。而车架又有碳纤维,铝合金等材质 的,车座有橡胶,真皮等材质。对于自行车的生产就可以使用建造者模式。

这里Bike是产品,包含车架,车座等组件;Builder是抽象建造者,MobikeBuilder和 OfoBuilder是具体的建造者;Director是指挥者。

类图如下:

 代码实现

/**
 * @author: xuzhilei
 * @create: 2021-12-29 
 * @description: 自行车类
 **/
public class Bike {
    /**
     * 车架
     */
    private String frame;
    /**
     * 车座
     */
    private String seat;

    public String getFrame() {
        return frame;
    }

    public void setFrame(String frame) {
        this.frame = frame;
    }

    public String getSeat() {
        return seat;
    }

    public void setSeat(String seat) {
        this.seat = seat;
    }
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29 
 * @description: 抽象建造者类
 **/
public abstract class Builder {
    protected Bike mBike;

    /**
     * 组装车架
     */
    abstract void buildFrame();

    /**
     * 组装车座
     */
    abstract void buildSeat();

    /**
     * 建造自行车
     * @return 返回自行车对象
     */
    abstract Bike createBike();
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29 
 * @description: 摩拜自行车建造者类
 **/
public class MobikeBuilder extends Builder{

    public MobikeBuilder(Bike bike) {
        this.mBike = bike;
    }

    @Override
    void buildFrame() {
        mBike.setFrame("铝合金车架");
    }

    @Override
    void buildSeat() {
        mBike.setSeat("真皮车座");
    }

    @Override
    Bike createBike() {
        return mBike;
    }
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29
 * @description: ofo自行车建造者类
 **/
public class OfoBuilder extends Builder{

    public OfoBuilder(Bike bike){
        this.mBike = bike;
    }


    @Override
    void buildFrame() {
        mBike.setFrame("碳纤维车架");
    }

    @Override
    void buildSeat() {
        mBike.setSeat("橡胶车座");
    }

    @Override
    Bike createBike() {
        return mBike;
    }
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29
 * @description: 指挥者类
 **/
public class Director {
    private Builder builder;

   public void setBuilder(Builder builder){
       this.builder = builder;
   }

    public Builder getBuilder() {
        return builder;
    }

    /**
     * 指挥建造者类组装自行车的方法
     * @return 具体的自行车对象
     */
    public Bike construct(){
        builder.buildFrame();
        builder.buildSeat();
        return builder.createBike();
    }
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29
 * @description: 模拟建造自行车
 **/
public class Client {
    public static void main(String[] args) {
        //创建指挥者对象
        Director director = new Director();
        //创建未具体化的自行车对象
        Bike bike = new Bike();
        //摩拜自行车建造者对象
        MobikeBuilder mobikeBuilder = new MobikeBuilder(bike);
        //注入建造者对象对象
        director.setBuilder(mobikeBuilder);
        //组装自行车,得到具体的自行车对象
        Bike moBike = director.construct();
        System.out.println("摩拜自行车的车架" + moBike.getFrame());
        System.out.println("摩拜自行车的车座" + moBike.getSeat());

        //创建ofo自行车建造者对象
        OfoBuilder ofoBuilder = new OfoBuilder(bike);
        director.setBuilder(ofoBuilder);
        Bike ofoBike = director.construct();
        System.out.println("ofo自行车的车架" + ofoBike.getFrame());
        System.out.println("ofo自行车的车座" + ofoBike.getSeat());
    }
}

测试结果:

 注意: 上面示例是 Builder模式的常规用法,指挥者类 Director 在建造者模式中具有很重要的作用,它 用于指导具体构建者如何构建产品,控制调用先后次序,并向调用者返回完整的产品类,但是有些情况 下需要简化系统结构,可以把指挥者类和抽象建造者进行结合

/**
 * @author: xuzhilei
 * @create: 2021-12-29
 * @description: 抽象建造者类
 **/
public abstract class Builder {
    protected Bike mBike;

    /**
     * 组装车架
     */
    abstract void buildFrame();

    /**
     * 组装车座
     */
    abstract void buildSeat();

    /**
     * 建造自行车
     * @return 返回自行车对象
     */
    abstract Bike createBike();

    /**
     * 组装自行车
     * @return 具体的自行车对象
     */
    public Bike construct(){
        this.buildFrame();
        this.buildSeat();
        return this.createBike();
    }
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29 
 * @description: 模拟建造自行车
 **/
public class Client {
    public static void main(String[] args) {
        //创建未具体化的自行车对象
        Bike bike = new Bike();
        //摩拜自行车建造者对象
        MobikeBuilder mobikeBuilder = new MobikeBuilder(bike);
        //组装自行车,得到具体的自行车对象
        Bike moBike = mobikeBuilder.construct();
        System.out.println("摩拜自行车的车架" + moBike.getFrame());
        System.out.println("摩拜自行车的车座" + moBike.getSeat());

        //创建ofo自行车建造者对象
        OfoBuilder ofoBuilder = new OfoBuilder(bike);
        Bike ofoBike = ofoBuilder.construct();
        System.out.println("ofo自行车的车架" + ofoBike.getFrame());
        System.out.println("ofo自行车的车座" + ofoBike.getSeat());
    }
}

 测试结果:

 分析: 这样做确实简化了系统结构,但同时也加重了抽象建造者类的职责,也不是太符合单一职责原则,如果 construct() 过于复杂,建议还是封装到 Director 中。

模式扩展

建造者模式除了上面的用途外,在开发中还有一个常用的使用方式,就是当一个类构造器需要传入很多 参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用建造者 模式进行重构。

重构前代码如下:

/**
 * @author: xuzhilei
 * @create: 2021-12-29 
 * @description: 手机类
 **/
public class Phone {
    /**
     * cpu
     */
    private String cpu;
    /**
     * 屏幕
     */
    private String screen;
    /**
     * 内存
     */
    private String memory;
    /**
     * 主板
     */
    private String mainBoard;

    public Phone(String cpu, String screen, String memory, String mainBoard) {
        this.cpu = cpu;
        this.screen = screen;
        this.memory = memory;
        this.mainBoard = mainBoard;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getScreen() {
        return screen;
    }

    public void setScreen(String screen) {
        this.screen = screen;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getMainBoard() {
        return mainBoard;
    }

    public void setMainBoard(String mainBoard) {
        this.mainBoard = mainBoard;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen='" + screen + '\'' +
                ", memory='" + memory + '\'' +
                ", mainBoard='" + mainBoard + '\'' +
                '}';
    }

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        //构造手机对象
        Phone phone = new Phone("麒麟980", "4K", "128G", "华为");
        System.out.println(phone);
    }
}

上面在测试方法中构建Phone对象,传递了四个参数,如果参数更多呢?代码的可读性及使用的成本 就是比较高。

重构代码后:

/**
 * @author: xuzhilei
 * @create: 2021-12-29
 * @description: 使用建造模式思想优化后的手机类
 **/
public class NewPhone {
    /**
     * cpu
     */
    private String cpu;
    /**
     * 屏幕
     */
    private String screen;
    /**
     * 内存
     */
    private String memory;
    /**
     * 主板
     */
    private String mainBoard;

    /**
     * 手机类私有构造器
     * @param builder 内部建造者类对象
     */
    private NewPhone(Builder builder){
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainBoard = builder.mainBoard;
    }

    /**
     * 内部建造者类
     */
    public static class Builder{
        private String cpu;
        private String screen;
        private String memory;
        private String mainBoard;

        public Builder(){
        }
        //设置cpu
        public Builder cpu(String cpu){
            this.cpu = cpu;
            return this;
        }
        //设置屏幕
        public Builder screen(String screen){
            this.screen = screen;
            return this;
        }
        //设置内存
        public Builder memory(String memory){
            this.memory = memory;
            return this;
        }
        //设置主板
        public Builder mainBoard(String mainBoard){
            this.mainBoard = mainBoard;
            return this;
        }
        //构造手机对象
        public NewPhone build(){
            return new NewPhone(this);
        }
    }

    @Override
    public String toString() {
        return "NewPhone{" +
                "cpu='" + cpu + '\'' +
                ", screen='" + screen + '\'' +
                ", memory='" + memory + '\'' +
                ", mainBoard='" + mainBoard + '\'' +
                '}';
    }
}
/**
 * @author: xuzhilei
 * @create: 2021-12-29
 * @description: 测试类
 **/
public class Client {

    public static void main(String[] args) {
        NewPhone newPhone = new NewPhone.Builder()
                .cpu("麒麟880")
                .screen("2K")
                .memory("64G")
                .mainBoard("华为")
                .build();
        System.out.println(newPhone);
    }
}

重构后的代码在使用起来更方便,可读性更好,某种程度上也可以提高开发效率。

  以上是个人随手敲的demo,如有不正确的地方,可以在下方留言指正,谢谢。与各位优快云的伙伴们共勉,每天记录一点点,每天进步一点点

设计模式(五)——建造者模式详解 组装的过程相当于构建主机对象的过程,而组装好的主机就相当于对象的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。从而可以构建复杂的对象。这个模式适用于:某个对象构建复杂的情况。 由于实现了构建和装配的解耦,不同的构建器,相同的装配,也可以做出不同的对象,相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。 建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需指定复杂对象的类型就可以得到该对象,而 阅读详情

相关推荐

GWAS与eQTL相结合,进一步筛选疾病相关基因

欢迎关注”生信修炼手册”!在GWAS分析结果中,大部分显著的SNP位点都位于非编码区,很难直接挖掘这些位点的调控机制。通常假设与疾病关联的SNP位点通过调控基因表达来发挥作用,而eQTL...

庐州月光的博客 1万+

【设计模式——学习笔记】23种设计模式——建造者模式Builder(原理讲解+应用场景介绍+案例介绍+Java代码实现)

讲解建造者模式的思想,介绍其常见的应用场景,举例说明建造者模式的实现方式

我只管埋头前行,剩下的交给时间。 1万+

PCI Express 权威指南:从协议原理到芯片实现

目录 全文总览第一部分:PCIe体系结构概览第1章 互连技术的演进与PCIe的诞生1.1 从ISA到PCI:并行总线的辉煌与瓶颈1.2 PCI-X的尝试与局限1.3 串行革命:从AGP、PCI到PCIe的范式转移1.4 PCIe的核心优势第2章 PCIe系统全局视角2.1 系统拓扑:Root Complex, Switch, Endpoint的职能与关系2.2 拓扑结构实例:服务器、工作站、嵌入式系统2.3 枚举与配置:系统如何发现和组织PCIe设备2.4 地址空间第3章 PCIe协议分层架构3.1 分层模

qq_42882296的博客 2891

设计模式第10讲——建造者模式(Builder)

建造者模式是一种创建型设计模式,也叫生成器模式。一、什么是建造者模式 二、角色组成 三、优缺点 四、应用场景4.1 生活场景4.2 java场景 五、代码实现5.0 UML类图5.1 产品类(Product)5.2 抽象建造者(Builder)5.3 具体构建者(ConcreteBuilder)5.4 指导者(Director)5.5 testBuilder六、总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 2万+

彻底解决Win11 Android模拟器驱动权限问题:手动修改silent_install.bat的保姆级教程

本文提供了一份详细的Win11 Android模拟器驱动权限问题解决方案,重点介绍了手动修改silent_install.bat脚本的两种方法。通过分析问题根源并给出具体代码修改方案,帮助开发者彻底解决Android Studio在Windows 11上安装时遇到的UAC循环弹窗问题,确保android-emulator-hypervisor-driver顺利安装。

dengliugong3918的博客 460

MoveIt2项目想换掉KDL求解器?试试这个trac_ik插件(附源码编译避坑指南)

本文详细介绍了如何在MoveIt2项目中用trac_ik插件替代KDL求解器,提升机械臂运动学求解的效率和成功率。内容涵盖环境准备、源码编译避坑、项目集成及性能调优,特别适合需要高精度控制的协作机械臂应用场景。通过实测数据对比,trac_ik在求解时间和奇异点处理上显著优于传统KDL求解器。

weixin_30730053的博客 689

【设计模式】建造者模式

建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 一。简解建造者模式,相当于是对工厂生产产品的一种装配,由于这种装配可能随时改变,所以需要抽取出来,实现产品局部与整体的解耦(当然话又说回来,单个孤立产品还需要建造者?那就是多此一举。)。着重理解装配的含义,对

小鼠标的博客 8740

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 385

Java设计模式 —— 【创建型模式】建造者模式(Builder Pattern)详解

建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式;它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节;由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。

知唔猪的博客 3383

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台 文章目录智慧物流大数据平台一、项目背景二、逻辑架构三、解决方案技术亮点:数据流转四、项目的技术选型4.1流式处理平台4.2 分布式计算平台4.3 海量数据存储框架软件版本总结 一、项目背景 本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖

weixin_48143996的博客 6427

基于YOLOv8与UI界面的校园垃圾分类督导系统

YOLO(You Only Look Once)是目前最为广泛使用的目标检测算法之一。它通过一次前向传递即完成目标检测,具有极高的速度与效率。YOLOv8是YOLO系列的最新版本,相比于之前的YOLO版本,YOLOv8在速度、精度、检测能力等方面都有了显著的提升。本项目通过结合YOLOv8模型与UI界面,成功实现了校园垃圾分类督导系统。该系统能够自动识别不同类型的垃圾,并通过UI界面实时展示垃圾分类的结果。

YOLO 337

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1871

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

JAVA设计模式之建造者模式

设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、...

bernardGao94的博客 225

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

设计模式第二天|设计模式创建型:工厂模式、抽象工厂模式、单例模式、建造者模式

简单工厂模式其实并不算是一种设计模式,更多的时候是一种编程习惯。简单工厂的实现思路是,定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。工厂方法模式是简单工厂的仅一步深化, 在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的对象,而是针对不同的对象提供不同的工厂。封装一个复杂对象构造过程,并允许按步骤构造。就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来构建出复杂对象。

weixin_60364343的博客 1088

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

设计模式复习笔记

笔记原教程——设计模式 GOF提出设计模式主要是基于以下的面向对象设计原则。 对接口编程而不是对实现编程。 优先使用对象组合而不是继承。 设计模式的类型 根据设计模式的参考书Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)中所提到的,总共有 23 种设计模式...

HubertYori的博客 442

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

软考高级:设计模式分类(创建型、结构型、行为型)概念和例题

明明如月学长, 优快云 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。

悟鸣的技术博客 1785

设计模式(java) -----工厂模式、抽象工厂模式、单例模式、建造者模式

设计模式的类型 这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。 1 创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给...

qq_41585840的博客 338

hello-设计模式

介绍: 设计模式作为一种概念性的规律总结,我们要先弄明白类与类之间的几种组合方式。 方式1 类继承类 A extend B 方式2 类实现接口 A implement B 方式3 成员变量 private A a; 方式4 构造方法、普通方法的参数 method (A a){ } 方式5 临时变量 method(){ A a = new A();} 方式6 反射 class.forName("A"); 方式7 子父类 Parent p = new son(); 设计模式...

冰魄神光 217

Unity常用设计模式总结

1、单例模式 给大家推荐两种比较常用的: 、、、 public static single instance; private void Awake() { if (instance!=null) { Destroy(gameObject); }else { instance = this; } } 、、、 ...

weixin_42696083的博客 1571

你所知道的java设计模式有哪些?我来给你讲常用的

你所知道的设计模式有哪些 Java中一般认为有23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合

LiuHai2014csd的博客 9895

深入浅出:从位运算、数据结构到算法与设计模式的全面技术指南“(第十一节)总结了23种经典设计模式,涵盖创建型、结构型和行为型三大类,详细阐述了工厂模式、单例模式、建造者模式、适配器模式、代理模式

概念为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。使用场景一个对象族(或是一组没有任何关系的对象)都有相同的约束。涉及不同操作系统的时候,都可以考虑使用抽象工厂模式。

weixin_45922644的博客 1248

设计模式之简单工厂、工厂方法、抽象工厂模式

简单工厂、工厂方法、抽象工厂二十三种设计模式分类创建型设计模式结构型设计模式行为型设计模式工厂模式与build 模式差异简单工厂模式构成示例工厂方法模式构成示例抽象工厂模式构成示例实现思路常见实现方式饿汉式懒汉式(线程不安全)懒汉式(线程安全)双重检查式静态内部类式单例的使用场景 二十三种设计模式分类 创建型设计模式 和对象的创建有关,共5种: 单例模式,工厂方法模式,抽象工厂模式,建造者模式,原...

linuxchaoge的博客 222

23种设计模式通俗理解

设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。 1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3 种。 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或...

weixin_38166852的博客 93

常见设计模式

设计模式 设计模式(Design Patterns),是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。 类型 总共有23种设计模式,可以分为3大类: 创建型模式:关注的点是如何创建对象,将对象的创建和使用相分离,使得这两者相对独立 工厂方法 抽象工厂 建造者 原型 单例 结构型模式:通过组合各种对象来获取更好的结构,虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过组合与运行期的动态组合来实

Hedenghui777的博客 347

23种设计模式介绍(Python示例讲解)

设计模式(Design Pattern)是一套被广泛接受的、可重复使用的软件设计解决方案。它们是在软件开发过程中对常见问题的反复实践和总结得出的经验和思想的表现。1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。设计模式是一种解决特定问题的经过测试和验证的通用解决方案,它们被广泛应用于软件工程和计算机科学中。下面列出了常见的23种设计模式。

匠人精神,持之以恒! 2788
上一篇: 创建型模式之原型模式
下一篇: 结构型模式之代理模式
海深不见鲸
博客等级 码龄6年 7粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值