工厂方法模式介绍
工厂方法模式是创建型模式之一.在任何需要生成复杂对象的地方,都可以用工厂方法模式.比如一款产品有很多种类,如果每一个种类都用new来创建对象,那么就偏离了六大原则,所以就定义一个工厂类,通过这个类来完成产品的创建,这样当有新的产品需要生产时也只需要修改工厂类的代码.
工厂方法模式的简单实现
1.首先定义产品接口
public interface Product{
//产品的方法,由子类实现
void method();
}
2.定义具体的子类产品
public class ProductA implement Product{
public void method(){
System.out.println("我是产品A");
}
}
public class ProductB implement Product{
public void method(){
System.out.println("我是产品B");
}
}
public class ProductC implement Product{
public void method(){
System.out.println("我是产品C");
}
}
3.定义工厂接口
public interface Factory{
//创建产品的方法
<T>Product createProduct(Class<T> clazz);
}
4.创建具体的工厂类
public class CreateFactory implement Factory{
public <T extend Product> T createProduct(Class<T> clazz){
Product p =null;
try{
//通过反射动态创建对象,当然这里可以根据clazz判断,然后分别new出对象
p =(Product)Class.froName(class.getName()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return (T)p;
}
}
5.在Client利用工厂类创建具体的对象
public class Client{
public static void main(String[] args){
Factory fcatory = new CreateFactory();
Product p = factory.createProduct(ProductA.class);
p.method();
}
}
这样在实际的代码中只需要创建工厂类的对象,然后调用工厂类中创建产品的方法,根据传入的参数就可以创建对应的产品了,这样即使要创建不同的产品也只要修改createProduct的参数即可.尽可能的满足了封闭原则.
简单工厂模式
在上面的工厂方法模式中唯一麻烦点的就是还要定义工厂类的接口,创建工厂类的具体对象才能创建对应的产品.为了更加方便的调用工厂的方法.我们可以将工厂类如下定义:
“`
public class CreateFactory {
public static <T extend Product> T createProduct(Class<T> clazz){
Product p =null;
try{
//通过反射动态创建对象,当然这里可以根据clazz判断,然后分别new出对象
p =(Product)Class.froName(class.getName()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return (T)p;
}
}“`
就是去掉了工厂接口的定义,同时将创建产品的方法定义成静态的这样,在实际代码中就可以直接通过类名定义了,但是这种情况一般是适用于工厂类只有一种创建产品的方法,为了方便就这样简写的,这样的模式就是简单工厂模式.
总结
工厂模式虽然简单,但是在我们的android中确用的非常之多,比如Bitmap的创建就是用的工厂方法BitmapFactory来创建的.