【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");
    }
}

在这里插入图片描述

相关文章
|
13天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
155 37
|
9天前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
13天前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式
|
13天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑】设计模式——原型模式
对比原型模式和传统方式的实现思路、代码方案、优缺点,阐述原型模式的使用场景,以及深拷贝、浅拷贝等相关概念,并扩展原型模式在Spring源码中的应用。
【Java笔记+踩坑】设计模式——原型模式
|
4天前
|
设计模式 安全 Java
Java 编程中的设计模式:单例模式的深度解析
【9月更文挑战第22天】在Java的世界里,单例模式就像是一位老练的舞者,轻盈地穿梭在对象创建的舞台上。它确保了一个类仅有一个实例,并提供全局访问点。这不仅仅是代码优雅的体现,更是资源管理的高手。我们将一起探索单例模式的奥秘,从基础实现到高级应用,再到它与现代Java版本的舞蹈,让我们揭开单例模式的面纱,一探究竟。
22 11
|
5天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
2天前
|
设计模式 Java Spring
spring源码设计模式分析-代理设计模式(二)
spring源码设计模式分析-代理设计模式(二)
|
1天前
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
1月前
|
设计模式
设计模式-单一职责模式
设计模式-单一职责模式
|
1月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)