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是不同的,这就是工厂模式。

  • 相关阅读:
    git版本回退:git reset --hard 版本号
    cheerio中文文档
    疫情实时大数据报告(利用nodejs)
    Package.json 属性说明
    11 个Chrome骚技巧让你为所欲为
    vue刷新页面空白分两种情况
    修改i输入框中placeholder的样式
    input输入框显示不全是用省略号...代替
    PC端适应屏幕分辨率
    CSS设置滚动条样式
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13787398.html
Copyright © 2011-2022 走看看