zoukankan      html  css  js  c++  java
  • 工厂方法模式

    工厂方法模式

    一、简介

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

    二、使用场景

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

    三、工厂方法的简单实现

        private static final String TAG = "FactoryPattern";
        //抽象产品类
        public abstract class Computer {
            protected String mBoard;
            protected String mDisplay;
            protected String mOs;
            abstract void create();
        }
         //具体产品类ComputerA
         public class ComputerA extends Computer {
    
             @Override
             void create() {
                 Log.i(TAG, "create: ComputerA");
             }
         }
        //具体产品类ComputerB
        public class ComputerB extends Computer {
    
            @Override
            void create() {
                Log.i(TAG, "create: ComputerB");
            }
        }
    
        //抽象工厂类
        public abstract class ComputerFactory{
            public abstract <T extends Computer> T  createComputer(Class<T> cl);
        }
    
        //具体工厂类
        public class MyComputerFactory extends ComputerFactory{
    
            @Override
            public <T extends Computer> T createComputer(Class<T> cl) {
                try {
                    return cl.newInstance();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }
    

    我们可以根据需求通过继承抽象工厂类ComputerFactory来生成多个工厂,这又可以称为多工厂方法模式,但是如果我们简化掉抽象工厂类且只定义一个工厂类这种方式又称为简单工厂模式或静态工厂模式。

    简单工厂模式的缺点就是可实例化的类型在编译期间已经被确定,如果增加新类型,则需要修改工厂,违背了开放封闭原则(ASD) 。 简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。

    四、Android中工厂方法模式的使用

    List和set继承自Collection而Collection继承自Iterable,Iterable接口有一个iterator方法,所以List和set的子类要实现该方法,实际上List和set的子类在实现的iterator方法就是构造并返回一个迭代器对象,这可以看做是一个工厂模式。

    还有就是Activity的onCreate方法也是工厂模式的使用,在该方法中我们构造所需要的View并设置给当前界面,不同的Activity构造的View是不同的,这就是工厂模式。

  • 相关阅读:
    BAPI_TRANSACTION_COMMIT的使用方法(转)
    Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的解决办法
    在Windows XP环境中配置OPC服务器时的设置方式
    关于异常“The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine”的处理
    MSChart使用做折线图饼图(转)
    C#如何导入内文至SAP(转)
    经典Sql大全转
    工程师突击:SAP ABAP实用程序开发攻略(转)
    如何使用ExtJS Design中生成的代码
    ExtJS 4 学习(1)环境配置及注意点
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13787398.html
Copyright © 2011-2022 走看看