2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 设计模式

设计模式之建造者(Builder)模式

时间:03-07来源:作者:点击数:59

1、定义以及 UML 建模图

将一个复杂的对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示。

2、使用场景:

多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果又相同。

产品类非常复杂,或者产品类中调用顺序不同产生了不同的作用。

初始化一个对象特别复杂,如使用多个构造方法,或者说有很多参数,并且都有默认值时。

3、核心类

  • (1) 抽象产品类 computer。
  • (2) Builder 抽象 Builder,规范产品的组建,一般是由子类实现具体的组建过程。
  • (3)MacbookBuilder 具体的Builder类,具体的创建对象的类。
  • (4) Directror 统一组建过程。

以组装一台计算机为主,主要进行组装主机,设置操作系统,设置显示器。

4、具体使用

4.1 计算机抽象类 Computer

Computer.java

  • public abstract class Computer {
  • protected String mBoard;
  • protected String mDisplay;
  • protected String mOs;
  • protected Computer(){
  • }
  • public void setBoard(String board){
  • mBoard=board;
  • }
  • public void setDisplay(String display) {
  • this.mDisplay = display;
  • }
  • public abstract void setOs() ;
  • @Override
  • public String toString() {
  • return "Computer{" +
  • "mBoard='" + mBoard + '\'' +
  • ", mDisplay='" + mDisplay + '\'' +
  • ", mOs='" + mOs + '\'' +
  • '}';
  • }
  • }

4.2 具体产品类 MacBook

MacBook.java

  • public class MacBook extends Computer{
  • protected MacBook() {
  • }
  • @Override
  • public void setOs() {
  • mOs="Mac OS X 12";
  • }
  • }

4.3 抽象 Builder

Builder.java

  • public abstract class Builder {
  • abstract void buildBoard(String board);
  • abstract void buildDisplay(String display);
  • abstract void buildOs();
  • abstract Computer build();
  • }

4.4 具体的 Builder

MacBookBuilder.java

  • public class MacBookBuilder extends Builder {
  • private Computer mComputer=new MacBook();
  • @Override
  • void buildBoard(String board) {
  • mComputer.setBoard(board);
  • }
  • @Override
  • void buildDisplay(String display) {
  • mComputer.setDisplay(display);
  • }
  • @Override
  • void buildOs() {
  • mComputer.setOs();
  • }
  • @Override
  • Computer build() {
  • return mComputer;
  • }
  • }

4.5 Director类,负责具体的构造 Computer

Director.java

  • public class Director {
  • Builder mBuilser=null;
  • public Director(Builder builer) {
  • this.mBuilser = builer;
  • }
  • public void construct(String board,String display){
  • mBuilser.buildDisplay(display);
  • mBuilser.buildBoard(board);
  • mBuilser.buildOs();
  • }
  • }

4.6 具体使用

Test.java

  • public class Test {
  • public static void main(String[] args){
  • Builder builder=new MacBookBuilder();
  • Director pcDirector=new Director(builder);
  • pcDirector.construct("英特尔主板","Retina显示器");
  • Computer computer = builder.build();
  • System.out.println(computer.toString());
  • }
  • }

5.总结

为了灵活构造复杂对象,该对象会有多个成员变量,在外部调用的时候,不需要或者不方便一次性创建出所有的成员变量,在这种情况下,使用多个构造方法去构建对象,很难维护,这时候Builder设计模式解决这个问题,进行buid()方法中创建对象,并且将builder传入,该builder中,维护了传入对象的成员变量。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门