工厂和抽象工厂模式

黑暗森林
• 阅读 1873

工厂和抽象工厂模式

1. 简介

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

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

2. 普通工厂

2.1 普通工厂UML

工厂和抽象工厂模式

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 抽象工厂示意图

工厂和抽象工厂模式

3.2 抽象工厂UML

工厂和抽象工厂模式

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
点赞
收藏
评论区
推荐文章
happlyfox happlyfox
4年前
笑说设计模式-小白逃课被点名
关于我简介工厂模式(FactoryPattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是通过使用一个共同的接口来指向新创建的对象。分类工厂模式可以分为三种,其中简单工厂一般不被认为是一种设计模式,可以将其看成是工厂方法的一种特殊
zdd小小菜鸟 zdd小小菜鸟
2年前
创建型-2-抽象工厂模式( Abstract Factory Pattern )
创建型2抽象工厂模式(AbstractFactoryPattern)抽象工厂模式(AbstractFactoryPattern)是围绕一个超级工厂创建其他工厂tex该超级工厂又称为其他工厂的工厂在抽象
Wesley13 Wesley13
3年前
Java设计模式之三种工厂模式
工厂模式实现了创建者和调用者的分离,实现了更好的解耦。详细分类:1)简单工厂模式(静态工厂模式);2)工厂方法模式;3)抽象工厂模式面向对象设计的基本原则:1)      OCP(开闭原则,OpenClosedPrinciple):一个软件的实体应当对扩展开放,对修改关闭。2)      
Wesley13 Wesley13
3年前
Unity C# 设计模式(二)简单工厂模式
定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该
Wesley13 Wesley13
3年前
Java描述设计模式(04):抽象工厂模式
一、抽象工厂模式1、生活场景汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂。2、抽象工厂模式1.抽象工厂模式:定义了一个interface用于创建相关对象或相互依赖的对象,而无需指明具体的类;2.抽象工厂模式可以
Wesley13 Wesley13
3年前
Java进阶篇设计模式之三
前言在上一篇(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxuwujing%2Fp%2F9363142.html)中我们学习了工厂模式,介绍了简单工厂模式、工厂方法和抽象工厂模式。本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式。
Stella981 Stella981
3年前
Python之设计模式
一、设计模式分类a、创建型模式简单工厂模式一、内容不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。二、角色工厂角色(Creator)抽象产品角色(Product)具体产品角色(ConcreteProduct)
Wesley13 Wesley13
3年前
C#设计模式 —— 工厂模式
。  工厂模式同样是项目中最常用的设计模式,工厂模式中又分为简单工厂,工厂方法,抽象工厂。下面我们由简单的开始逐一介绍。1.简单工厂模式  简单工厂又被称为静态工厂,在设计模式中属于创建型模式。主要解决的问题是封装了实例化的过程,通过传入参数来获不同实例。下面我们举一个项目中可能会用到的例子。  假设我们程序的数据保存在几个不同
Wesley13 Wesley13
3年前
Java设计模式
模式描述工厂方法模式提供一个用于创建产品的接口,由实现类决定实现哪些产品。工厂方法模式使一个类的实例化延迟到子类,并且只适用于一个产品的等级结构。优点可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口(抽象产品),产品实现类如何改动与消费者完全无关。例子还是以之前简单工厂的手机为案例:/
Wesley13 Wesley13
3年前
23种设计模式(面向对象语言)
一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建、组合和表示方式。所有的创建型模式都有两个主要功能:  1.将系统所使用的具体类的信息封装起来  2.隐藏
Wesley13 Wesley13
3年前
C++ 常用设计模式(学习笔记)
设计模式1、工厂模式在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。1.1、简单工厂模式主要特点是需要在工厂类中做判断,从而创造相应的产品,当