使用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;
}
}
答案 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");
}
}