Android设计模式

Android设计模式-4.2-工厂方法模式

2018-06-03  本文已影响66人  今阳说

1. 定义:

2. 适用场景

3. 实例演示

同样以宠物店买猫为例

  1. 创建抽象猫类
abstract class Cat {
    public abstract void show();
}
  1. 创建两个猫咪子类
class CatA extends Cat {

        @Override
        public void show() {
            LjyLogUtil.i("A-波斯猫:喵喵喵!!!");
        }
    }

 class CatB extends Cat {

        @Override
        public void show() {
            LjyLogUtil.i("B-虎斑猫:喵喵喵~~~");
        }
    }

前面这两步和简单工厂模式是一样的,工厂方法模式相对于简单工厂模式的最大优点就在于工厂类的可扩展性

  1. 创建抽象工厂类
abstract class CatFactory {
    public abstract Cat newCat();
 }
  1. 创建两个具体工厂类
class CatAFactory extends CatFactory {

        @Override
        public Cat newCat() {
            return new CatA();
        }
    }

    class CatBFactory extends CatFactory {

        @Override
        public Cat newCat() {
            return new CatB();
        }
    }
  1. 具体使用
 private void methodFactoryMethod() {

        CatAFactory catAFactory = new CatAFactory();
        catAFactory.newCat().show();

        CatBFactory catBFactory = new CatBFactory();
        catBFactory.newCat().show();

    }
  1. 也可以像下面这样用反射创建工厂类(需要知道要创建的具体实现类,耦合度高)
public class CatFactory {
        public <T extends Cat> T getCat(Class<T> c) {
            Cat cat = null;
            try {
                cat = (Cat) Class.forName(c.getName()).newInstance();
                //java.lang.InstantiationException: java.lang.Class  xxxx has no zero argument constructor
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            LjyLogUtil.i("cat:" + cat);
            return (T) cat;
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读