美文网首页
工厂方法模式

工厂方法模式

作者: 任教主来也 | 来源:发表于2017-03-01 13:08 被阅读29次

    工厂方法模式(Factory Pattern),是创建型设计模式之一。

    定义

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

    1. 抽象产品、具体产品 创建需要实现的类的抽象类,创建子类实现抽象方法

    2. 抽象工厂创建工厂类,定义创建对象的方法,返回要创建的对象的抽象类

    3. 具体工厂创建工厂实现类,重写创建对象方法返回确定的子类对象,,每当需要的子类不同时,都需要修改具体工厂中创建的子类对象的过程。

    4. 使用时先生成工厂实现类对象,再有工厂实现类的方法创建需要创建的对象

    使用场景

    任何需要生成复杂对象的地方,用 new 就可以完成创建的对象无需使用工厂模式

    使用反射实现对象的创建

    只有一个工厂类实现的时候,需要哪一个产品就生产哪一个,可以利用反射更简洁地生产具体产品对象

    需要哪一个类的对象就传入哪一个类的类型即可,比较简洁、动态

    public abstract class IPersonFactory {
        public abstract <T extends Person> T newPerson(Class<T> clazz);
    }
    
    public class PersonFactory extends IPersonFactory {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        public <T extends Person> T newPerson(Class<T> clazz) {
            T t = null;
            try {
                t = (T) Class.forName(clazz.getName()).newInstance();
            } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
                e.printStackTrace();
            }
            return t;
        }
    }
    
    public class Test {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        public static void main(String[] str) {
            Student s = new PersonFactory().newPerson(Student.class);
            s.run();
        }
    }
    

    多个工厂模式

    如果创建多个工厂的子类,每个工厂都负责创建一种类型,各司其职,这种拥有多个工厂的方式称为多个工厂方法模式

    简单工厂(静态工厂)

    对于最初的工厂模式,如果我们确定工厂只有一个,那么可以简化掉抽象工厂类,在工厂类中定义静态的创建对象的方法,这种方式称为简单工厂或静态工厂模式

    简单抽象工厂

    简单工厂模式中,工厂只有一个,并且创建对象的方法是静态的,如果此时我们不允许创建工厂对象的情况下,就把该工厂定义为抽象的,这种方式叫做简答抽象工厂模式

    源码中的使用

    Java 源码中

    List 和 Set 都继承 Collection 接口,而 Collection 继承 Iterable 接口,Iterable 接口定义了 iterator 方法 Iterator<T> iterator();

    ArrayList 和 HashSet 都实现各自了 iterator 方法,并且 iterator 方法的实现就是构造并返回一个 Iterator 迭代器对象。

    ArrayList 和 HashSet 的 iterator 方法其实就相当于一个工厂方法,专为 new 对象而生

    Android 源码中

    Activity 的 onCreate 方法,onCreate 方法中构造了一个 View 对象,并设置为当前界面的 ContentView 返回给 framwork 处理

    每个 Activity 的 onCreate 方法都是构造了一个 View 对象并返回给 framwork,由此可见 onCreate 中通过 setContentView 方法为每个 Activity 设置不同的 View ,这就是工厂模式结构

    每个 Activity 都相当于一个工厂,每个 onCreate 方法都是一个工厂中生成对象的方法,生成的对象就是 View 对象。

    相关文章

      网友评论

          本文标题:工厂方法模式

          本文链接:https://www.haomeiwen.com/subject/kndqgttx.html