建造者模式:通常用于创建一些复杂的对象,这些对象内部构建间的构建顺序通常稳定,但是对象内部的构建通常面临着复杂的变化
优点:使得构建代码和表示代码分离,由于构建者隐藏了该产品是如何组装的,所以若要改变一个产品的内部表示,只需要再定义一个具体的构建者就可以了
实现:假设需要构建一个产品,需要两个零件,但是零件的构成范围很宽泛
1、产品类
/*** 产品类*/public class Product {//零件List<String> list = new ArrayList<>();public void add(String element){list.add(element);}public void builderProduct(){System.out.print("构建一个产品,它的构成部件有:");for (String element : list){System.out.print(element+" ");}System.out.println("");}}
2、建造类
/*** 建造者抽象类(必须有两个零件)*/public abstract class Builder {/*** 零件一*/public abstract void elementOne();/*** 零件二*/public abstract void elementTwo();/*** 获取产品*/public abstract Product getProduct();}/*** 建造者具体实现类1*/public class CreateBuilderOne extends Builder{Product product = new Product();public void elementOne(){product.add("零件a");}public void elementTwo(){product.add("零件b");}public Product getProduct(){return product;}}/*** 建造者具体实现类2*/public class CreateBuilderTwo extends Builder{Product product = new Product();public void elementOne(){product.add("零件x");}public void elementTwo(){product.add("零件y");}public Product getProduct(){return product;}}
3、指挥者
/*** 指挥者*/public class Director {public void construct(Builder builder){builder.elementOne();builder.elementTwo();}}
4、测试类
/*** 测试建造者模式*/public class TestBuilder {public static void main(String [] args){Director director = new Director();CreateBuilderOne one = new CreateBuilderOne();CreateBuilderTwo two = new CreateBuilderTwo();director.construct(two);Product product = two.getProduct();product.builderProduct();}}
测试结果:
建造者模式是当创建复杂对象的算法,应该独立与该对象的组成部分以及它的装配方式时需要用到的模式
