java设计模式 - 创建者(干货)

 深度讲解23种设计模式,力争每种设计模式都刨析到底。废话不多说,开始第二种设计模式 - 创建者。

 顾名思义,创建者模式是用来创建对象的。根据笔者的经验,这种创建模式适用于复杂对象的创建。

 我们先来看一下类图关系:

  

 当创建Person对象时(假设Person对象中有非常多的属性),而我们挨个属性设置的时候,就会非常麻烦,还有可能会出现不同属性是在不同阶段中来设置,

也就是分步来设置的时候,不但属性容易丢失,而且代码阅读会比较头疼,那么这个时候,创建者模式将会是你非常棒的选择。

 Person类如下

public class Person {
    private String name;

    private String interest;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getInterest() {
        return interest;
    }

    public void setInterest(String interest) {
        this.interest = interest;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name=‘" + name + ‘\‘‘ +
                ", interest=‘" + interest + ‘\‘‘ +
                ‘}‘;
    }
}

Person类

首先,我们可以抽象出一个接口类,提供分布创建接口。

public interface PersonBuilder {
    PersonBuilder buildBasic(String name);
    PersonBuilder buildOther(String interest);
    Person build();
}

接口类

接下来,接口实现

public class PersonSimpleBuilderImpl implements PersonBuilder {

    Person person = new Person();

    @Override
    public PersonBuilder buildBasic(String name) {
        person.setName(name);
        return this;
    }

    @Override
    public PersonBuilder buildOther(String interest) {
        person.setInterest(interest);
        return this;
    }

    @Override
    public Person build() {
        return person;
    }
}

接口实现1

public class PersonComplexBuilderImpl implements PersonBuilder {

    Person person = new Person();

    @Override
    public PersonBuilder buildBasic(String name) {
        person.setName("sys" + name);
        return this;
    }

    @Override
    public PersonBuilder buildOther(String interest) {
        person.setInterest(interest);
        return this;
    }

    @Override
    public Person build() {
        return person;
    }
}

接口实现2

Director类

public class Director {
    private PersonBuilder personBuilder;

    public Director(PersonBuilder personBuilder) {
        this.personBuilder = personBuilder;
    }

    public Person buildPersonBasic(String name){
        return personBuilder.buildBasic(name).build();
    }
    public Person buildPersonOther(String other){
        return personBuilder.buildOther(other).build();
    }
}

Director

测试类

public class Test {
    public static void main(String[] args) {
        Person person = new PersonSimpleBuilderImpl().buildBasic("张三").buildOther("篮球").build();
        System.out.println(person);
        Person person1 = new PersonComplexBuilderImpl().buildBasic("张三").buildOther("篮球").build();
        System.out.println(person1);
        Director d = new Director(new PersonComplexBuilderImpl());
        Person person2 = d.buildPersonBasic("李四");
        System.out.println(person2);
    }
}

测试类

测试结果:

 笔者个人比较喜欢这种链式调用。

创建者模式比较简单,自然而然应用即可,可以不创建Director,直接使用链式编程,具体需要看业务场景。

也许这里的例子不是100%完美,但最重要的是细细体会该设计模式解决的问题。

原文地址:https://www.cnblogs.com/x-j-p/p/12424859.html

时间: 2024-08-30 02:47:40

java设计模式 - 创建者(干货)的相关文章

折腾Java设计模式之备忘录模式

原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's internal state allowing the object to be restored to this state later. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage

Java设计模式(二)-单例模式

单例模式建议保证某个对象仅仅只有一个实例,当只有一个对象来协调整个系统的操作时,在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例,总之,选择单例模式就是为了避免不一致状态,避免政出多头. 下面是单例模式的类图:包括的private和static修饰的实例instance.一个private的构造函数.一个static的getInstance函数 单例模式主要有三种:懒汉式单例.饿汉式单例.登记式单例三种 1.饿汉式单例:在类的初始化时候,自行创建了实例 c

JAVA设计模式之 装饰模式【Decorator Pattern】

一.概述 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活.装饰模式是一种对象结构型模式.装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系.在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能. 二.适用场景 装饰原有对象.在不改变原有对象的情况下扩展增强新功能/新特征..当不能采用继承的方式对系统进行扩展或者采用继承不利于系统扩展和维护时可以使用装饰模式. 三.UML类图 四

(九)JAVA设计模式之单例模式

JAVA设计模式之单例模式 一.单例模式的介绍 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点.     全局对象和Singleton模式有本质的区别,因为大量使用全局对象会使得程序质量降低,而且有些编程语言根本不支持全局变量.最重要的是传统的全局对象并不能阻止一个类被实例化多次. 二.单例模式的特点 单例类只能有一个实例 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例.

JAVA设计模式有感

记得在大学学JAVA那阵,就觉得JAVA是一个c语言的一个包装,各种封装好的类库.功能,学习JAVA能快速上手编码.时隔8年,我感觉自己不懂JAVA. 最近看了有1个月的设计模式了,进度比较缓慢,一共才看了4个"策略模式","观察者模式","装饰者模式","工厂模式".也谈一谈自己的感受.其实这些设计模式以前也看过,当时的水准也就是硬生生记下了每个设计模式是怎么运作的,从没有想过它遵循了什么原则,达到了什么目的.因此,看过一遍

学习Java设计模式的10条建议

设计模式在整个Java的学习路线图中扮演着承上启下的作用. 在整个软件生命周期中,唯一不变的就是变化.设计模式就是要在软件设计.编码中对现有问题的一种总结,并从中寻求应对变化的策略. 自己初次接触设计模式有以下几个感觉: 内容很抽象. 示例都能看得懂,但不知道实际中如何应用. 不理解为什么要把“好好的程序”设计成这么复杂? 转眼之间到了需要自己参与需求分析.设计,并且维护之前留下的遗产代码(Legacy Code)的时候了. 再次开始学习设计模式,有了新的收获: 站在变化的角度去看,设计模式虽然

Java设计模式(五)外观模式 桥梁模式

(九)外观模式 外观模式为子系统提供一个接口,便于使用.解决了类与类之间关系的,外观模式将类之间的关系放在一个 Facade 类中,降低了类类之间的耦合度,该模式不涉及接口. class CPU { public void startup(){ System.out.println("cpu start"); } public void shutdown(){ System.out.println("cpu stop"); } } class Memory { pu

Java设计模式(六)合成模式 享元模式

(十一)合成模式 Composite 合成模式是一组对象的组合,这些对象可以是容器对象,也可以是单对象.组对象允许包含单对象,也可以包含其他组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 保证客户端调用单对象与组合对象的一致性. class TreeNode{ private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>();