gpt4 book ai didi

【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现

转载 作者:我是一只小鸟 更新时间:2023-03-13 22:31:26 26 4
gpt4 key购买 nike

简介

建造者模式(Builder Pattern),也叫生成器模式,属于创建型模式。它使用多个简单的对象一步一步构建成一个复杂的对象。它允许你使用相同的创建代码生成不同类型和形式的对象.

当你希望使用代码创建不同形式的产品 (例如各种商品和订单) 时, 一些基本部件不会变,而其组合经常变化的时候,就可以考虑建造者模式.

  。

作用

  1. 当需要创建复杂对象的时候,由各个部分的子对象来逐步构建,以适应复杂多变的情况。
  2. 具体的建造者类之间是相互独立的,这有利于系统的扩展。
  3. 将变与不变分离开。主管类隐藏了产品构造细节, 客户端只需要将一个生成器与主管类关联,就能从生成器处构造对象。

  。

实现步骤

  1. 定义主管类,可以制造所有形式的产品。
  2. 在基本生成器接口中声明创建产品的步骤。
  3. 为每个形式的产品创建具体生成器类,并实现其构造步骤。
  4. 客户端同时创建生成器和主管类,所有产品都遵循相同的接口,构造结果通过主管类获取。

  。

UML

  。

  。

代码

  。

创建建造者接口

  。

                          
                            //
                          
                          
                             Builder.java 建造者接口,定义基本建造方法
                          
                          
                            public
                          
                          
                            interface
                          
                          
                             Builder {
  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             reset();
  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setName(String name);
  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setScreen(Integer[] screen);
  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setGPU(Integer no); 
}
                          
                        

  。

具体建造者类,可以多个

                          
                            //
                          
                          
                             ManualBuilder.java 使用手册建造者类也实现了建造者接口
                          
                          
                            public
                          
                          
                            class
                          
                           ManualBuilder 
                          
                            implements
                          
                          
                             Builder {
  
                          
                          
                            private
                          
                          
                             Manual manual;

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             reset() {
    
                          
                          
                            this
                          
                          .manual = 
                          
                            new
                          
                          
                             Manual();
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setName(String name) {
    
                          
                          
                            this
                          
                          
                            .manual.setName(name);
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setScreen(Integer[] screen) {
    
                          
                          
                            this
                          
                          
                            .manual.setScreen(screen);
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setGPU(Integer no) {
    
                          
                          
                            this
                          
                          
                            .manual.setGpuType(no);
  }

  
                          
                          
                            public
                          
                          
                             Manual getProduct() {
    
                          
                          
                            return
                          
                          
                            this
                          
                          
                            .manual;
  }
}


                          
                          
                            //
                          
                          
                             PhoneBuilder.java 手机建造者实现了建造者接口
                          
                          
                            public
                          
                          
                            class
                          
                           PhoneBuilder 
                          
                            implements
                          
                          
                             Builder {
  
                          
                          
                            private
                          
                          
                             Phone phone;

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             reset() {
    
                          
                          
                            this
                          
                          .phone = 
                          
                            new
                          
                          
                             Phone();
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setName(String name) {
    
                          
                          
                            this
                          
                          
                            .phone.setName(name);
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setScreen(Integer[] screen) {
    
                          
                          
                            this
                          
                          
                            .phone.setScreen(screen);
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setGPU(Integer no) {
    
                          
                          
                            this
                          
                          
                            .phone.setGpuType(no);
  }

  
                          
                          
                            public
                          
                          
                             Phone getProduct() {
    
                          
                          
                            return
                          
                          
                            this
                          
                          
                            .phone;
  }
}
                          
                        

  。

  。

定义具体产品类,不同建造者建造不同产品

  。

                          
                            //
                          
                          
                             Manual.java 手册产品类
                          
                          
                            public
                          
                          
                            class
                          
                          
                             Manual {
  
                          
                          
                            private
                          
                           String name = "PhoneManualName"
                          
                            ;
  
                          
                          
                            private
                          
                           Integer[] screen = { 0, 0
                          
                             };
  
                          
                          
                            private
                          
                           Integer gpuType = 0
                          
                            ;
  
                          
                          
                            private
                          
                           Integer pages = 0
                          
                            ;

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setName(String name) {
    
                          
                          
                            this
                          
                          .name =
                          
                             name;
  }

  
                          
                          
                            public
                          
                          
                             String getName() {
    
                          
                          
                            return
                          
                          
                            this
                          
                          
                            .name;
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setScreen(Integer[] screen) {
    
                          
                          
                            this
                          
                          .screen =
                          
                             screen;
  }

  
                          
                          
                            public
                          
                          
                             Integer[] getScreen() {
    
                          
                          
                            return
                          
                          
                            this
                          
                          
                            .screen;
  }
  ......

}


                          
                          
                            //
                          
                          
                             Phone.java 手机产品类
                          
                          
                            public
                          
                          
                            class
                          
                          
                             Phone {
  
                          
                          
                            private
                          
                           String name = "PhoneName"
                          
                            ;
  
                          
                          
                            private
                          
                           Integer[] screen = { 0, 0
                          
                             };
  
                          
                          
                            private
                          
                           Integer gpuType = 0
                          
                            ;

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setName(String name) {
    
                          
                          
                            this
                          
                          .name =
                          
                             name;
  }

  
                          
                          
                            public
                          
                          
                             String getName() {
    
                          
                          
                            return
                          
                          
                            this
                          
                          
                            .name;
  }

  
                          
                          
                            public
                          
                          
                            void
                          
                          
                             setScreen(Integer[] screen) {
    
                          
                          
                            this
                          
                          .screen =
                          
                             screen;
  }

  
                          
                          
                            public
                          
                          
                             Integer[] getScreen() {
    
                          
                          
                            return
                          
                          
                            this
                          
                          
                            .screen;
  }
  ......

}
                          
                        

  。

  。

指挥调度类

  。

                          
                            //
                          
                          
                             Director.java 指挥调度类,负责利用建造者建造产品,隔离需求与功能
                          
                          
                            public
                          
                          
                            class
                          
                          
                             Director {

  
                          
                          
                            //
                          
                          
                             建造phone1
                          
                          
                            public
                          
                          
                            void
                          
                          
                             buildIPhone(Builder builder) {
    builder.reset();
    Integer[] screen 
                          
                          = { 120, 500
                          
                             };
    builder.setName(
                          
                          "iPhone"
                          
                            );
    builder.setScreen(screen);
    builder.setGPU(
                          
                          100
                          
                            );
  }

  
                          
                          
                            //
                          
                          
                             建造phone2
                          
                          
                            public
                          
                          
                            void
                          
                          
                             buildHuaweiPhone(Builder builder) {
    builder.reset();
    Integer[] screen 
                          
                          = { 130, 600
                          
                             };
    builder.setName(
                          
                          "HuaweiPhone"
                          
                            );
    builder.setScreen(screen);
    builder.setGPU(
                          
                          102
                          
                            );
  }

  
                          
                          
                            //
                          
                          
                             建造phone3
                          
                          
                            public
                          
                          
                            void
                          
                          
                             buildMiPhone(Builder builder) {
    builder.reset();
    Integer[] screen 
                          
                          = { 120, 650
                          
                             };
    builder.setName(
                          
                          "MiPhone"
                          
                            );
    builder.setScreen(screen);
    builder.setGPU(
                          
                          103
                          
                            );
  }

}
                          
                        

  。

  。

测试调用

  。

                          
                            /**
                          
                          
                            
     * 建造者模式是使用多个简单的对象一步一步构建出一个复杂的对象来。
     * 分为主管类和建造这类,主管类负责具体指挥调度,建造负责具体实施。
     * 主管类通过一步一步调用各种建造者实现复杂对象。
     
                          
                          
                            */
                          
                          
                            //
                          
                          
                             声明指挥者
                          
                          
    Director director = 
                          
                            new
                          
                          
                             Director();
    
                          
                          
                            //
                          
                          
                             创建手机
                          
                          
    PhoneBuilder phoneBuilder = 
                          
                            new
                          
                          
                             PhoneBuilder();
    director.buildMiPhone(phoneBuilder);
    Phone miPhone 
                          
                          =
                          
                             phoneBuilder.getProduct();
    System.out.println(
                          
                          "miPhone:" + miPhone.getName() + " | " +
                          
                             miPhone.getGpuType().toString());
    
                          
                          
                            //
                          
                          
                             创建手册
                          
                          
    ManualBuilder manualBuilder = 
                          
                            new
                          
                          
                             ManualBuilder();
    director.buildMiPhone(manualBuilder);
    Manual manual 
                          
                          =
                          
                             manualBuilder.getProduct();
    System.out.println(
                          
                          "manual:" + manual.getName() + " | " + manual.getGpuType().toString());
                        
 

更多语言版本

不同语言实现设计模式: https://github.com/microwind/design-pattern 。

最后此篇关于【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现的文章就讲到这里了,如果你想了解更多关于【建造者设计模式详解】Java/JS/Go/Python/TS不同语言实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com