23种设计模式之一建造者模式

通过大牛推荐,看了这本《设计模式之禅》书籍,个人将书里的一些重点罗列出来了,如有错误地方,麻烦各位大牛告知。

23种设计模式之一建造者模式
建造者模式的定义:
建造者模式也叫做生成器模式,其定义如下:
Separate the construction of a complex object from its representaion so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)

在建造者模式中,有如下4个角色:
1.Product产品类
通常是实现了模板方法模式,也就是有模板方法和基本方法。
2.Builder抽象建造者
规范茶品的组建,一般是由子类实现。
3.ConcreteBuilder具体建造者
实现抽象类定义的所有方法,并且返回一个组建好的对象。
4.Director导演类
负责暗盘已有模块的顺序。

建造者模式通用代码

产品类
public class product {
    public void doSomething(){
        //独立业务处理
        System.out.println("独立业务处理");
    }
}

抽象建造者
public abstract class Builder {
    //设置产品的不同部分,已获得不同的产品
    public abstract void setPart();
    //建造产品
    public abstract product buildProduct();
}

具体建造者
public class ConcreteProduct extends Builder {
    private product product = new product();
    //设置产品零件
    @Override
    public void setPart() {
        /**
         * 产品类内的逻辑处理
         */
        System.out.println("产品类内的逻辑处理");
    }
    //组建一个产品
    @Override
    public product buildProduct() {
        return product;
    }
}

导演类
public class Director {
    private Builder builder = new ConcreteProduct();
    //构建不同的产品
    public product getAproduct(){
        builder.setPart();
        return builder.buildProduct();
    }
}

导演类起到封装作用,避免高层模块深入到建造者内部的实现类。当然,在建造者模式比较庞大时,导演类可以有多个。

建造者模式的应用:
优点:
1.封装性
使用建造者模式可以使客户端不必知道产品内部组成的细节。
2.建造者独立,容易扩展。
3.便于控制细节风险
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

使用场景:
1.相同的方法,不同的执行顺序,产生不同的时间结果时,可以采用建造者模式。
2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
3.产品类非常复杂,或者产品类中的调用顺序不用产生了不同的效能,这个时候使用建造者模式非常合适。
在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程。该场景只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段竟然没有发觉,而要通过建造者模式柔化创建过程,本身已经违反设计的最初目标。

注意事项:
建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂方法模式最大不同的地方,虽然同为创建类模式,但是注重点不同。

最佳实践:
再次说明,在使用建造者模式的时候考虑一下模板方法模式,别独立地思考一个模式,僵化的套用一个模式会让你受害无穷!

你可能感兴趣的:(书籍观后感)