建造者模式结构图
角色:
1、builder:建造者接口。定义了建造一个产品所必须的所有流程。所有的建造者都需要实现该类,以确保实现建造一个产品所需的流程。
2、concreteBuilder:具体建造者。每一个建造者,可以创建一种产品,产品细节在建造者中定义,因此多个产品对应多个建造者。
3、product:具体产品。
4、director:指挥者。由指挥者根据需求决定调用哪个建造者生产哪种产品。
实现:
1、product
public class Product{ List<String> parts = new List<String>(); public void add(String part){ parts.add(part); } }
2、builder
inteface Builder{ void partA();//这个产品有两个部分组成,partA void partB();//这个产品有两个部分组成,partB Product getProduct(); }
3、concreteBuilderA
public ConcreteBuilderA implement Builder{ Product p = new Product(); public void partA(){//建造A部件 p.add("A"); } public void partB(){//建造B部件 p.add("B"); } public Product getProduct(){ return p; } }
concreteBuilderB
public ConcreteBuilderB implement Builder{ Product p = new Product(); public void partA(){//建造A部件 p.add("AA"); } public void partB(){//建造B部件 p.add("BB"); } public Product getProduct(){ return p; } }
4、director
public Director{ public void buildProject(Builder b){ b.partA(); b.partB(); } }
客户端
public static void main(String[] args) { Director d = new Director(); Builder b1 = new concreteBuilderA();//建造者A建造产品,产品细节为A、B Builder b2 = new concreteBuilderA();//建造者A建造产品,产品细节为A、B d.buildProduct(b1);//建造产品 d.buildProduct(b2);//建造产品 Product p1 = b1.getProduct();//产品1 Product p2 = b2.getProduct();//产品2 }
优点:
首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。
其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。
与工厂模式区别:
建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。
时间: 2024-10-28 07:36:07