济南网站制作公司,网站建设百度小程序,做网站的抬头怎么做,新闻热点事件素材工厂模式注重直接生产一个对象#xff0c;而建造者模式 注重一个复杂对象是如何组成的#xff08;过程#xff09;#xff0c;在生产每个组件时#xff0c;满足单一原则#xff0c;实现了业务拆分。 设计模式#xff0c;一定要敲代码理解
组件抽象
public interface …工厂模式注重直接生产一个对象而建造者模式 注重一个复杂对象是如何组成的过程在生产每个组件时满足单一原则实现了业务拆分。 设计模式一定要敲代码理解
组件抽象
public interface Icomponent {String position(); //材料分类 地板 屋顶 门 窗String type(); //具体材料 如 木窗 水泥屋顶BigDecimal price(); //每平方米的价格}组件实现部分展示
平开窗
/*** author ggbond* date 2024年04月02日 09:37* 平开窗*/
public class CasementWindow implements Icomponent {Overridepublic String position() {return 窗户;}Overridepublic String type() {return 平开窗;}Overridepublic BigDecimal price() {return new BigDecimal(120);}}推拉窗
/*** author ggbond* date 2024年04月02日 09:37* 推拉窗*/
public class SlidingWindow implements Icomponent {Overridepublic String position() {return 窗户;}Overridepublic String type() {return 旋转窗;}Overridepublic BigDecimal price() {return new BigDecimal(80);}
}瓦片屋顶
/*** author ggbond* date 2024年04月02日 09:36* 瓦片屋顶*/
public class TileRoof implements Icomponent {Overridepublic String position() {return 屋顶;}Overridepublic String type() {return 瓦片屋顶;}Overridepublic BigDecimal price() {return new BigDecimal(60);}
}组件聚合抽象需建造的对象
public interface Ihouse {Ihouse addDoor(Icomponent door);Ihouse addFloor(Icomponent floor);Ihouse addWindow(Icomponent window);Ihouse addRoof(Icomponent roof);String getInfo();
}组件聚合实体
public class House implements Ihouse{private HashMapString,Icomponent map;private String name;private BigDecimal area;private BigDecimal prizeBigDecimal.ZERO;private House(){};public House(float area, String name){mapnew HashMap();this.areanew BigDecimal(area);this.namename;}Overridepublic Ihouse addDoor(Icomponent door) {map.put(door,door);prizeprize.add(door.price());return this;}Overridepublic Ihouse addFloor(Icomponent floor) {map.put(floor, floor);prizeprize.add(area.multiply(floor.price()));return this;}Overridepublic Ihouse addWindow(Icomponent window) {map.put(window, window);prizeprize.add(area.multiply(window.price()));return this;}Overridepublic Ihouse addRoof(Icomponent roof) {map.put(roof, roof);prizeprize.add(area.multiply(roof.price()));return this;}Overridepublic String getInfo(){StringBuilder infonew StringBuilder(房子名称name\r\n装修面积area\r\n装修材料如下\r\nmap.get(door).type()\r\nmap.get(window).type()\r\nmap.get(roof).type()\r\nmap.get(floor).type()\r\n装修费用共计prize 元\r\n---------------------------\r\n);return info.toString();}
}建造者
负责封装实体对象
public class Builder {public Ihouse type1(float area,String name){return new House(area,name).addDoor(new WoodDoor()).addFloor(new WoodFloor()).addWindow(new SlidingWindow()).addRoof(new TileRoof());}public Ihouse type2(float area,String name){return new House(area,name).addDoor(new GlassDoor()).addFloor(new MarbleFloor()).addWindow(new CasementWindow()).addRoof(new CementRoof());}
}测试
public class Main {public static void main(String[] args) {Builder buildernew Builder();System.out.println(builder.type1(60f,ggbond_house1).getInfo());System.out.println(builder.type2(120f,ggbond_house2).getInfo());}
}结果展示
房子名称ggbond_house1
装修面积60
装修材料如下
木制门
旋转窗
瓦片屋顶
木质地板
装修费用共计12460 元
---------------------------房子名称ggbond_house2
装修面积120
装修材料如下
玻璃门
平开窗
水泥屋顶
大理石地砖
装修费用共计22930 元
---------------------------总结
建造模式把一个复杂的对象或者流程进行逐个设计使得各个部分职责划分明确。并对内部进行封装结合上述代码使用者可以不知道house消息即可通过builder进行生产不同对象实体。
代码下载
代码下载