使用java.util.function.Function实现Factory Design Pattern

时间:2017-01-28 13:35:46

标签: java design-patterns

使用java.util.function.Function实现Factory Design Pattern

是否正确

在下面的示例中,我使用了Function引用来实例化Person类型对象。

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String , Person> myFunc = (String s) -> new Person(s);
        Person p = myFunc.apply("Shan");
        System.out.println(p.getName());
    }
}

class Person{
    private String name;

    public Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }


}

1 个答案:

答案 0 :(得分:3)

工厂设计模式用于隐藏对象工厂背后的实现逻辑,其功能是使用继承来实现此目的。假设您有多种类型的人,例如一个SmartPerson和一个DumbPerson(实现相同的Person基类)。有人可能会要求工厂创建聪明或愚蠢的人,而不知道实现差异,因为它返回的所有内容都是Person对象。

您可以使用引用构造函数的函数来实例化一个人,但此模式与创建对象的位置有关,允许您隐藏某些实现逻辑。

这种隐藏在工厂后面的逻辑可以为将来节省大量时间,不同的类可以使用工厂来创建人员,因为改变创建人的方式只需要修改创建方法。工厂并不影响使用工厂的每个班级。

@Test
public void testSimpleFactory() {
    PersonFactory personFactory = new PersonFactory();
    Person person = personFactory.createPerson("dumb");
    person.doMath(); // prints 1 + 1 = 3
}


public class PersonFactory {

    public Person createPerson(String characteristic) {
        switch (characteristic) {
            case "smart":
                return new SmartPerson();
            case "dumb":
                return new DumbPerson();
            default:
                return null;
        }
    }
}

public interface Person {
    void doMath();
}

public class SmartPerson implements Person {
    @Override
    public void doMath() {
        System.out.println("1 + 1 = 2");
    }
}

public class DumbPerson implements Person {
    @Override
    public void doMath() {
        System.out.println("1 + 1 = 3");
    }
}