关于工厂方法模式的Java实现

关于工厂方法模式的Java实现,可以通过以下几个步骤进行:

1. 定义抽象产品类

工厂方法模式中,抽象产品类是具体产品类的父类,规定了具体产品类的共性的属性和方法,代码如下所示:

public abstract class Product {
    public abstract void use();
}

2. 定义具体产品类

具体产品类是抽象产品类的子类,实现了抽象产品类中定义的属性和方法,这里我们定义两个具体产品类,分别为ProductA和ProductB,代码如下所示:

public class ProductA extends Product {
    public void use() {
        System.out.println("Using ProductA");
    }
}

public class ProductB extends Product {
    public void use() {
        System.out.println("Using ProductB");
    }
}

3. 定义抽象工厂类

抽象工厂类是具体工厂类的父类,抽象工厂类中定义了一个抽象方法createProduct(),该方法用于生产具体产品,代码如下所示:

public interface Factory {
    public Product createProduct();
}

4. 定义具体工厂类

具体工厂类实现了抽象工厂类中定义的抽象方法createProduct(),在该方法中实例化具体产品类,代码如下所示:

public class ProductAFactory implements Factory {
    public Product createProduct() {
        return new ProductA();
    }
}

public class ProductBFactory implements Factory {
    public Product createProduct() {
        return new ProductB();
    }
}

5. 测试工厂方法模式

下面我们可以通过一个示例来测试工厂方法模式中的类,示例代码如下所示:

public class TestFactory {
    public static void main(String[] args) {
        Factory factoryA = new ProductAFactory();
        Product productA = factoryA.createProduct();
        productA.use();

        Factory factoryB = new ProductBFactory();
        Product productB = factoryB.createProduct();
        productB.use();
    }
}

以上就是工厂方法模式的完整攻略。下面我们通过两个示例来说明工厂方法模式在代码中的应用:

示例1:

我们有一个冰箱商店,该商店供应两种品牌的冰箱,分别为Haier和Midea。下面是代码的实现:

public abstract class Fridge {
    public abstract void use();
}

public class HaierFridge extends Fridge {
    public void use() {
        System.out.println("Using HaierFridge");
    }
}

public class MideaFridge extends Fridge {
    public void use() {
        System.out.println("Using MideaFridge");
    }
}

public interface FridgeFactory {
    public Fridge createFridge();
}

public class HaierFridgeFactory implements FridgeFactory {
    public Fridge createFridge() {
        return new HaierFridge();
    }
}

public class MideaFridgeFactory implements FridgeFactory {
    public Fridge createFridge() {
        return new MideaFridge();
    }
}

public class TestFridge {
    public static void main(String[] args) {
        FridgeFactory haierFactory = new HaierFridgeFactory();
        Fridge haierFridge = haierFactory.createFridge();
        haierFridge.use();

        FridgeFactory mideaFactory = new MideaFridgeFactory();
        Fridge mideaFridge = mideaFactory.createFridge();
        mideaFridge.use();
    }
}

示例2:

我们有一个电脑商店,该商店供应两种品牌的电脑,分别为Dell和HP。下面是代码的实现:

public abstract class Computer {
    public abstract void use();
}

public class DellComputer extends Computer {
    public void use() {
        System.out.println("Using DellComputer");
    }
}

public class HPComputer extends Computer {
    public void use() {
        System.out.println("Using HPComputer");
    }
}

public interface ComputerFactory {
    public Computer createComputer();
}

public class DellComputerFactory implements ComputerFactory {
    public Computer createComputer() {
        return new DellComputer();
    }
}

public class HPComputerFactory implements ComputerFactory {
    public Computer createComputer() {
        return new HPComputer();
    }
}

public class TestComputer {
    public static void main(String[] args) {
        ComputerFactory dellFactory = new DellComputerFactory();
        Computer dellComputer = dellFactory.createComputer();
        dellComputer.use();

        ComputerFactory hpFactory = new HPComputerFactory();
        Computer hpComputer = hpFactory.createComputer();
        hpComputer.use();
    }
}

以上就是两个示例,可以看到,通过工厂方法模式,我们可以在不改变具体产品类和具体工厂类的前提下,增加新的具体产品类和具体工厂类,非常符合“开放-封闭”原则的要求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于工厂方法模式的Java实现 - Python技术站

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

相关文章

  • Java中的数组基础知识学习教程

    Java中的数组基础知识学习教程 什么是数组 数组是一种可以存储多个同类型元素的容器。在Java中,数组分为一维数组和多维数组。一维数组可以看作是含有一行元素的表格,多维数组则可以看作是含有多行多列的表格。 如何声明数组 Java中声明数组需要指定数组类型、数组名和数组长度。声明语法如下: 数组类型[] 数组名 = new 数组类型[数组长度]; 比如声明一…

    Java 2023年5月26日
    00
  • 一文搞懂Java中的注解和反射

    一文搞懂Java中的注解和反射 什么是注解? 注解是Java语言的一种特殊语法,其本身并不会对代码产生影响,它只是一种用于描述Java源代码中类、方法、变量等元素的元数据(metadata)。 Java中的注解有很多种类型,包括自定义注解和系统内置注解,比如常见的@Override和@Deprecated注解。 自定义注解可以通过注解声明的方式来定义,例如:…

    Java 2023年5月26日
    00
  • 快速定位Java 内存OOM的问题

    快速定位Java 内存OOM的问题完整攻略 什么是Java OOM? Java Out Of Memory(简称Java OOM)指的是Java虚拟机向操作系统申请内存失败,导致异常终止程序运行的问题。原因可能是Java堆内存不足,也可能是永久代、元空间等内在资源耗尽。 快速定位Java OOM的过程 1. 分析异常数据 当Java OOM产生时,JVM会把…

    Java 2023年5月27日
    00
  • Go Java算法之简化路径实例详解

    Go Java算法之简化路径实例详解 本篇文章将详细讲解如何使用Go和Java算法来简化路径。首先,我们需要了解路径简化的定义和目的。 什么是路径简化? 路径简化是将路径中冗余的部分删除,使其变得更短、更干净、更易读。例如,路径”/a/b/c/../d”可以简化为”/a/b/d”。这不仅可以节省存储空间,还可以提高代码的效率。 路径简化的目的 路径简化有多种…

    Java 2023年5月19日
    00
  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面是详细的JavaWeb实现用户登录注册功能的攻略。 1. 准备工作 在开始编写代码之前,需要做一些准备工作: 安装JDK和Tomcat 创建一个JavaWeb项目 配置Tomcat服务器 在创建JavaWeb项目时,需要引入JSP和Servlet的依赖包。 2. 搭建用户登录页面 用户登录页面可以使用HTML和JSP标签编写。用户需要输入用户名和密码,然…

    Java 2023年5月24日
    00
  • Java实现人脸识别登录、注册等功能(最新完整版)

    首先我们来介绍一下这篇文章。《Java实现人脸识别登录、注册等功能(最新完整版)》是一篇介绍如何使用Java语言实现人脸识别登录、注册等功能的文章。文章详细介绍了如何搭建环境、实现人脸注册、识别、显示等功能。下面将对文章中的内容进行详细讲解。 一、环境搭建 在文章中,作者先介绍了如何搭建Java开发环境,包括JDK、Eclipse、OpenCV等工具的安装和…

    Java 2023年5月19日
    00
  • Java中分割字符串的两种方法实例详解

    Java中分割字符串的两种方法实例详解 在Java中,经常需要对字符串进行分割操作,比如将字符串按照某个字符或者字符串进行分割,或者按照正则表达式进行分割。本文将对Java中常用的两种分割字符串的方法进行详细讲解。 方法一:使用String的split方法 String类的split方法可以将字符串按照指定的字符串或正则表达式进行分割,其语法如下: publ…

    Java 2023年5月26日
    00
  • 使用JDBC实现数据访问对象层(DAO)代码示例

    下面是使用JDBC实现数据访问对象层(DAO)代码示例的完整攻略: 1. JDBC DAO层的基本结构 在实现JDBC DAO层之前,需要先确定DAO层的基本结构。一般来说,DAO层包括以下三个部分: DAO接口,用于定义数据的增删改查操作。 DAO实现类,用于实现DAO接口,提供具体的数据访问操作。 实体类,用于存储数据库中的数据,每个实体类对应一张数据表…

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