java设计模式中构造者模式怎么用

发布时间:2021-11-17 14:49:09 作者:小新
来源:亿速云 阅读:231

这篇文章将为大家详细讲解有关java设计模式中构造者模式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。


首先看下构造这的类图

java设计模式中构造者模式怎么用


从这个图可以看出构造模式有四个模块:

具体的情况也许并非如上图所示,如果确定系统开发过程中只有一个产品,那么没有必要分成这么多抽象,Builder 转化为一个具体构造者,直接引入 Product 进行处理也是可以的。

接下来还是来点代码看看具体构造者模式是怎么玩的。

public abstract class Product{//提供公共部分}public class ProductOne extends Product{//具体第一个产品相关属性方法}public class ProductOne extends Product{//具体第二个产品相关属性方法}

上面把产品类进行了设定,可以在抽象产品中实现一些共用的,再声明一些抽象方法迫使子类必须实现。接下看下 Builder 这块。

public interface Builder{  public void buildOne();  public void buildTwo();  public Product retrievePro();
}

publc class ConcreteBuilderOne implements Builder{  private Product product=new ProductOne();  public void buildOne(){  //打造第一个零件
  }  public void buildTwo(){  //打造第二个零件
  }  public Product retrievePro(){  //组装出产品2
  return product;
  }
}

publc class ConcreteBuilderTwo implements Builder{  private Product product=new ProductTwo();  public void buildOne(){  //打造第一个零件
  }  public void buildTwo(){  //打造第二个零件
  }  public Product retrievePro(){  //组装出产品2
  return product;
  }
}

最终导演出来进行组织下具体产品,给客户端提供友好接口

public class Director{  private Builder builder;  //这里可以结合工厂模式
  public void construct(String type){    if("one".equals(type)){
      builder=new ConcreteBuilderOne()
      builder.buildOne();
      builder.buildTwo();
      builder.retrievePro();
    }else if("two".equals(type)){
      builder=new ConcreteBuilderTwo()
      builder.buildOne();
      builder.buildTwo();
      builder.retrievePro();
    }else{

    }
  }
}

上述也许过于公式化,举个例子,有个人,姑且叫他东郭先生(还没有遇到狼)吧,他要盖房子,于是他找了张三打地基,李四砌墙,王五铺瓦,最终东郭先生就盖好了房子,图例来表示如下

java设计模式中构造者模式怎么用

东郭先生就是一个导演的角色,而张三李四王五就是具体的构造者角色,东郭将盖房子这个事分别交给他们三个来完成,最后自己放个炮仗就说自己盖好房子了。

构造者模式是在构造比较复杂对象,并且该对象可以拆分多个,每个拆分也是个对象或组成部分。可以对各个步骤进行依赖,也就是分步骤进行,如盖房子,先打地基,然后砌墙,最后铺瓦,这个顺序不可错(导演的功能),因此在一个属性在被赋值之前必须把另外一个属性也要赋值这样的情况,用构造者很好使。

关于“java设计模式中构造者模式怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

推荐阅读:
  1. 折腾Java设计模式之建造者模式
  2. 折腾Java设计模式之中介者模式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:mybatis用到的设计模式有哪些

下一篇:jquery如何获取tr里面有几个td

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》