[英]Question about Java generics and design of java.util.function.Function
[英]use java.util.function.Function to implement Factory Design Pattern
使用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;
}
}
工廠設計模式用於隱藏對象工廠背后的實現邏輯,其功能是使用繼承來實現此目的。 假設您有多種類型的人,例如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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.