美文网首页
Java设计模式之抽象工厂模式

Java设计模式之抽象工厂模式

作者: BestbpF | 来源:发表于2018-08-22 21:44 被阅读6次

简述

前面我们学习过简单工厂模式,它解决了一类对象的创建问题,但是有的时候对象很复杂,数量多,还分为了好几种类别。如果只有一个工厂,面多如此多的产品,这个工厂需要实现的逻辑就太复杂了,所以我们希望把工厂分为好几个,便于产品规则的维护。设计者只需要提供给用户一个抽象工厂,抽象工厂内部会自动选择使用哪个工厂生产哪种产品

案例

  • 这里以两种工厂为例,一种生产水果,一种生产文具,代码以打印到控制台的方式来简要说明
  • demo代码可到抽象工厂模式中下载

【产品接口】

public interface IProduct {
    //案例中不提供实现类,以打印到控制台的方式说明
}

【工厂接口】

/**
 * 抽象工厂和具体工厂都要实现本接口
 */
public interface IProductFactory {
    public IProduct createProduct(String productNo);
}

【具体工厂1 - 水果】

public class ProductFactory1 implements IProductFactory {
    /**
     * @param productNo 产品编号
     * @return 本具体工厂只负责生产水果,水果编号都以A开头
     */
    @Override
    public IProduct createProduct(String productNo) {
        //这里不提供IProduct的实现类,以打印文字的方法简略表示
        if("A1".equals(productNo)){
            System.out.println("生产一个苹果");
        }else if ("A2".equals(productNo)){
            System.out.println("生产一个鸭梨");
        }else {
            System.out.println("水果工厂暂不生产该水果");
        }

        return null;
    }
}

【具体工厂2 - 文具】

/**
 * 本具体工厂只生产文具,产品编号以B开头
 */
public class ProductFactory2 implements IProductFactory {
    @Override
    public IProduct createProduct(String productNo) {
        if("B1".equals(productNo)){
            System.out.println("生产了一支笔");
        }else if ("B2".equals(productNo)){
            System.out.println("生产了一个橡皮");
        }else {
            System.out.println("本文具工厂暂不生产该文具");
        }
        return null;
    }
}

【抽象工厂】

/**
 * 抽象工厂,负责制定某个具体工厂生产某件产品
 */
public class ProductFactory implements IProductFactory {

    public IProduct createProduct(String productNo) {
        char type = productNo.charAt(0);
        IProductFactory factory = null;

        if(type == 'A'){
            factory = new ProductFactory1();
        }else if(type == 'B'){
            factory = new ProductFactory2();
        }

        if(factory != null) factory.createProduct(productNo);

        return null;
    }
}

【测试】

public class Test {
    public static void main(String[] args) {

        ProductFactory productFactory = new ProductFactory();
        productFactory.createProduct("A1");//生产一个苹果
        productFactory.createProduct("A2");//生产一个鸭梨
        productFactory.createProduct("B1");//生产了一支笔
        productFactory.createProduct("B2");//生产了一个橡皮
    }
}

相关文章

  • 代码段简单学习设计模式 -- 抽象工厂模式

    《JAVA与模式》之抽象工厂模式 大话设计模式 抽象工厂模式(Abstraci Factory): 提供一个创...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • java设计模式

    一、《JAVA与模式》之工厂方法模式 二、《JAVA与模式》之抽象工厂模式 三、《JAVA与模式》之单例模式 四、...

  • 设计模式系列

    创建型模式: 设计模式之工厂模式(Factory Pattern)设计模式之抽象工厂模式(Abstract Fac...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式之美-适配器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

网友评论

      本文标题:Java设计模式之抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/vzkuiftx.html