Builder模式中文叫作建造者模式,又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。下图是建造者模式的通用类图:
在建造者模式中,有如下4种角色:
-
<李>产品:产品角色李>
<李>建设者:抽象建造者,定义产品接口李>
<李> ConcreteBuilder:具体建造者,实现Builder定义的接口,并且返回组装好的产品李>
<李>导演:指挥者,属于这里面的老大,你需要生产什么产品都直接找它。李>
<强>
强>
<强>家装强>
家装不管是精装还是简装,它的流程都相对固定,所以它适用于建造者模式。我们就以家装为例,一起来学习了解一下建造者模式。下图是家装建造者模式简单的UML图。
<强> 1,家装对象类强>
/* * *家装对象类 */公共类的房子{//买家电 私人字符串jiadian;//买地板 私人字符串智利;//买油漆 私人字符串youqi; 公共字符串getJiadian () { 返回jiadian; } 公共空间setJiadian(字符串jiadian) { 这一点。jiadian=jiadian; } 公共字符串getDiban () { 返回智利; } 公共空间setDiban(字符串智利){ 这一点。智利=智利; } 公共字符串getYouqi () { 返回youqi; } 公共空间setYouqi(字符串youqi) { 这一点。youqi=youqi; } @Override 公共字符串toString () { 返回“{”+ “jiadian=" + jiadian \“+ +” ”,智利=" +智利\“+ +” ”,youqi=" + youqi \“+ +” '} '; } }
<强> 2,抽象建造者构建器类强>
/* * *抽象建造者 */公共接口生成器{//买家电 空白doJiadian ();//买地板 空白doDiBan ();//买油漆 空白doYouqi (); 房子getHouse (); }
<强> 3,具体建造者——简装建造者类强>
/* * *简装创建者 */公共类JianzhuangBuilder实现生成器{ 私人住宅房子=新房子(); @Override 公共空间doJiadian () { house.setJiadian(“简单家电就好”); } @Override 公共空间doDiBan () { house.setDiban(“普通地板”); } @Override 公共空间doYouqi () { house.setYouqi(“污染较小的油漆就行”); } @Override 公共房屋getHouse () { 返回房子; } }
<强> 4,具体建造者——精装建造者类强>
/* * *精装创建者 */公共类jingzhuangBuilder实现生成器{ 私人住宅房子=新房子(); @Override 公共空间doJiadian () { house.setJiadian(“二话不说,最好的”); } @Override 公共空间doDiBan () { house.setDiban(“二话不说,实木地板”); } @Override 公共空间doYouqi () { house.setYouqi(“二话不说,给我来0污染的”); } @Override 公共房屋getHouse () { 返回房子; } }
<强> 5,指挥官——家装公司类强>
/* * *家装公司,值需要告诉他精装还是简装 */公开课HouseDirector { 公共房屋建筑商(生成器生成器){ houseBuilder.doDiBan (); houseBuilder.doJiadian (); houseBuilder.doYouqi (); 返回houseBuilder.getHouse (); } }
<强> 6,测试强>
公共类应用{ 公共静态void main (String [] args) { 房子(); } 公共静态空房子(){ HouseDirector HouseDirector=new HouseDirector ();//简装 JianzhuangBuilder JianzhuangBuilder=new JianzhuangBuilder (); System.out.println(“我要简装”); System.out.println (houseDirector.builder (jianzhuangBuilder));//精装 jingzhuangBuilder jingzhuangBuilder=new jingzhuangBuilder (); System.out.println(“我要精装”); System.out.println (houseDirector.builder (jingzhuangBuilder)); } }Java构建器模式实现原理及优缺点解析