我有域名和服务器找人建设网站,网站开发应用价值,国内的足彩网站怎么做的,马鞍山网站建设目录 建造者模式盖房项目需求基本介绍四个角色实例代码注意事项和细节抽象工厂模式 VS 建造者模式 建造者模式
盖房项目需求
传统方式#xff1a;打地基#xff0c;砌墙#xff0c;封顶
盖房子步骤
public abstract class AbstractHouse {// 地基public abstract void b… 目录 建造者模式盖房项目需求基本介绍四个角色实例代码注意事项和细节抽象工厂模式 VS 建造者模式 建造者模式
盖房项目需求
传统方式打地基砌墙封顶
盖房子步骤
public abstract class AbstractHouse {// 地基public abstract void buildBasic();// 砌墙public abstract void buildWall();// 封顶public abstract void buildFed();// 建造public void build(){buildBasic();buildWall();buildFed();}
}
盖普通房子
public class CommonHouse extends AbstractHouse{Overridepublic void buildBasic() {System.out.println(普通房子打地基);}Overridepublic void buildWall() {System.out.println(普通房子砌墙);}Overridepublic void buildFed() {System.out.println(普通房子封顶);}
}测试
public class Client {public static void main(String[] args) {new CommonHouse().build();}
}这种方式的优缺点
优点是简单好理解简单易操作设计的程序结构过于简单乜有设计缓存层对象程序的扩展和维护性不好也就是说这种设计方案把产品即房子和 创建产品的过程即建房子流程封装在一起耦合性增强了解决方案将产品和产品建造过程解耦 建造者模式
基本介绍 建造者模式又叫生成器模式是一种对象构建模式他可以将复杂对象的建造过程抽象出来抽象类别使这个抽象过程的不同实现方法可以构造出不同表现属性的对象 建造者模式是一步一步创建一个复杂的对象他允许用户只通过指定复杂对象的类型和内容就可以构建它们用户不需要知道内部的具体构建细节
四个角色
Product产品角色 一个具体的产品对象Builder (抽象建造者) 创建 Product对象的各个部件指定的接口/抽象类ConcreteBuilder (具体建造者) 实现接口构建和装配各个部件建造一个使用Builder接口的对象它主要是用于创建一个复杂的对象它主要有两个作用一个是隔离了产品和对象的生产过程另一个是负责控制产品对象的生产过程 实例代码 抽象的建造者 Build
public interface HouseBuild {House HOUSE new House();// 将建造的流程规定好void buildBasic();void buildWall();void buildRoofed();// 返回建造的房子default House buildHouse() {return HOUSE;}
}产品 具体建造者 ConcreteBuilder (具体建造者)
public class HighHouse implements HouseBuild {Overridepublic void buildBasic() {System.out.println(高楼打地基);}Overridepublic void buildWall() {System.out.println(高楼打地基);}Overridepublic void buildRoofed() {System.out.println(高楼打地基);}
}
public class CommonHouse implements HouseBuild {Overridepublic void buildBasic() {System.out.println(普通房子打地基);}Overridepublic void buildWall() {System.out.println(普通房子打地基);}Overridepublic void buildRoofed() {System.out.println(普通房子打地基);}
}
Director (指挥者)
public class HouseDirect {private HouseBuild houseBuild null;// 使用构造器注入houseBuild对象public HouseDirect(HouseBuild houseBuild) {this.houseBuild houseBuild;}public void setHouseBuild(HouseBuild houseBuild) {this.houseBuild houseBuild;}// 建造房子public House constructHouse(){houseBuild.buildBasic();houseBuild.buildWall();houseBuild.buildRoofed();return houseBuild.buildHouse();}
}测试
public class Client {public static void main(String[] args) {System.out.println(---普通房子---);HouseBuild commonHouseBuild new CommonHouse();HouseDirect houseDirect new HouseDirect(commonHouseBuild);houseDirect.constructHouse();System.out.println(---高楼---);HouseBuild highHouseBuild new HighHouse();// 修改houseDirect为HighHousehouseDirect.setHouseBuild(highHouseBuild);houseDirect.constructHouse();}
}
注意事项和细节
客户端使用程序不必知道产品内部组成的细节将产品本身与产品的创建过程解耦使得相同的创建过程可以创建不同的产品对象每一个具体建造者都相对独立而与其他的具体建造者无关因此可以很方便地替换具体建造者或增加新的具体建造者用户使用不同的具体建造者即可得到不同的产品对象可以更加精细的控制产品的创建过程将复杂产品的创建步骤分解在不同的方法中使得创建过程更加的清晰也更方便使用程序来控制创建过程增加新的具体建造者无须修改原有类库的代码指挥者类针对抽象建造者类编程系统扩展方便符合开闭原则建造者模式所创建的产品一般具有较多的共同点其组成部分相似 如果产品之间的差异性很大则不适合使用建造者模式 因此其使用范围收到一定的影响如果产品的内部变化很复杂可能会导致需要定义很多具体建造者类来实现这种变化导致系统变得很庞大因此在这种情况下要考虑是否选择建造者模式
抽象工厂模式 VS 建造者模式
抽象工厂模式实现对产品家族的创建一个产品家族是这样的一系列产品具有不通分类维度的产品组合采用抽象工厂模式不需要关心构建过程只关心什么产品由什么工厂生产即可而建造者模式则是要按照指定的蓝图建造产品他的主要目的是通过组装零配件而生产一个新产品