Android设计模式

Android设计模式-5-抽象工厂模式

2021-01-04  本文已影响0人  今阳说

1. 定义:

2. 优缺点

  1. 降低耦合,将具体产品的创建延迟到具体工厂的子类中

  2. 易于扩展,新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可

  3. 有利于产品的一致性

  4. 不使用静态工厂方法,可以形成基于继承的等级结构。

3. 实例演示:

如下例子,就是可以方便的创建ADBCDEFG等不同的monky和dunky,但不能创建其他种类的动物

  1. 首先是基类
  abstract class Animal {
        public abstract void show();
    }

    abstract class Monky extends Animal {
        @Override
        public abstract void show();
    }

    abstract class Dunky extends Animal {
        @Override
        public abstract void show();
    }
  1. 然后创建工厂基类
 abstract class AnimalFactory {
        public abstract Monky newMonky();

        public abstract Dunky newDunky();
    }

  1. 具体的动物类
  class MonkyA extends Monky {

        @Override
        public void show() {
            LjyLogUtil.i("MonkyA:齐天大圣孙悟空");
        }
    }

    class DunkyA extends Dunky {

        @Override
        public void show() {
            LjyLogUtil.i("DunkyA:阿凡驴的提");
        }
    }
 class MonkyB extends Monky {

        @Override
        public void show() {
            LjyLogUtil.i("MonkyB:六耳弥猴桃");
        }
    }

    class DunkyB extends Dunky {

        @Override
        public void show() {
            LjyLogUtil.i("DunkyB:赶集的小毛驴");
        }
    }
  1. 具体的工厂类
  class AnimalFactoryA extends AnimalFactory {

        @Override
        public Monky newMonky() {
            return new MonkyA();
        }

        @Override
        public Dunky newDunky() {
            return new DunkyA();
        }
    }
 class AnimalFactoryB extends AnimalFactory {

        @Override
        public Monky newMonky() {
            return new MonkyB();
        }

        @Override
        public Dunky newDunky() {
            return new DunkyB();
        }
    }
  1. 使用具体的工厂类创建产品
private void methodAbstractFactoryPattern() {
       AnimalFactoryA factoryA = new AnimalFactoryA();
       factoryA.newMonky().show();
       factoryA.newDunky().show();
       AnimalFactoryB factoryB = new AnimalFactoryB();
       factoryB.newMonky().show();
       factoryB.newDunky().show();
   }
  1. 当新增具体种类C时,只需通过继承基类创建具体的动物类,继承工厂基类创建具体的工厂类即可
 class MonkyC extends Monky {

        @Override
        public void show() {
            LjyLogUtil.i("MonkyC:第三种猴子");
        }
    }

    class DunkyC extends Dunky {

        @Override
        public void show() {
            LjyLogUtil.i("DunkyC:第三种驴");
        }
    }

    class AnimalFactoryC extends AnimalFactory {

        @Override
        public Monky newMonky() {
            return new MonkyC();
        }

        @Override
        public Dunky newDunky() {
            return new DunkyC();
        }
    }

我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章

上一篇下一篇

猜你喜欢

热点阅读