美文网首页程序员
工厂和抽象工厂模式

工厂和抽象工厂模式

作者: 王小冬 | 来源:发表于2018-09-21 18:04 被阅读4次

工厂和抽象工厂模式

1. 简介

先来简单说一下什么是工厂模式和抽象工厂模式:

  • 工厂模式:一般我们通过new创建一个产品类,为了简化操作我们可以创建一个工厂类,由这个工厂类负责创建所需要的产品;
  • 抽象工厂模式:如果产品的种类多了,使用一个工厂可能不够,会导致逻辑复杂,可读性差等。这个时候我们可以定义一个工厂接口,通过多个工厂实现类来处理不同的产品。

2. 普通工厂

2.1 普通工厂UML

工厂模式UML.png

2.2 普通工厂实例

产品接口:

package com.wangjun.designPattern.factory;

public interface IProduct {
    
    public String info();
    
}

产品实现类:

package com.wangjun.designPattern.factory;

public class Product1 implements IProduct {

    @Override
    public String info() {
        return "Product1";
    }

}

其余4个Product类一样,就不写了。

工厂类:

package com.wangjun.designPattern.factory;

public class ProductFactory {
    
    public static IProduct createProduct(int type) {
        
        switch(type) {
            case 1:
                return new Product1();
            case 2:
                return new Product2();
            case 3:
                return new Product3();
            case 4:
                return new Product4();
            case 5:
                return new Product5();
            default:
                System.out.println("没有此型号的产品");
                return null;
        }
    }

}

测试类:

package com.wangjun.designPattern.factory;

public class Main {

    public static void main(String[] args) {
         //根据传入的参数来创建具体的类
        IProduct product1 = ProductFactory.createProduct(1);
        System.out.println("产品名:" + product1.info());
        
        IProduct product2 = ProductFactory.createProduct(2);
        System.out.println("产品名:" + product2.info());
        
        IProduct product3 = ProductFactory.createProduct(3);
        System.out.println("产品名:" + product3.info());
    }

}

运行结果:

产品名:Product1
产品名:Product2
产品名:Product3

3. 抽象工厂

3.1 抽象工厂示意图

抽象工厂示意图.png

3.2 抽象工厂UML

抽象工厂UML.png

3.3 抽象工厂实例

工厂接口:

package com.wangjun.designPattern.abstractFactory;

public interface IFactory {
    
    public IProduct createProduct(int type);

}

工厂实现类:

package com.wangjun.designPattern.abstractFactory;

public class Factory1 implements IFactory {

    @Override
    public IProduct createProduct(int type) {
        System.out.println("工厂1生产");
        if(type == 1) {
            return new Product1();
        }else if(type == 2) {
            return new Product2();
        }else {
            System.out.println("不支持此类型的产品");
        }
        return null;
    }

}

工程2,3一样,就不写了。

产品接口:

package com.wangjun.designPattern.abstractFactory;

public interface IProduct {
    
    public String info();
    
}

产品实现类:

package com.wangjun.designPattern.abstractFactory;

public class Product1 implements IProduct {

    @Override
    public String info() {
        return "Product1";
    }

}

产品实现类2,3,4,5,6一样就不写了。

提供给外部调用的工程类:

package com.wangjun.designPattern.abstractFactory;

public class ProductFactory {
    
    public static IProduct createProduct(int type) {
        IFactory factory = null;
        
        //1,2类型使用工厂1生成;3,4类型使用工厂2生产;5,6类型使用工厂3生产
        if(type >= 1 && type <= 2) {
            factory = new Factory1();
        }else if(type >=3 && type <= 4) {
            factory = new Factory2();
        }else if(type >= 5 && type <= 6) {
            factory = new Factory3();
        }else {
            System.out.println("不支持此类型的产品");
            return null;
        }
        
        IProduct product = factory.createProduct(type);
        
        return product;
    }

}

测试类:

package com.wangjun.designPattern.abstractFactory;

public class Main {

    public static void main(String[] args) {
        IProduct product1 = ProductFactory.createProduct(1);
        System.out.println("产品名:" + product1.info());
        
        IProduct product2 = ProductFactory.createProduct(4);
        System.out.println("产品名:" + product2.info());
        
        IProduct product3 = ProductFactory.createProduct(5);
        System.out.println("产品名:" + product3.info());
    }

}

打印输出:

工厂1生产
产品名:Product1
工厂2生产
产品名:Product4
工厂3生产
产品名:Product5

相关文章

  • 【抽象工厂模式】Abstract Factory Design

    抽象工厂模式 抽象工厂模式是**Creational **模式之一 抽象工厂模式和工厂模式很相似,甚至可以说抽象工...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 抽象工厂模式(选择产品簇)

    目录 回顾众多工厂模式 抽象工厂模式的理念 抽象工厂模式与工厂方法模式的差异 怎么来实现抽象工厂模式 抽象工厂模式...

  • 设计模式(3) 抽象工厂模式

    抽象工厂模式 优化抽象工厂 异步工厂 在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式。简单工厂的职...

  • 【设计模式】抽象工厂模式

    抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是所有形态的工厂模式中最为抽象和最具...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 第3章 创建型模式-抽象工厂模式

    ■ 抽象工厂模式的优点 ■ 抽象工厂模式的缺点 ■ 抽象工厂模式的使用场景 ■ 抽象工厂 AbstractFact...

  • 设计模式-工厂模式

    工厂模式可以简单的分为三类 简单工厂 工厂 抽象工厂 本篇只记录工厂和抽象工厂。 前言 在介绍工厂模式之前,我们需...

网友评论

    本文标题:工厂和抽象工厂模式

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