Android源码设计模式学习笔记-工厂方法模式

在代码中我们可以去new各种各样的对象, 比如说可以 new 大象(),new 老虎(),new 飞机() 这些,但是在使用过程中直接去new出来并不规范,我们需要更规范的调用模式,于是就会用到工厂模式.
工厂模式的uml图:


Android源码设计模式学习笔记-工厂方法模式_第1张图片
image.png

具体代码实现:

public interface Factory {
    Product createProduct();
}
public interface Product {
    void method();
}
public class ConcreteFactory implements Factory{
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}
public class ConcreteProductA implements Product{
    @Override
    public void method() {
        System.out.println("我是具体的产品A");
    }
}
public class ConcreteProductB implements Product{
    @Override
    public void method() {
        System.out.println("我是具体的产品B");
    }
}

最后调用

Factory factory = new ConcreteFactory();
Product product = factory.createProduct();
product.method();

我们也可以利用反射实现一个更简洁的调用

public interface Factory {
     T createProduct(Class clz);
}
public class ConcreteFactory implements Factory{

    @Override
    public  T createProduct(Class clz) {
        Product p = null;
        try{
            p = (Product)Class.forName(clz.getName()).newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }
        return (T)p;
    }
}

最后调用

ConcreteFactory concreteFactory = new ConcreteFactory();
ConcreteProductA concreteProductA = concreteFactory.createProduct(ConcreteProductA.class);
concreteProductA.method();

可以看出来工厂方法使得同一类产品的实例化更加清晰,文章开始提到的new 大象(),new 老虎()其实都是属于同类,我们完全可以抽象出一个Animal的接口,然后使用工厂模式去实例化这种类型的对象.

你可能感兴趣的:(Android源码设计模式学习笔记-工厂方法模式)