建造者模式

  • 定义

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

  • 使用场景

  • 相同的方法,不同的执行顺序,产生不同的事件结果时;
  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适;
  • 实现方式

利用Builder类来构造A类的一个对象,并将A类的构造方法私有化,构造函数参数只有Builder。实现代码如下:

Phone.java

package com.design.builder;

public class Phone {

   private String cpu;
   
   private int ram;
   
   private String screen;
   
   private Phone(PhoneBuilder builder) {
       this.cpu = builder.cpu;
       this.ram = builder.ram;
       this.screen = builder.screen;
   }
   
   public String getCpu() {
       return cpu;
   }
   public void setCpu(String cpu) {
       this.cpu = cpu;
   }
   public int getRam() {
       return ram;
   }
   public void setRam(int ram) {
       this.ram = ram;
   }
   public String getScreen() {
       return screen;
   }
   public void setScreen(String screen) {
       this.screen = screen;
   }
   
   public static class PhoneBuilder{
       private String cpu;
       
       private int ram;
       //default screen
       private String screen = "1280 * 720";
       
       public PhoneBuilder cpu(String cpu){
           this.cpu = cpu;
           return this;
       }
       
       public PhoneBuilder ram(int ram){
           this.ram = ram;
           return this;
       }
       
       public PhoneBuilder screen(String screen){
           this.screen = screen;
           return this;
       }
       
       public Phone build(){
           //default handle
           if (ram == 0){
               ram = 1024;
           }
           return new Phone(this);
       }
   }
 }

App.java

package com.design.builder;

import com.design.builder.Phone.PhoneBuilder;

public class App {

   public static void main(String[] args) {
       Phone iphone = new PhoneBuilder()
                       .cpu("A7")
                       .ram(2048)
                       .screen("1136 * 720")
                       .build();
   }

}
  • 总结优缺点

  • 优点
    • 良好的封装性,能够生成多种多样的对象
    • 代码简洁易读
  • 缺点
    • 编写麻烦,产生多余的Builder对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我的博客地址 建造者模式 主要参考了 /冰鉴/ 的一篇博客,觉得写的很详细,然后自己敲了一遍。学习了 设计模式之建...
    下位子阅读 3,265评论 2 6
  • 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组...
    justCode_阅读 5,867评论 1 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,312评论 19 139
  • 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程。根据产品创建过程中零件的构造是否具有...
    时待吾阅读 1,891评论 0 0
  • 再发个
    钟辽阅读 3,490评论 0 0