BuilderPattern(23种设计模式之一)


设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则

BuilderPattern,UML抽象图百度找,代码实现如下

使用生成器模式设计一个构造复杂类的过程。

抽象生成器

package BuilderPattern;
public interface IVehicleBuilder {
    public void buildPartA();
    public void buildPartB();
    public Product getProduct();
}

具体生成器

package BuilderPattern.ConcreteBuilder;
import BuilderPattern.IVehicleBuilder;
import BuilderPattern.Product;
public class ConcreteBuilder1 implements IVehicleBuilder {
    private Product product = new Product();
    public void buildPartA() {
        // TODO Auto-generated method stub
        product.addPart("PartA");
    }

    public void buildPartB() {
        // TODO Auto-generated method stub
        product.addPart("PartB");
    }

    public Product getProduct() {
        // TODO Auto-generated method stub
        if(product!=null)
            return product;
        else
            return null;
    }
    
}
package BuilderPattern.ConcreteBuilder;
import BuilderPattern.IVehicleBuilder;
import BuilderPattern.Product;
public class ConcreteBuilder2 implements IVehicleBuilder {
    private Product product = new Product();
    public void buildPartA() {
        // TODO Auto-generated method stub
        product.addPart("PartX");
    }

    public void buildPartB() {
        // TODO Auto-generated method stub
        product.addPart("PartY");
    }

    public Product getProduct() {
        // TODO Auto-generated method stub
        if(product!=null)
            return product;
        else
            return null;
    }

}

指导者

package BuilderPattern;
public class Director {
     public void construct(IVehicleBuilder builder){
         builder.buildPartA();
         builder.buildPartB();
     }
}

具体产品

package BuilderPattern;
import java.util.ArrayList;
public class Product {
    private ArrayList<String> product = new ArrayList<String>();
    public void addPart(String partName){
         product.add(partName);
    }
    public void showProduct(){
         for (String part : product) {
             System.out.println(part);
         }
    }
}

测试类

package BuilderPattern;
import BuilderPattern.ConcreteBuilder.ConcreteBuilder1;
import BuilderPattern.ConcreteBuilder.ConcreteBuilder2;
public class Test {

    public static void main(String[] args) {
        
        // TODO Auto-generated method stub
         Director director=new Director();     //指导者,指导具体生成器构造产品
         /*
          * 生成AB
          * */
         IVehicleBuilder concreteBuilder1=new ConcreteBuilder1();
         director.construct(concreteBuilder1);
         Product product1=concreteBuilder1.getProduct();
         product1.showProduct();
         /*
          * 生成XY
          * */
         IVehicleBuilder concreteBuilder2=new ConcreteBuilder2();
         director.construct(concreteBuilder2);
         Product product2=concreteBuilder2.getProduct();
         product2.showProduct(); 
    }

}

在实际的软件系统中,各个子部分对象完全有可能通过相应的工厂方法来生成,然后再交由生成器按照特定的构建算法将其组装成一个完整的“复杂对象”。


生成器模式的本质:分离整体构建算法和部件构造表示。构建一个复杂对象,需要将整体的构建过程与复杂对象子部件的构建过程分离开来,这样才能使得程序结构更松散、易扩展,复用性好,同样也会使代码逻辑更清晰,意图更明显。生成器模式的重心还是在于分离整体构建算法与子部件的构建,分步骤构建对象只不过是整体构建算法的一个简单表现,或者说是一个附带产物。


别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。

转载于:https://www.cnblogs.com/1996jiwei/p/6490819.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值