当前位置: 首页 > 科技观察

学习建造者模型的文章

时间:2023-03-21 17:46:51 科技观察

本文转载自微信公众号《三太子敖丙》,作者:三太子敖丙。转载本文请联系三太子敖丙公众号。为什么要学习设计模式?设计模式的优点是什么?提高查看框架源代码的能力,提高自己设计和编写复杂业务代码的能力,为以后的面试和职业道路打下坚实的基础。这是我之前写工厂模式的时候给你的。的一些优点,有兴趣的小伙伴可以再回顾一下。今天我们要说的是设计模式中的三种模式(创造模式、行为模式、结构模式)中创造模式中的建造者模式,也可以称之为建造者模式。和工厂模式等其他创建模式一样,它们都是为同一个目标服务的,只是作用场景不同,实现方式不同,但最终目的是一样的:让我们写出严谨的结构,可理解和可扩展的高质量代码。什么是建造者模式?它的应用场景是什么?当我们需要实例化一个复杂的类来获取不同结构类型和不同内部状态的对象时,我们可以使用不同的类来对待它们。每个类的实现操作逻辑被单独封装,我们称这些类为构建器。当我们需要来自同一个类,但有不同的结构对象时,我们可以通过构造另一个构建器来实例化。------------以上定义来自?。为了加深我们的理解,让我们创建另一个流程图。从图中我们可以看出builder主要分为四个角色:Product(产品类):我们需要具体生成的类对象Builder(抽象生成器类):为我们的需求生成ConcreteBuilder(具体生成器类):实现我们要生成的类对象Director(导演类):确定构建我们的类对象有哪些模块属性?在实际应用中,可能不需要这个角色,可以直接通过客户端处理。例如,电子商务中的商品种类繁多,有普通实物商品、电子卡券商品、虚拟视频学习商品等。不同的商品,都是商品只是属性不同,电子卡券:唯一的优惠码,学习视频:唯一的视频链接等等。那么我们如何实现这种产品创建呢?我们先来看最常见的创建方式:我们先创建一个基础的产品Item类:这里可以看到,根据请求的类型,我们也可以完全创建出我们想要的类型的产品,但是对于一个产品来说是不可能的属性就那么几个属性,以后扩充怎么样?那么这段代码就会显得臃肿难维护。接下来,让我们看看如何实现构建器模式:第一步:创建我们的抽象构建器类。这里我们看到有3个抽象方法来判断不同的产品类型。我们调用不同的方法来实现解耦的第二步:创建一个具体的构建器类。对抽象构建器类的抽象方法进行赋值,实现我们需要的结果。第3步:创建我们的导演类。指导我们如何创建对象,我们可以简化这个,根据具体的使用场景来确定!最后就是看我们的测试结果了。省略director类的时候,其实可以构建出我们想要的结果,因为我写的是测试demo所以没有写参数。您可以根据自己的实际应用场景进行修改。与普通的写法相比,构建器模式的写法让代码更具可读性和易扩展性,不同类型的产品达到解耦的效果。示例2:假设我们现在有另一个场景。我们在复制一个商品的时候,库存没有填写的时候默认为0,当用户填写的时候,我们的库存数量不能大于999999999。那我们怎么实现呢?PS:商品复制功能是电商领域非常常见的操作。为用户简化运营成本,提高用户体检水平。技术为业务服务,业务决定企业的长远利益。我们在内部创建了一个ItemBuilder来处理我们的验证逻辑。当然,我们其实可以使用普通的get和set方法。看到这里,可能有人会问这和我们使用get或者set方法有什么区别呢?说明:主要是为了解决我们赋值处于无效状态的问题。无效状态意味着对象属性之间存在依赖关系。验证等。如果使用set方法,则不会验证关系和验证,可能会出现无效状态,即必须同时设置A和B的两个属性,两者缺一不可,然后set方法可能会导致遗漏等,综上所述,以上就是我想了解的builder模型。其实我还是想和大家分享一下这个想法。和第二个例子一样,也可以用它来写配置文件(比如我们的连接池,很多是必填或者不用填参数的,同时可以避免不好维护,不美观由于属性值过多而写构造方法时出现的现象)等,因为本人一直在电商公司工作,所以我举的例子都是以电商为主。只有了解了每种设计模式解决的是什么问题,才能知道在什么场景下使用什么模式或者多种设计模式的组合,才能避免强行使用设计模式,导致代码更加难以维护。