构造者模式

构造者模式

  1. 定义

    Separate the construction of a complex object from its representation so that the same construction construction process can create different representations.

    将一个复杂对象的创建过程从它的表示分离,使得同样的构建过程可以创建不同的表示;

  2. 分析

    构造者模式关注的是“零件类型和装配工艺”,不同的装配顺序将产生不同的行为,但是对象的创建必须经过装配这一过程产生;

    Client不必知道Product内部的组成细节,不同的构造者之间也是相互独立的;良好的封装性和扩展性;

    将一个复杂对象的创建过程封装起来,允许对象通过多个步骤来创建,“构建过程”是客观存在的,没有该过程就不能得到对象,实际上,构造者模式就是通过对构建过程的封装与隔离实现“创建过程从它的表示分离”;

    那么如果我们不用构建者模式,我们会怎样创建一个对象呢?直接调用构造函数、使用工厂方法,通过传入目标对象的特征以获得对象。简单对象的创建是没有问题的,但是复杂对象的创建,还应使用构造者模式。

    比如,现在需要生成一个日程安排对象:内容包括旅馆,公园,餐厅、 特殊活动的任意组合;如果只有三种不同对象,即A套餐、B套餐、C套餐的话,使用工厂模式即可;但是现在是任意组合,那么决定权便在Director了。

  3. 实现
    public class Product{
       public void doSomething(){
           //完成业务处理;
       }
    }
    public abstract class Builder{
       public abstract void setPart(){//此处可以有参数,该函数可以有多个
           //设置产品的不同部分,以获得不同的产品
       }
       public abstract Product buildProduct();
    }
    
    public class ConcreteProductBuilder extends Builder{
       private Product product=new Product();
       public void setPart(){//此处可以有参数,该函数可以有多个
           //打造不同的产品
       }
       public Product buildProduct(){
           //进行一些内部操作,然后返回
           return product;
       }
    }
    public class Director{
       private Builder builder=new ConcreteProductBuilder();
       public Product getAProduct(){
           //开始调用不同的setPart方法,然后
           return builder.buildProduct();
       }
    }

  4. 体现的面向对象设计原则

    Director类对外提供获得Product的方法;Builder类提供了构建一个对象可能用到的操作,通过继承Builder实现Builder类的可扩展性;符合单一职责原则、里氏替换原则、开闭原则、迪米特原则

猜你喜欢

转载自blog.csdn.net/slx3320612540/article/details/79394554