深入理解java三种工厂模式

深入理解Java三种工厂模式

工厂设计模式概述

工厂设计模式是一种常见的创建型设计模式,它提供了一个创建对象的接口,但是允许子类决定实例化哪个类。工厂模式可以将对象的实例化过程从客户代码中分离出来,从而实现了松耦合,提高了代码的可维护性和可扩展性。

Java中有三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式。接下来我们将逐一解析这三种模式。

简单工厂模式

定义

简单工厂模式(Simple Factory Pattern)又称为静态工厂方法模式(Static Factory Method Pattern),它属于创建型模式。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。

示例

  1. 首先定义一个形状接口(Shape)和其实现类圆形(Circle)、正方形(Square)和长方形(Rectangle)
// Shape
public interface Shape {
    void draw();
}

// Circle
public class Circle implements Shape {
    public void draw() {
        System.out.println("画圆形");
    }
}

// Square
public class Square implements Shape {
    public void draw() {
        System.out.println("画正方形");
    }
}

// Rectangle
public class Rectangle implements Shape {
    public void draw() {
        System.out.println("画长方形");
    }
}
  1. 创建一个简单工厂类(ShapeFactory),它用于根据传入的参数(shapeType)创建对应的形状对象
public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }
        return null;
    }
}
  1. 调用简单工厂类来创建形状对象,并调用draw方法
ShapeFactory shapeFactory = new ShapeFactory();

Shape circle = shapeFactory.getShape("CIRCLE");
circle.draw();

Shape square = shapeFactory.getShape("SQUARE");
square.draw();

Shape rectangle = shapeFactory.getShape("RECTANGLE");
rectangle.draw();

输出结果:

画圆形
画正方形
画长方形

工厂方法模式

定义

工厂方法模式(Factory Method Pattern)又称为工厂模式,它属于创建型模式。

工厂方法模式的核心是一个抽象工厂类,而具体的产品实现则由具体的工厂类负责生产。

示例

  1. 定义一个形状接口(Shape)和它的实现类圆形(Circle)、正方形(Square)和长方形(Rectangle)
// Shape
public interface Shape {
    void draw();
}

// Circle
public class Circle implements Shape {
    public void draw() {
        System.out.println("画圆形");
    }
}

// Square
public class Square implements Shape {
    public void draw() {
        System.out.println("画正方形");
    }
}

// Rectangle
public class Rectangle implements Shape {
    public void draw() {
        System.out.println("画长方形");
    }
}
  1. 创建一个形状工厂接口(ShapeFactory)和其实现类圆形工厂(CircleFactory)、正方形工厂(SquareFactory)和长方形工厂(RectangleFactory)。
// ShapeFactory
public interface ShapeFactory {
    Shape createShape();
}

// CircleFactory
public class CircleFactory implements ShapeFactory {
    public Shape createShape() {
        return new Circle();
    }
}

// SquareFactory
public class SquareFactory implements ShapeFactory {
    public Shape createShape() {
        return new Square();
    }
}

// RectangleFactory
public class RectangleFactory implements ShapeFactory {
    public Shape createShape() {
        return new Rectangle();
    }
}
  1. 调用具体的工厂类来创建形状对象,并调用draw方法
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.createShape();
circle.draw();

ShapeFactory squareFactory = new SquareFactory();
Shape square = squareFactory.createShape();
square.draw();

ShapeFactory rectangleFactory = new RectangleFactory();
Shape rectangle = rectangleFactory.createShape();
rectangle.draw();

输出结果:

画圆形
画正方形
画长方形

抽象工厂模式

定义

抽象工厂模式(Abstract Factory Pattern)又称为工具箱模式,它是一种设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。

如果一个系统中的产品种类需要经常扩展,那么抽象工厂模式是最适合的设计模式。

示例

  1. 定义一个形状接口(Shape)和颜色接口(Color)以及它们的实现类圆形(Circle)、正方形(Square)、长方形(Rectangle)、红色(Red)、绿色(Green)和蓝色(Blue)
// Shape
public interface Shape {
    void draw();
}

// Circle
public class Circle implements Shape {
    public void draw() {
        System.out.println("画圆形");
    }
}

// Square
public class Square implements Shape {
    public void draw() {
        System.out.println("画正方形");
    }
}

// Rectangle
public class Rectangle implements Shape {
    public void draw() {
        System.out.println("画长方形");
    }
}

// Color
public interface Color {
    void fill();
}

// Red
public class Red implements Color {
    public void fill() {
        System.out.println("填充红色");
    }
}

// Green
public class Green implements Color {
    public void fill() {
        System.out.println("填充绿色");
    }
}

// Blue
public class Blue implements Color {
    public void fill() {
        System.out.println("填充蓝色");
    }
}
  1. 创建一个抽象工厂类(AbstractFactory),它具有创建形状对象(createShape)和创建颜色对象(createColor)的抽象方法。
public abstract class AbstractFactory {
    abstract Shape createShape(String shapeType);
    abstract Color createColor(String colorType);
}
  1. 创建形状工厂类(ShapeFactory)和颜色工厂类(ColorFactory),它们都继承了抽象工厂类,分别实现了创建形状对象和颜色对象的方法。
public class ShapeFactory extends AbstractFactory {
    public Shape createShape(String shapeType) {
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }
        return null;
    }

    public Color createColor(String colorType) {
        return null;
    }
}

public class ColorFactory extends AbstractFactory {
    public Shape createShape(String shapeType) {
        return null;
    }

    public Color createColor(String colorType) {
        if (colorType.equalsIgnoreCase("RED")) {
            return new Red();
        } else if (colorType.equalsIgnoreCase("GREEN")) {
            return new Green();
        } else if (colorType.equalsIgnoreCase("BLUE")) {
            return new Blue();
        }
        return null;
    }
}
  1. 创建工厂创造器(FactoryProducer)来获取形状工厂或颜色工厂的实例。
public class FactoryProducer {

    public static AbstractFactory getFactory(String choice) {

        if (choice.equalsIgnoreCase("SHAPE")) {
            return new ShapeFactory();
        } else if (choice.equalsIgnoreCase("COLOR")) {
            return new ColorFactory();
        }

        return null;
    }
}
  1. 调用工厂创造器的静态方法getFactory() 来获取具体的工厂,并通过该工厂创建形状和颜色对象,并调用对应的方法。
//获取形状工厂
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

//获取形状为圆形的对象,并调用draw方法
Shape circle = shapeFactory.createShape("CIRCLE");
circle.draw();

//获取颜色工厂
AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

//获取颜色为红色的对象,并调用fill方法
Color red = colorFactory.createColor("RED");
red.fill();

输出结果:

画圆形
填充红色

总结

以上就是Java中的三种工厂模式的详细介绍和实现示例。简单工厂模式适用于简单情况下的对象创建,工厂方法模式适用于需要更好的代码扩展性的情况,抽象工厂模式适用于需要实现多个产品接口的复杂情况。根据业务需求来选择适合的工厂模式是非常有必要的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解java三种工厂模式 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java之int和string类型转换详解

    本文将为大家详细讲解Java中int和String类型之间的转换方法及应用场景。 一、从int转换为String 在Java中,将int类型转为String类型可以通过以下两种方式实现: 1. 使用String类的valueOf()方法 int num = 123; String str = String.valueOf(num); 2. 使用Integer…

    Java 2023年5月27日
    00
  • Spring MVC简介_动力节点Java学院整理

    Spring MVC简介 Spring MVC是一种基于Java的轻量级Web框架,用于开发Web应用程序。它基于MVC(模型-视图-控制器)设计模式,该模式将应用程序分为三个主要组成部分,以提供松散耦合的应用程序开发。Spring MVC还提供了中央调度,以便将控制器(Controller)与用户界面(View)分开。 Spring MVC架构 Sprin…

    Java 2023年5月31日
    00
  • log4j的使用详细解析

    Log4j的使用详细解析 Log4j是一个Java日志框架,用于记录应用程序的日志。它的灵活性和易用性使其成为Java应用程序中最流行的日志框架之一。 Log4j的特点 Log4j主要有以下特点: 灵活性:Log4j有各种各样的日志记录选项,以便于根据不同的应用程序需要进行定制。你可以以多种方式指定日志记录的内容、输出目的地和格式等。 性能:Log4j被设计…

    Java 2023年5月26日
    00
  • Spring MVC之WebApplicationContext_动力节点Java学院整理

    Spring MVC之WebApplicationContext 本篇攻略将详细讲解Spring MVC框架中的WebApplicationContext,帮助大家了解WebApplicationContext的作用、用法以及注意事项等内容。 什么是WebApplicationContext WebApplicationContext是Spring MVC框…

    Java 2023年6月16日
    00
  • jsp页面显示数据库的数据信息表

    下面是如何在JSP页面中显示数据库的数据信息表的完整攻略。 第一步:连接数据库 在JSP中连接数据库需要使用JDBC驱动程序。我们可以使用以下代码来连接MySQL数据库。 <%@ page import="java.sql.*" %> <% Connection con = null; Statement stmt = …

    Java 2023年6月15日
    00
  • Java中的传值与传引用实现过程解析

    标题:Java中的传值与传引用实现过程解析 传值 Java中的基本数据类型,如int、double等,都是通过传值的方式传递给方法或函数。传值就是将参与传递的变量的值复制一份给方法或函数使用,即在方法或函数内部修改该变量的值并不会影响到方法或函数外的变量。具体实现过程如下: 代码示例1: public class PassByValue { public s…

    Java 2023年5月26日
    00
  • SpringBoot3.0整合chatGPT的完整步骤

    下面我来讲解“SpringBoot3.0整合chatGPT的完整步骤”的完整攻略。 前置条件 在开始整合chatGPT之前,我们需要做好以下准备工作: 首先,需要具备SpringBoot开发基础和chatGPT的相关知识。 确保已经安装好JDK和Maven,并且配置好环境变量。 获取chatGPT的代码库,设置好相关配置。 步骤一:创建SpringBoot项…

    Java 2023年5月19日
    00
  • SpringBoot集合Mybatis过程解析

    SpringBoot集成Mybatis过程解析 1. 简介 SpringBoot是基于Spring框架的快速应用开发框架,整合了众多好用的组件,非常适合开发中小型项目。而Mybatis则是一个轻量级的ORM框架,可以让我们更加方便地操作数据库。 在本篇攻略中,我们将会详细讲解如何在SpringBoot项目中集成Mybatis,并完成对数据库的CRUD操作。 …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部