【Java设计模式】② 简单工厂模式

简介: 工厂模式分为**简单工厂模式**,**工厂方法模式**和**抽象工厂模式**,它们都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,目的是降低系统中代码耦合度,并且增强系统的扩展性。

简单工厂模式

1、简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。
2、简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)。
3、在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。

简单工厂模式包含如下角色:

  • Factory(工厂角色):工厂角色负责实现创建所有实例的内部逻辑
  • Product(抽象产品角色):抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
  • ConcreteProduct(具体产品角色):具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

在这里插入图片描述

优点

  1. 对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责
  2. 客户端无需知道所创建具体产品的类名,只需知道参数即可。

缺点

  1. 工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

应用场景

  1. 产品种类相对较少的情况下,使用简单工厂模式。在简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象,就可以得到一个想要的产品。

实现

使用简单工厂模式模拟工厂生产手机,如果传入参数HuaWei,则返回一个HuaWei对象,如果传入参数XiaoMi,则返回一个XiaoMi对象。并且调用他们的方法。
  1. 定义一个接口
public interface Phone {
    //打电话的方法
    public void call();
    //发短信的方法
    public void message();
}
  1. 创建两个接口的实现类
public class HuaWei implements Phone{
    @Override
    public void call() {
        System.out.println("Using a Huawei phone to make calls");
    }

    @Override
    public void message() {
        System.out.println("Use huawei mobile phones to send short messages");

    }
}
public class XiaoMi implements Phone{
    @Override
    public void call() {
        System.out.println("Using a XiaoMi phone to make calls");
    }

    @Override
    public void message() {
        System.out.println("Use XiaoMi mobile phones to send short messages");

    }
}
  1. 创建一个工厂
public class SimpleFactory {

    public Phone usePhone(String type){
        if ("HuaWei".equalsIgnoreCase(type)){
            return new HuaWei();
        }else if ("XiaoMi".equalsIgnoreCase(type)){
            return new XiaoMi();
        }else{
            System.out.println("没有该品牌的手机!!!");
            return null;
        }

    }

}
  1. 测试
public class Test {
    public static void main(String[] args) {

        SimpleFactory factory = new SimpleFactory();
        Phone huaWei = factory.usePhone("HuaWei");
        Phone xiaoMi = factory.usePhone("XiaoMi");
        huaWei.call();
        huaWei.message();
        xiaoMi.call();
        xiaoMi.message();
        Phone vivo = factory.usePhone("Vivo");
    }
}

在这里插入图片描述

相关文章
|
8天前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
12 3
|
13天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
10天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
24 0
|
13天前
|
设计模式 Java
Java设计模式
Java设计模式
22 0
|
16天前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
25 0
|
16天前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
32 0
|
16天前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
32 0
|
4天前
|
安全 Java UED
Java中的多线程编程:从基础到实践
本文深入探讨了Java中的多线程编程,包括线程的创建、生命周期管理以及同步机制。通过实例展示了如何使用Thread类和Runnable接口来创建线程,讨论了线程安全问题及解决策略,如使用synchronized关键字和ReentrantLock类。文章还涵盖了线程间通信的方式,包括wait()、notify()和notifyAll()方法,以及如何避免死锁。此外,还介绍了高级并发工具如CountDownLatch和CyclicBarrier的使用方法。通过综合运用这些技术,可以有效提高多线程程序的性能和可靠性。
|
4天前
|
缓存 Java UED
Java中的多线程编程:从基础到实践
【10月更文挑战第13天】 Java作为一门跨平台的编程语言,其强大的多线程能力一直是其核心优势之一。本文将从最基础的概念讲起,逐步深入探讨Java多线程的实现方式及其应用场景,通过实例讲解帮助读者更好地理解和应用这一技术。
20 3
|
8天前
|
Java 调度 UED
深入理解Java中的多线程与并发机制
本文将详细探讨Java中多线程的概念、实现方式及并发机制,包括线程的生命周期、同步与锁机制以及高级并发工具。通过实例代码演示,帮助读者理解如何在Java中有效地处理多线程和并发问题,提高程序的性能和响应能力。