Android设计模式Android技术知识Android开发经验谈

Android设计模式之(5)----抽象工厂模式

2017-08-17  本文已影响34人  Ch3r1sh

抽象工厂模式

一个抽象的接口可以实现多个产品

一个抽象工厂可以实现多个具体工厂

例:一个公司有多个程序猿,有多个产品经理,那么程序猿下面分为Android,iOS,PHP等程序猿,产品经理也分为多个类型。在之前的工厂模式中已经建立了程序猿,这个时候在造一个产品,这个产品其实就是产品经理的角色。

1.建立产品经理的接口

public interface ProductManager {
    public  void showProductManager();//展示是什么类型的产品经理

}

2.实现具体的产品经理

public class AndroidProductManager implements  ProductManager {
    @Override
    public void showProductManager() {
        System.out.println("我是Android产品经理");
    }
}

3.建立程序猿种类的接口

public interface CodeMonkey {
    public  void showCodeMonkeyType();//展示是什么类型的程序猿
}

4.实现具体的程序猿

public class AndroidMonkeyFactory extends Factory {

    @Override
    public CodeMonkey showCodeMonkeyType() {
        return new AndroidCodeMonkey();
    }
}

5.建立抽象的工厂来生成产品经理和程序猿

public abstract  class AbstractFactory {
    public abstract <T extends CodeMonkey>T showCodeMonkeyType(Class<T> clazz) throws Exception;
    public abstract <T extends ProductManager>T showProductManager(Class<T> clazz) throws Exception;
}

6.实现具体的工厂管理产品种类的生成

public class AbstractProductManagerFactory extends AbstractFactory {
    @Override
    public <T extends CodeMonkey> T showCodeMonkeyType(Class<T> clazz) throws Exception {
        CodeMonkey codeMonkey= (CodeMonkey) clazz.forName(clazz.getName()).newInstance();
        return (T) codeMonkey;
    }

    @Override
    public <T extends ProductManager> T showProductManager(Class<T> clazz) throws Exception {
        ProductManager productManager= (ProductManager) clazz.forName(clazz.getName()).newInstance();
        return (T) productManager;
    }
}

优点:外部只需要关注产品种类,只关注与抽象接口。当业务需求,两个产品有一定的交集依赖关系社即可使用抽象模式解决。

缺点:如果新增一个产品种类,需要修改抽象工厂和工厂的实现代码,违背了开闭原则,不利于维护

github代码地址

上一篇下一篇

猜你喜欢

热点阅读