SIW*_*SIW 5 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;
}
}
Run Code Online (Sandbox Code Playgroud)
工厂设计模式用于隐藏对象工厂背后的实现逻辑,其强大功能是使用继承来实现此目的。假设您有不止一种类型的人,例如 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");
}
}
Run Code Online (Sandbox Code Playgroud)