zoukankan      html  css  js  c++  java
  • 建造者模式

    视频讲解:https://www.bilibili.com/video/BV1iQ4y1M7FV/

    今天为大家分享一下建造者模式

    以该图为例子,宝马汽车由很多部件组成,对于我们每一个买车用车的用户来说,我门不需要指导这些部件,分别是怎么装配的,她的装配细节是什么,我们的需求只是,使用这辆车。

    抽象来说,无论是在现实世界中还是在软件系统中,都存在一些复杂的对象由很多部件构成,对于大多数用户而言,无须知道这些部件的装配细节,而是使用该对象。 建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。

    建造者模式的类图

    实例代码

    public class Product 
    {
        private String partA; //可以是任意类型
        private String partB;
        private String partC;
        //partA的Getter方法和Setter方法省略
        //partB的Getter方法和Setter方法省略
        //partC的Getter方法和Setter方法省略
    }
    public abstract class Builder
    {
        protected Product product=new Product();
        
        public abstract void buildPartA();
        public abstract void buildPartB();
        public abstract void buildPartC();
        
        public Product getResult()
        {
            return product;
        }
    public class Director
    {
        private Builder builder;
        
        public Director(Builder builder)
        {
            this.builder=builder;
        }
        
        public void setBuilder(Builder builder)
        {
            this.builder=builer;
        }
        
        public Product construct()
        {
            builder.buildPartA();
            builder.buildPartB();
            builder.buildPartC();
            return builder.getResult();
        }
    } 

     Director:一方面它隔离了客户与生产过程;另一方面它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象

    在客户端代码中,无须关心产品对象的具体组装过程,只需确定具体建造者的类型即可,建造者模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。

    ……
    Builder builder = new ConcreteBuilder();
    Director director = new Director(builder);
    Product product = director.construct();
    …… 

    建造者模式的优点

    • 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
    • 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
    • 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。

    建造者模式的缺点如下:

    • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
    • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

  • 相关阅读:
    java8新特性LocalDate、LocalTime、LocalDateTime的学习
    vue在移动端使用alloyfinger手势库操作图片拖拽、缩放
    移动端设置滚动后显示滚动条
    springboot使用swagger2生成开发文档
    学习Validator验证框架总结
    对于线程池ThreadPool的学习总结
    apache-commons和guava的工具类
    Mac中anaconda中创建虚拟python环境,配置flask
    ubuntu系统中解决桌面分辨率不适配问题
    Linux服务器命令说明
  • 原文地址:https://www.cnblogs.com/LiaoMengyu/p/12588836.html
Copyright © 2011-2022 走看看