1.传统方式完成盖房项目
1.需求说明
![image-20240528210343027](https://img-blog.csdnimg.cn/img_convert/41c48860bab546e95599281b84d617fa.png)
2.类图
![image-20240528211841558](https://img-blog.csdnimg.cn/img_convert/b935e4250ee015d391925f627433302a.png)
3.目录结构
![image-20240528211944320](https://img-blog.csdnimg.cn/img_convert/c7e433e67758f9d464baa2fc60257225.png)
4.代码实现
1.AbstractHouse.java
package com.sun.tradition;
public abstract class AbstractHouse {
public abstract void buildBasic();
public abstract void buildwalls();
public abstract void roofed();
public void build() {
buildBasic();
buildwalls();
roofed();
}
}
2.CommonHouse.java
package com.sun.tradition;
public class CommonHouse extends AbstractHouse{
@Override
public void buildBasic() {
System.out.println("普通房子打地基");
}
@Override
public void buildwalls() {
System.out.println("普通房子砌墙");
}
@Override
public void roofed() {
System.out.println("普通房子封顶");
}
}
3.Client.java
package com.sun.tradition;
public class Client {
public static void main(String[] args) {
CommonHouse commonHouse = new CommonHouse();
commonHouse.build();
}
}
4.结果
![image-20240528212047860](https://img-blog.csdnimg.cn/img_convert/5e626b10889aca1c49a1a5dfdecb7b0c.png)
5.优缺点分析
![image-20240528212325246](https://img-blog.csdnimg.cn/img_convert/194c94f4db1c05fafbe438c5468ce7d6.png)
2.建造者模式
1.基本介绍
![image-20240529192602105](https://img-blog.csdnimg.cn/img_convert/b965889f103b72e960a9eb4c05e6272b.png)
2.建造者模式的四个角色
![image-20240529192803538](https://img-blog.csdnimg.cn/img_convert/caa458ba3a1d0c6d12e69cb11114fa5b.png)
3.类图
![image-20240529194432242](https://img-blog.csdnimg.cn/img_convert/dc3b65b816f767e680e6383424ed1586.png)
4.代码实现
1.House.java
package com.sun.impove;
public class House {
private String basic;
private String wall;
private String roofed;
public String getBaise() {
return basic;
}
public void setBaise(String basic) {
this.basic = basic;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
public String getRoofed() {
return roofed;
}
public void setRoofed(String roofed) {
this.roofed = roofed;
}
}
2.HouseBuilder.java
package com.sun.impove;
public abstract class HouseBuilder {
protected House house = new House();
public abstract void buildBasic();
public abstract void buildwalls();
public abstract void roofed();
public House buildHouse() {
return house;
}
}
3.HighHouse.java
package com.sun.impove;
public class HighHouse extends HouseBuilder{
@Override
public void buildBasic() {
System.out.println("高房子打地基");
}
@Override
public void buildwalls() {
System.out.println("高房子砌墙");
}
@Override
public void roofed() {
System.out.println("高房子封顶");
}
}
4.CommonHouse.java
package com.sun.impove;
public class CommonHouse extends HouseBuilder{
@Override
public void buildBasic() {
System.out.println("普通房子打地基");
}
@Override
public void buildwalls() {
System.out.println("普通房子砌墙");
}
@Override
public void roofed() {
System.out.println("普通房子封顶");
}
}
5.HouseDirector.java
package com.sun.impove;
public class HouseDirector {
private HouseBuilder houseBuilder;
public HouseDirector(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public void setHouseBuilder(HouseBuilder houseBuilder) {
this.houseBuilder = houseBuilder;
}
public House constructHouse() {
houseBuilder.buildwalls();
houseBuilder.buildBasic();
houseBuilder.roofed();
return houseBuilder.buildHouse();
}
}
6.Client.java
package com.sun.impove;
public class Client {
public static void main(String[] args) {
HouseDirector houseDirector = new HouseDirector(new HighHouse());
House house = houseDirector.constructHouse();
}
}