定义
定义一个用于创建对象的接口,让子类决定实例化哪个类。
在任何需要生成复杂对象的地方,都可以使用工厂方法模式。反之,不复杂的用new即可。
类图
factory.png简单实现
产品的抽象方法
public abstract class Product {
public abstract void method();
}
具体的产品A
public class ConcreteProductA extends Product {
@Override
public void method() {
System.out.println("ConcreteProductA");
}
}
具体的产品B
public class ConcreteProductB extends Product {
@Override
public void method() {
System.out.println("ConcreteProductB");
}
}
抽象工厂类
public abstract class Factory {
public abstract <T extends Product> T createProduct(Class<T> tClass);
}
具体工厂类
public class ConcreteFactory extends Factory {
/**
* 通过反射获取类的实例
* @param tClass
* @param <T>
* @return
*/
@Override
public <T extends Product> T createProduct(Class<T> tClass) {
Product p = null;
try {
p = (Product) Class.forName(tClass.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) p;
}
}
Client中的实现:
public class Client {
public static void main(String[] args){
Factory factory=new ConcreteFactory();
Product product=factory.createProduct(ConcreteProductA.class);
product.method();
}
}
Android源码中的实现
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
onCreate()方法实际上就是一个工厂方法,在上面代码中的Oncreate方法中构造一个View对象,并设置为当前界面的setContentView返回给framework处理。如果现在有一个其他的Activity,这时我们又在其onCreate方法通过setContentView方法设置不同的View,这不就是一个工厂方法模式?
网友评论