gpt4 book ai didi

java - 使用 java.util.function.Function 实现工厂设计模式

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:34 24 4
gpt4 key购买 nike

使用java.util.function.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("John");
System.out.println(p.getName());
}
}

class Person{
private String name;

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

最佳答案

工厂设计模式用于隐藏对象工厂背后的实现逻辑,其强大之处在于使用继承来实现这一点。假设您会有不止一种类型的人,例如一个 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");
}
}

关于java - 使用 java.util.function.Function 实现工厂设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com