关于工厂方法模式的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日

相关文章

  • JUC并发编程原理精讲(源码分析)

    1. JUC前言知识 JUC即 java.util.concurrent 涉及三个包: java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 普通的线程代码: Thread Runnable 没有返回值、效率相比入 Callable 相对较低! Callable…

    Java 2023年5月4日
    00
  • Java的初始化块

    三种初始化数据域的方法: 在构造器中设置值 在声明中赋值 初始化块(initialization block) 初始化块 在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。 class Employee { private static int nextId; private int id; private String name; …

    Java 2023年4月27日
    00
  • java springmvc乱码解决归纳整理详解

    Java Spring MVC 是一种非常流行的 Java Web 开发框架。它提供了许多特性和强大的功能,但是在处理中文文本等需要编码转换的场景中,往往会遇到乱码问题。本篇攻略将详细讲解如何解决 Java Spring MVC 中的乱码问题。 1. 请求编码解决 一般情况下,在处理 HTTP 请求时,浏览器会设置请求的编码格式。但是如果请求头中没有指定编码…

    Java 2023年5月20日
    00
  • Java shiro安全框架使用介绍

    下面我将为您详细讲解Java shiro安全框架的使用介绍。 一、什么是Java Shiro安全框架 Java Shiro是一款功能强大的安全框架,提供了认证、授权、加密、会话管理等功能,可以非常方便地帮助我们完成整个安全体系的搭建。 二、Java Shiro的主要概念 Java Shiro的核心是Subject、SecurityManager、Realm和…

    Java 2023年5月20日
    00
  • Spring Security账户与密码验证实现过程

    下面我来详细讲解“Spring Security账户与密码验证实现过程”的完整攻略。 1. 配置Spring Security 首先,我们需要在项目中配置Spring Security。在Spring Boot项目中,可以通过在pom.xml文件中添加依赖,并在application.properties文件中添加配置字段的方式来完成配置。 在pom.xml…

    Java 2023年6月3日
    00
  • JAVA实现感知器算法

    实现感知器算法可以通过Java语言来完成。下面是实现感知器算法的完整攻略: 算法简介 感知器算法是一种基础的人工神经网络算法,它的运行原理是根据学习结果对指定的输出结果进行二元决策。感知器算法能够实现二分类,也就是将输入数据划分为两类,如True和False,1和0等。以下是感知器算法的主要步骤: 初始化权重 得到输入的训练数据 计算感知器输出 根据误差调整…

    Java 2023年5月18日
    00
  • JSP利用过滤器解决request中文乱码问题

    解决request中文乱码问题是Web开发中经常遇到的问题,而JSP中利用过滤器可以非常方便的解决这个问题。下面是基于JSP利用过滤器解决request中文乱码问题的完整攻略: 1. 确定过滤器需求 在使用过滤器解决request中文乱码问题之前,我们需要明确自身需求。即使在同一个项目中,不同的程序员也可能使用不同的过滤器解决request中文乱码问题。 常…

    Java 2023年6月15日
    00
  • 详解Tomcat常用的过滤器

    详解Tomcat常用的过滤器 Tomcat中的过滤器可以在请求被目标servlet或JSP之前或之后执行某些操作,如修改请求、响应或扩展请求所需的功能。在Web开发中,常用的过滤器有字符编码过滤器、登录验证过滤器、权限控制过滤器等。下面将详细介绍常用的Tomcat过滤器。 字符编码过滤器 字符编码过滤器可以设置HttpServletRequest和HttpS…

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