简说生成器模式

设计模式之生成器模式

定义

生成器模式(又名建造者模式)是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 —— [ 百度百科 ]

解释说明

在生成器模式中,对复杂对象的创建,我们抽象化出统一的创建流程,在各个创建流程中,我们可以按需实现不同的业务逻辑。在对外显示中,我们使用统一的外部指导者,通过抽象化出的统一创建流程,创建复杂对象。

代码块
public class Test { 
    //生成器接口-构建统一的创建流程
    interface Builder{
        public abstract void hair();
        public abstract void clothes(); 
        public abstract void shose(); 
        public abstract Man build(); 
    }
    //具体的生成器
    class ConcreteBuilder implements Builder{
        private Man man = new Man();        
        @Override
        public Man build(){
            hair();
            clothes();
            shose();
            return this.man;
        }
        @Override
        public void hair() {    
            man.hair = "卷发";
        }
        @Override
        public void clothes() {
            man.clothes = "皮夹克";
        }
        @Override
        public void shose() {
            man.shose = "帆布鞋";
        }       
    }
    //指导者-调用生成器生成对象
    class Director{
        public Director(ConcreteBuilder concreteBuilder){
            this.concreteBuilder = concreteBuilder;
        }
        public Man returnMan(){
            return this.concreteBuilder.build();
        }
        private ConcreteBuilder concreteBuilder;

    }
    //产品类-被生成对象
    class Man{
        public String hair;
        public String clothes;
        public String shose;
        public void say(){
            System.out.println("我的外貌特征:" + hair + "," + clothes + "," + shose);
        }
    }
    //测试
    public static void main(String[] args) {
        //实例化生成器
        ConcreteBuilder concreteBuilder = new Test().new ConcreteBuilder();
        //实例化指导者
        Director director = new Test().new Director(concreteBuilder);
        //实例化现有类
        Man man = director.returnMan();
        man.say();
    }
}
代码解读

以上就是完整的生成器模式代码实例。在以上代码中,我们先抽象出一个生成器接口,此接口用于约束我们的产品(Man)类的创建流程。随后创建的具体的生成器类(ConcreteBuilder),其中我们具体实现了一个复杂(Man)对象的生成过程。比如:需要什么样的发型,需要什么样的衣服,需要什么样的鞋子。

当然,上述的生成器类(ConcreteBuilder)只是一个简单示范,在生成器模式中,该类可以有很多个,不同的生成器类具有不同的业务逻辑,从而保证了生成的产品类(Man)具有不一样的属性或者行为。

最后,我们创建一个指导类,用于调用具体的生成器类,从而标准化产品类创建的外部访问接口,同时内部可以有更加复杂的逻辑,以便满足我们调用不同的生成器类创建不同的产品。

总结

优点
  1. 使用生成器模式可以使客户端不必知道产品内部组成的细节。
  2. 具体的建造者类之间是相互独立的,对系统的扩展非常有利。
  3. 由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
试用场景
  1. 需要生成一个产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。
  2. 需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程。

你可能感兴趣的:(简说设计模式)