设计模式——建造者模式(5)

发布于:2024-10-15 ⋅ 阅读:(102) ⋅ 点赞:(0)

一、写在前面

  • 创建型模式
    • 单例模式
    • 工厂方法模式
    • 抽象工厂模式
    • 原型模式
    • 建造者模式
  • 结构型模式
  • 行为型模式

二、介绍

建造者模式主要在以下场景中得到应用:

  • 当需要创建的对象具有复杂的内部结构,且包含多个属性时,建造者模式可以将对象的构建和表示分离,使得客户端只需要关心最终的产品,而无需了解具体的构建步骤。
  • 当对象的创建过程涉及多个步骤,且这些步骤的顺序对最终对象有影响时,可以通过建造者模式来灵活控制构建顺序。
  • 当需要创建的产品具有多种表示,且这些表示可能由不同的属性组合而成时,可以使用建造者模式来创建不同的表示。通过定义多个具体的建造者,客户端可以选择不同的建造者来构建不同表示的对象。

三、思想

  • 建造者模式的思想是将对象的表示和构建分离,具体到代码中,就是在对象的属性还没有被赋值的时候,就可以表示出这个对象,可以手动控制这个对象什么时候赋值,可以用于属性较多的对象的创建
  • 代码如下:
//自行车类
public class Bike {
	private String frame;
	private String seat;
	public String getFrame() {
		return frame;
	}
	public void setFrame(String frame) {
		this.frame = frame;
	}
	public String getSeat() {
		return seat;
	}
	public void setSeat(String seat) {
		this.seat = seat;
	}
}

public abstract class Builder {
	protected Bike mBike = new Bike();
	public abstract void buildFrame();
	public abstract void buildSeat();
	public abstract Bike createBike();
}

public class MobikeBuilder extends Builder {
	@Override
	public void buildFrame() {
		mBike.setFrame("铝合金车架");
	}
	@Override
	public void buildSeat() {
		mBike.setSeat("真皮车座");
	}
	@Override
	public Bike createBike() {
		return mBike;
	}
}
//ofo单车Builder类
public class OfoBuilder extends Builder {
	@Override
	public void buildFrame() {
		mBike.setFrame("碳纤维车架");
	}
	@Override
	public void buildSeat() {
		mBike.setSeat("橡胶车座");
	}
	@Override
	public Bike createBike() {
		return mBike;
	}
}

public class Director {
	private Builder mBuilder;
	public Director(Builder builder) {
		mBuilder = builder;
	}
	public Bike construct() {//核心思想!
		mBuilder.buildFrame();
		mBuilder.buildSeat();
		return mBuilder.createBike();
	}
}

public class Client {
	public static void main(String[] args) {
		showBike(new OfoBuilder());
		showBike(new MobikeBuilder());
	}
	private static void showBike(Builder builder) {
		Director director = new Director(builder);
		Bike bike = director.construct();
		System.out.println(bike.getFrame());
		System.out.println(bike.getSeat());
	}
}
	

网站公告

今日签到

点亮在社区的每一天
去签到