资讯专栏INFORMATION COLUMN

建造者模式(Builder)

chenatu / 1178人阅读

摘要:建造者模式一一般实现创建简单对象创建复杂对象调用输出缺点对象耦合度过高,简单对象,复杂对象都与调用程序耦合当简单对象组合的方式发生变化时,由其组合创建的复杂对象也跟着发生变化二建造者模式定义将一个复杂的对象的构建与它的表示分离,使得同样的构

建造者模式(Builder)

一.一般实现 1.1 创建简单对象
    public class SimpleEntity1 {
        public SimpleEntity1(){
            System.out.println("create SimpleEntity1...");
        }
    }
    
    public class SimpleEntity2 {
        public SimpleEntity2(){
            System.out.println("create SimpleEntity2...");
        }
    }
1.2 创建复杂对象
    public class ComplexEntity {
        public void createComplexEntity(SimpleEntity1 simpleEntity1, SimpleEntity2 simpleEntity2){
            System.out.println("createComplexEntity ... with simpleEntity1 AND simpleEntity2 ");
        }
    }
1.3 调用
    public static void main(String[] args) {
        SimpleEntity1 s1 = new SimpleEntity1();
        SimpleEntity2 s2 = new SimpleEntity2();
        ComplexEntity complexEntity = new ComplexEntity();
        complexEntity.createComplexEntity(s1, s2);
    }
1.4 输出
    create SimpleEntityA1...
    create SimpleEntity2...
    createComplexEntity ... with simpleEntity1 AND simpleEntity2 
1.5 缺点

对象耦合度过高,简单对象,复杂对象都与调用程序耦合.

当简单对象组合的方式发生变化时,由其组合创建的复杂对象也跟着发生变化.

二.建造者模式 2.1 定义

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

2.2 适用情况

需要生成的对象具有复杂的内部结构.

需要生成的对象内部属性本身互相依赖.

2.3 角色

Builder:创建产品对象的公共接口.

ConcreteBuilder:实现Builder接口并产生具体的简单对象,以供合成复杂对象.

Director:调用具体建造者,指导产生过程.

Product:最终产生的复杂产品对象.

三.代码实现 3.1 复杂产品对象
    public class ComplexEntity {
        public ComplexEntity(){
            System.out.println("create complexEntity ...");
        }
        public void setSimpleEntityA(ISimpleEntityA a){
            System.out.println("complexEntity set simpleEntityA ...");
        }
        public void setSimpleEntityB(ISimpleEntityB b){
            System.out.println("complexEntity set simpleEntityB ...");
        }
    }
3.2 简单产品
    public interface ISimpleEntityA {
    }
    
    public interface ISimpleEntityB {
    }
    
    public class SimpleEntityA1 implements ISimpleEntityA {
        public SimpleEntityA1(){
            System.out.println("create SimpleEntityA1 ...");
        }
    }
    
    public class SimpleEntityB1 implements ISimpleEntityB {
        public SimpleEntityB1(){
            System.out.println("create SimpleEntityB1 ...");
        }
    }
3.3 抽象Builder接口
    public interface IBuilder {
        void createSimpleEntityA();
        void createSimpleEntityB();
        ComplexEntity createComplexEntity();
    }
3.4 具体建造者对象
    public class Builder1 implements IBuilder{
        ComplexEntity complexEntity = new ComplexEntity();
        @Override
        public void createSimpleEntityA() {
            complexEntity.setSimpleEntityA(new SimpleEntityA1());
        }
        @Override
        public void createSimpleEntityB() {
            complexEntity.setSimpleEntityB(new SimpleEntityB1());
        }
        @Override
        public ComplexEntity createComplexEntity() {
            return complexEntity;
        }
    }
3.5 指导者对象
    public class Director {
        public ComplexEntity create1(){
            IBuilder builder = new Builder1();
            builder.createSimpleEntityA();
            builder.createSimpleEntityB();
            return builder.createComplexEntity();
        }
    }
3.6 调用
    public static void main(String[] args) {
        Director director = new Director();
        director.create1();
    }
3.7 输出
    create complexEntity ...
    create SimpleEntityA1 ...
    complexEntity set simpleEntityA ...
    create SimpleEntityB1 ...
    complexEntity set simpleEntityB ...
3.8 优点

易于扩展(新增具体建造者).

易于解耦(产品本身与产品创建过程).

精确控制复杂对象的创建.

3.9 缺点

范围(简单对象需有共同点).

内部变化不能过于复杂(会产生大量具体建造者).

四.源码
https://github.com/Seasons20/DisignPattern.git

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69401.html

相关文章

  • 深入理解建造模式 ——组装复杂的实例

    摘要:而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。最后通过一个套餐实例,介绍了建造者模式在实例中的基本使用手段。 历史文章回顾: 设计模式专栏 深入理解单例模式 深入理解工厂模式 历史优质文章推荐: 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 无论是在现实世界中还是在软件...

    sanyang 评论0 收藏0
  • JS 设计模式 八(建造模式

    摘要:即建造者模式可以强制实行一种分步骤进行的建造过程。指导类负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类建造者模式优点建造者模式的封装性很好。 建造者模式 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着一个复杂对象的创建工作,由于需求的变化,这个复杂对象的某些部分经常面临着剧烈的变化...

    tanglijun 评论0 收藏0
  • JavaScript设计模式系列三:建造模式

    摘要:优点建造者模式的封装性很好,对象本身与构建过程解耦。建造者模式很容易进行扩展。适用场景需要生成的对象具有复杂得内部结构且内部属性本身相互依赖建造者模式的代码实现建造者模式主要有个部分产品类建造者类指挥者类客户。建造者完成相应的部分。 建造者模式 建造者模式(builder pattern)比较简单,它属于创建型模式的一种,将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与...

    CloudDeveloper 评论0 收藏0
  • 一天一个设计模式之JS实现——建造模式

    摘要:参考文章设计模式之建造者模式一什么是建造者模式建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 参考文章:java设计模式之建造者模式 一、什么是建造者模式建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓...

    boredream 评论0 收藏0
  • 《源码中的设计模式》之建造模式——链式调用

    摘要:上期原型模式发布以后,收到了粉丝的感谢,一条创作的动力更足了。今天我们一块看一下建造者模式,同样是创建型设计模式。为我们提供了建造者模式的快速实现,要应用到实际编码中。 ...

    wind3110991 评论0 收藏0
  • Java设计模式-建造模式

    摘要:在建造者模式比较庞大时,导演类可以有多个。该种场景只能是一个补偿方法,因为一个对象不容易获得,而在设计阶段竟然没有发觉,而要通过创建者模式柔化创建过程,本身已经违反设计的最初目标。源码地址参考文献设计模式之禅 定义 Separate the construction of a complex object from its representation so that the same...

    txgcwm 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<