工厂方法模式——《Android源码设计模式解析与实践》读书笔记5

定义

定义一个用于创建对象的接口,让子类决定实例化哪个类。


使用场景

任何需要生成复杂对象的地方都可以使用工厂方法模式。


UML类图


工厂方法模式——《Android源码设计模式解析与实践》读书笔记5_第1张图片
工厂方法模式,多角色

关键点

(1)整个完整的工厂方法模式包括抽象工厂父类、具体工厂子类、抽象产品父类、具体产品子类。其中抽象工厂是核心,具体工厂是具体的业务逻辑,具体产品是具体工厂产生的对象。

(2)如需具体工厂子类可以返回多种具体产品,则可以利用反射的原理,通过传入不同的Class类来决定返回的类型。

(3)可以设置多个具体工厂以分开返回多种产品,此模式称为多工厂方法模式

(4)如果确定工厂只有一个,则可以将抽象工厂类简化掉,并将对应的工厂方法改为静态方法,此模式称为简单工厂模式或者静态工厂模式,他是工厂方法模式的一个弱化版本


实现方式

抽象产品父类:

public abstract class Product{

    public abstract void method();

}

具体产品子类A:

public class ProductA extends Product{

    @Override

    public void method(){}

}

具体产品子类B:

public class ProductB extends Product{

    @Override

    public void method(){}

}

抽象工厂父类

public abstract class Factory{

    public abstract Product createProduct();

    public abstract T createProductByClass(Class clz);

}

具体工厂子类A

public class FactoryA extends Factory{

    @Override

    public Product createProduct(){

        return new ProductA();

    }

    @Override

    public T createProduct(Class clz){

        return new ProductA();

    }

}

可返回多种产品工厂子类:

public class MultiProductFactory extends Factory{

    @Override

    public Product createProduct(){

        return new ProductA();

    }

    @Override

    public T createProduct(Class clz){

        Product p = null;

        try{

            p= (Product) Class.forName(clz.getName()).newInstance();

        }catch (Exception e){

        }

        return(T)p;

    }

}

静态工厂类:

public class staticFactoryB{

    public static Product createProduct(){

        return new ProductB();

    }

}


工厂方法模式的优缺点

优点

>降低了各个对象之间的耦合度

>依赖于抽象架构,有非常好的扩展性

缺点

>每次往工厂方法里添加一种新产品时就需要写一个新的产品类

>引入了抽象层,导致类结构复杂化


Android中的工厂方法模型举例

Activity的各个周期方法,即onCreate()、onResume()等一系列方法。


——2017.08.02

你可能感兴趣的:(工厂方法模式——《Android源码设计模式解析与实践》读书笔记5)