Intent:
针对问题:在编码时期不能预见需要创建那种类型的实例
解决方法:传递不同的参数动态创建不同的对象
实现步骤:
1,抽象产品类:所需要创建类的超类
2,具体产品类:继承抽象产品类,根据需要重写超类
3,产品工厂类:负责根据提供的参数创建对应的实例对象
例:
抽象产品类
package simplefactory;
/**
* 抽象产品类
*/
public interface Product {
public void say();
}
具体产品类
package simplefactory;
/**
* 具体类1
*/
public class English implements Product {
public void say() {
System.out.println("hello,word!");
}
}
package simplefactory;
/**
* 具体类2
*/
public class Chinese implements Product {
public void say() {
System.out.println("你好,世界!");
}
}
package simplefactory;
/**
* 具体类3
*/
public class Korean implements Product {
public void say() {
System.out.println("안녕, 세상!");
}
}
产品工厂类
package simplefactory;
/**
* 产品工厂类
*/
public class ProductFactory {
public Product createProduct(String language) {
switch(language) {
case "Chinese":
return new Chinese();
case "Korean":
return new Korean();
default:
return new English();
}
}
}
测试:
package simplefactory;
public class Test {
public static void main(String[] args) {
ProductFactory factory = new ProductFactory();
Product product = factory.createProduct("Chinese");
product.say();
System.out.println("类名:"+product.getClass().getName());
}
}
输出结果:
你好,世界!
类名:simplefactory.Chinese