设计模式-工厂模式

工厂模式

    • 1、工厂模式简介
    • 2、工厂模式实现

1、工厂模式简介

  工厂模式(Factory Pattern)是最常见的设计模式,该模式属于创建型模式,它提供了一种简单、快速、高效且安全创建对象的方式。工厂模式在接口中定义了创建对象的方法,而将创建对象的具体过程在子类中实现,用户只需通过接口创建需要的对象即可,不用关注对象的具体创建过程。同时,不同的子类可可根据需求灵活实现创建对象的不同方法。

  通俗地讲,工厂模式的本质就是用工厂方法代替new操作创建一个实例化对象的方式,以提供一种可方便地创建有同种类型接口的产品的复杂对象的方式

  如下代码通过new关键字实例化类Class的一个实例class,但如果class类在实例化时需要一些初始化参数,而这些参数需要其他类的信息,则直接通过new关键字实例化对象会增加代码的耦合度,不利于维护,因此需要通过工厂模式将创建实例和使用实例分开。将创建实例化对象的过程封装到工厂方法中,我们在使用时直接通过调用工厂来获取,不需要关心具体的实现过程:

Class class=new Class();

  以创建手机为例,假设手机的品牌有华为和苹果两种类型,我们要实现的时根据不同的传入参数实例化不同的手机。
在这里插入图片描述

2、工厂模式实现

  定义接口:

public interface Phone {String brand();
}

  以上代码定义了一个Phone接口,并在接口中定义了brand(),用于返回手机的品牌。

  定义实现类:

public class Iphone implements Phone {@Overridepublic String brand() {return "this is an apple phone";}
}
public class HuaWei implements Phone {@Overridepublic String brand() {return "this is a huawei phone";}
}

  以上代码定义了两个Phone的实现类Iphone和HuaWei来表示两个品牌的手机,两个品跑的手机通过实现brand()打印自己的商标。

  定义工厂类

public class Factory {public Phone createPhone(String phoneName){if("HuaWei".equals(phoneName)){return new HuaWei();}else if("Apple".equals(phoneName)){return new Iphone();}else{return null;}}
}

  以上代码定义了名为Factory的工厂类,工厂类有一个方法createPhone(),用于根据不同的参数实例化不同品牌的手机类并返回。在createPhone()的参数为"HuaWei"时,工厂类为我们实例化一个HuaWei类的实例并返回;在createPhone()的参数为"Apple"时,工厂类为我们实例化一个Iphone类的实例并返回。这样便实现了工厂类根据不同的参数创建不同的实例,对调用者来说屏蔽了实例化的细节。

  使用工厂模式:

//使用工厂模式
public static void main(String[] args) {Factory factory = new Factory();Phone huaWei = factory.createPhone("HuaWei");Phone iphone = factory.createPhone("Apple");System.out.println(huaWei.brand());System.out.println(iphone.brand());
}

  以上代码定义了一个Factory的实例,并调用createPhone根据不同的参数创建了名为huawei的实例和名为iphone的实例,分别调用其brand()打印不同的品牌信息,运行结果如下:

image-20230611233228799

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1318.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式->观察者设计模式和订阅者发布者设计模式的区别

设计模式->观察者设计模式和订阅者发布者设计模式的区别 一、先复习一下观察者设计模式的相关定义,优点,以及缺点1.定义观察者模式的三个典型例子 2.优点3.缺点4.观察者设计模式的主要角色5.代码举例完整代码 二、回答问题:观察者设计模式和订阅者发布者设计模式的区别 一、…

雅迪渐进、小牛徐行,两轮电动车“尖子生”竞争加剧

配图来自Canva可画 2023年中旬,两轮电动车品牌陆续上新车,对外展示品牌实力和创新力。 5月9日,哈啰智能电动车发布“极智系列”三款搭载了哈啰图灵T30智能平台的新车;5月10日,九号公司发布全新设计的E系列电摩顶配车型…

设计模式-观察者模式

观察者模式 1、观察者模式简介2、具体实现 1、观察者模式简介 观察者(Observer)模式指在被观察者的状态发生变化时,系统基于事件驱动理论将其状态通知到订阅模式的观察者对象中,以完成状态的修改和事件的传播。这种模式有时又叫做发布-订阅模式或者模型-…

Spring关于@Configuration配置处理流程解析

Configuration配置处理流程解析 AnnotationConfigApplicationContext基于注解配置ApplicationContext启动刷新流程Spring关于Configuration解析处理流程那些年被忽略问题 AnnotationConfigApplicationContext基于注解配置 Spring通过上下文应用AnnotationConfigApplicationCon…

MySQL-SQL存储过程/触发器详解(下)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

启动spring boot项目时加载配置文件报错的问题

最近把电脑重置了一下,然后重新安装各种软件,从gitee拉去项目到本地运行时居然启动报错了 Failed to load property source from file:/D:/program/IdeaProjects/layui/target/classes/application.yml 这是加载配置文件的时候失败了,提示一堆…

Mybatis-Plus:实现自定义SQL

目录 1.简介 2.自定义SQL具体实现 2.1.注解SQL 2.2.Wrapper传参注解SQL 2.3.Wrapper传参xml文件SQL 2.4.正常传参XML文件SQL 3.总结 1.简介 Mybatis-Plus(以下简称MBP)的初衷是为了简化开发,而不建议开发者自己写SQL语句的&#xff1b…

华为云CodeArts TestPlan测试设计:守护产品开发质量之魂

华为产品质量的守护神 华为云CodeArts TestPlan测试设计是华为产品质量的守护神。华为云CodeArts TestPlan提供多维度测试设计模板、“需求-场景-测试点-测试用例” 四层测试分解设计能力,启发测试人员发散性思维,对项目环境、测试对象、质量标准、测试…

深入理解 Golang: Goroutine 协程

进程用来分配内存空间,是操作系统分配资源的最小单位;线程用来分配 CPU 时间,多个线程共享内存空间,是操作系统或 CPU 调度的最小单位;协程用来精细利用线程。协程就是将一段程序的运行状态打包,可以在线程…

java之路——带你了解Hibernate与基本过程

文章目录 前言一、Hibernate用来干嘛的二、Hibernate与mybatisHibernate的基本开发步骤 前言 Hibernate框架的发展可以追溯到2001年,它在过去的几年里获得了广泛的应用和持续的发展。 其中的发展演变: 初期版本(2001-2006年)&am…

css基础知识十:介绍一下CSS中的Grid网格布局?

一、是什么 Grid 布局即网格布局,是一个二维的布局方式,由纵横相交的两组网格线形成的框架性布局结构,能够同时处理行与列 擅长将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系 这与之前讲到的flex一维…

【单片机】STM32F103C8T6 最小系统板原理图

STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,由STMicroelectronics(ST)公司生产。它是STMicroelectronics的STM32系列微控制器中的一员,被广泛应用于嵌入式系统和电子设备中。 STM32F103C8T6单片机的主要特点和资源…