您的位置:首页 > 新闻 > 资讯 > 建造者模式

建造者模式

2025/3/13 21:13:28 来源:https://blog.csdn.net/m0_64372868/article/details/140245089  浏览:    关键词:建造者模式

文章目录

  • 建造者模式
    • 建造者模式的角色
    • 案例
    • 代码
      • 定义产品
      • 定义抽象建造者以及具体建造者
      • 定义指挥者
      • 客户端使用
      • 输出结果

建造者模式

建造者模式属于创造型的模式,用于创建复杂对象,将创建复杂对象的逻辑与对象本身表示分离出来,比如宝马这个产品,需要构建方向盘,轮胎,后备箱等等复杂逻辑操作,就可以使用建造者模式。

建造者主要是想把复杂对象的建造过程以及对象本身表达分离出来。将变化的代码从不变的代码中分离出来,起到代码的复用性。

实际案例:StringBuild 的源码

建造者模式的角色

  • 具体产品:一个具体产品的表示
  • 抽象建造:定义产品建造过程中相关的方法,
  • 具体建造:实现抽象建造,定义产品具体的建造。
  • 指挥者:用于建造对象,提供对象的返回,关注于产品建造的顺序,不关注产品的具体建造。

案例

image-20240707131043783

代码

定义产品

/***  产品** @author: Hui**/
@Data
public class House {private String bisic;private String wall;private String roof;}

定义抽象建造者以及具体建造者

/***  抽象建造者** @author: Hui**/
public abstract class HouseBuild {private House house = new House();public abstract void buildBasic();public abstract void buildWalls();public abstract void roofed();public House buildHouse(){return house;}}
/*** 具体建造者:普通房子** @author: Hui**/
public class CommonHouse extends HouseBuild {@Overridepublic void buildBasic() {System.out.println(" 普通房子打地基 5 米 ");}@Overridepublic void buildWalls() {System.out.println(" 普通房子砌墙 10cm ");}@Overridepublic void roofed() {System.out.println(" 普通房子封顶 ");}
}package build;/***  具体建造者:高楼** @author: Hui**/
public class HighHouse extends HouseBuild{@Overridepublic void buildBasic() {System.out.println(" 高楼打地基 100 米 ");}@Overridepublic void buildWalls() {System.out.println(" 高楼砌墙 ");}@Overridepublic void roofed() {System.out.println(" 高楼封顶-透明顶 ");}
}

定义指挥者

/***  指挥者:用于返回创建对象,设置对象创建的顺序** @author: Hui**/
public class HouseDirector {//聚合抽象建造者private HouseBuild houseBuild;//使用构造方法来设置抽象建造者public HouseDirector(HouseBuild houseBuild){this.houseBuild = houseBuild;}//使用 set 方法来设置抽象建造者public void setHouseBuild(HouseBuild houseBuild){this.houseBuild = houseBuild;}//提供返回产品对象的方法。public House buildHouse(){houseBuild.buildBasic();houseBuild.buildWalls();houseBuild.roofed();return houseBuild.buildHouse();}

客户端使用

/***  客户端** @author: Hui**/
public class Client {public static void main(String[] args) {//建造普通房子System.out.println("建造普通房子");HouseDirector houseDirector = new HouseDirector(new CommonHouse());House house = houseDirector.buildHouse();
//        System.out.println(house);System.out.println("------------------------------");//建造高楼System.out.println("建造高楼");houseDirector.setHouseBuild(new HighHouse());House house1 = houseDirector.buildHouse();
//        System.out.println(house1);}}

输出结果

image-20240707132707564

d(new HighHouse());
House house1 = houseDirector.buildHouse();
// System.out.println(house1);
}

}


### 输出结果[外链图片转存中...(img-fqB3aKVI-1720330094469)]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com