大学网站建设技术方案,福州网站设计培训,科技公司企业网站建设,wordpress上图片不显示目录 简介
四个角色
应用场景
实现步骤
和工厂模式的区别 简介
建造者模式也叫生成器模式#xff0c;是一种对象构建模式#xff1b;它可以把复杂对象的建造过程抽象出来(抽象类别)#xff0c;使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象#xff1b;…目录 简介
四个角色
应用场景
实现步骤
和工厂模式的区别 简介
建造者模式也叫生成器模式是一种对象构建模式它可以把复杂对象的建造过程抽象出来(抽象类别)使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象建造者模式是一步一步创建一个复杂的对象它允许用户只通过指定复杂对象的类型和内容就可以构建它们用户不需要知道内部的具体构建细节
四个角色
1. Product(产品角色)一个具体的产品对象
2. Builder(抽象建造者)创建一个 Product 对象的各个部件指定的接口/抽象类
3. ConcreteBuilder(具体建造者)实现接口构建和装配各个部件
4. Director(指挥者)构建一个实用 Builder 接口的对象它主要是用于创建一个复杂的对象它主要有两个作用隔离了客户和对象的生产过程负责控制产品对象的生产过程
应用场景
相同的方法不同的执行顺序产生不同的结果多个部件或零件都可以装配到对象中但是产生的结果不同产品类非常复杂或者产品类中不同的调用顺序产生不同的结果初始化一个对象特别复杂参数多而且很多参数都具有默认值
实现步骤
这里以建造房屋为例建造房屋分为 3 个步骤打地基建墙封顶
1. 新建 House.class即产品角色
/*** 房子类*/
public class House {// 地基private String foundation;// 墙private String wall;// 屋顶private String roof;public String getFoundation() {return foundation;}public void setFoundation(String foundation) {this.foundation foundation;}public String getWall() {return wall;}public void setWall(String wall) {this.wall wall;}public String getRoof() {return roof;}public void setRoof(String roof) {this.roof roof;}
}
2. 新建 HouseBuilder.class这是一个抽象类定义了建造房屋的基本流程和规范
/*** 房屋建造指挥者, 指定建房流程*/
public abstract class HouseBuilder {protected House house new House();// 打地基public abstract void buildFoundation();// 建墙public abstract void buildWall();// 封顶public abstract void buildRoof();// 建房流程public House buildHouse() {return house;}
}
3. 新建 VillaHouseBuilder.class继承 HouseBuilder.class实现具体的别墅建造过程
/*** 别墅类-实际房子建造*/
public class VillaHouse extends HouseBuilder {Overridepublic void buildFoundation() {house.setFoundation(别墅-地基30米);}Overridepublic void buildWall() {house.setWall(别墅-砖墙);}Overridepublic void buildRoof() {house.setRoof(别墅-瓦顶);}
}
4. 新建 HouseDirector.class指挥者负责具体的创建 house 的过程
/*** 指挥者, 控制房子创建流程*/
public class HouseDirector {private HouseBuilder houseBuilder;public HouseBuilder getHouseBuilder() {return houseBuilder;}public void setHouseBuilder(HouseBuilder houseBuilder) {this.houseBuilder houseBuilder;}// 具体建造过程public House constractVillaHouse() {houseBuilder.buildFoundation();houseBuilder.buildWall();houseBuilder.buildRoof();return houseBuilder.buildHouse();}
}
5. 测试一下对象的创建
public static void main(String[] args) {VillaHouse villaHouse new VillaHouse();HouseDirector houseDirector new HouseDirector();houseDirector.setHouseBuilder(villaHouse);House house houseDirector.constractVillaHouse();System.out.println(别墅建造信息: );System.out.println(house.getFoundation());System.out.println(house.getWall());System.out.println(house.getRoof());
}
其实观察上面的代码我们发现建造者模式主要是把对象的创建过程分离了创建和表示分离如果我们需要创建不同的对象只需再创建建造者和指挥者即可如果建造的流程有变化我们也只需要调整指挥者即可这在一定程度上带来了代码的臃肿但达到了解耦的效果所以这种模式适合创建复杂的对象
和工厂模式的区别
建造者模式更加注重方法的调用顺序工厂模式注重创建对象创建对象的力度不同建造者模式创建复杂的对象由各种复杂的部件组成而工厂模式创建的对象都一样关注点不一样工厂模式只需要把对象创建出来就可以了而建造者模式不仅要创建出对象还要关注对象由哪些部件组成建造者模式根据建造过程中的顺序不一样可以创建各种不同的对象