这篇文章将为大家详细讲解有关java设计模式中构造者模式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
首先看下构造这的类图
从这个图可以看出构造模式有四个模块:
Director(导演角色),调用具体构造者创建产品对象,他是负责从客户端传来指令交给具体干活的类。
Builder (抽象建造者),没有具体的业务意义,就是抽象出具体构造者的方法,简单说就是为了多态。
ConcreteBuilder(具体构造者),苦力,实打实的把零件造好,组装好
Product(抽象产品),这里仅仅是一个抽象产品,具体业务也行更加复杂
ProductXXX(具体产品),对抽象产品的实现
具体的情况也许并非如上图所示,如果确定系统开发过程中只有一个产品,那么没有必要分成这么多抽象,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设计模式中构造者模式怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。