Android设计模式~~~工厂方法模式

来源:互联网 发布:网络主播招聘文案 编辑:程序博客网 时间:2024/06/06 03:05

一.工厂方法模式介绍

是创建设计模式之一。

二. 定义

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

三. 使用场景

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

四. 简单的例子

抽象的产品类

public abstract class Product {    public abstract  void method();}

具体的产品类A

public class ProductA extends Product {    private static final String TAG = "ProductA";    @Override    public void method() {        Log.d(TAG,"AAAAAAAAAA");    }}
具体的产品类B

public class ProductB extends Product {    private static final String TAG = "ProductB";    @Override    public void method() {        Log.d(TAG, "BBBBBBBBBB");    }}
抽象工厂

public abstract class Factory {    public abstract Product createProductA();    public abstract Product createProductB();}
具体工厂

public class ProductFactory extends Factory {    @Override    public Product createProductA( ) {     return new ProductA();    }    @Override    public Product createProductB() {        return new ProductB();    }}
具体实现

  Product productA = factory.createProductA();        Product productB = factory.createProductB();        productA.method();        System.out.println("-------------------------------------");        productB.method();

log日志:

12-05 10:11:45.846 31120-31120/wang.li.com.factorydemo D/ProductA: AAAAAAAAAA12-05 10:11:45.846 31120-31120/wang.li.com.factorydemo I/System.out: -------------------------------------12-05 10:11:45.846 31120-31120/wang.li.com.factorydemo D/ProductB: BBBBBBBBBB

. 这个例子很简单,主要分为四大模块,一是抽象工厂,其为工厂模式核心;二是工厂的具体实现;三是抽

象产品,也就是工厂模式创建产品的父类;四是具体产品,为实现抽象产品某个具体的产品对象。


工厂模式大概就是这样工作的,当然我们也可以通过反射来实现,更加的方便,下面修改工厂方法,

如下:

抽象工厂类

public abstract class Factory {    /**     *      抽象方法     *      具体实现是有调用者决定     * @param tClass  所要产生类型     * @param <T> 所要产生的对象     * @return     */    public abstract <T extends Product> T CreateProduct(Class<T> tClass);}
具体实现类

public class ProductFactory extends Factory {    @Override    public <T extends Product> T CreateProduct(Class<T> tClass) {        Product product = null;        try {//            boolean b = Class.forName(tClass.getName()).newInstance() instanceof Product;            product = (Product) Class.forName(tClass.getName()).newInstance();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        return (T) product;    }}
调用代码

  Factory factory = new ProductFactory();        ProductA productA = factory.CreateProduct(ProductA.class);        ProductB productB = factory.CreateProduct(ProductB.class);        productA.method();        System.out.println("-------------------------------------");        productB.method();
输出log

12-05 10:39:45.451 24699-24699/wang.li.com.factorydemo D/ProductA: AAAAAAAAAA12-05 10:39:45.452 24699-24699/wang.li.com.factorydemo I/System.out: -------------------------------------12-05 10:39:45.452 24699-24699/wang.li.com.factorydemo D/ProductB: BBBBBBBBBB

好了 工厂模式大概思路就是这样的

0 0
原创粉丝点击