码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java中23种设计模式-单例模式--工厂模式


    加油,新时代打工人!

    23种设计模式定义介绍

    Java中23种设计模式-单例模式

    Java中23种设计模式-单例模式2–懒汉式线程不安全

    Java中23种设计模式-单例模式2–懒汉式2线程安全

    Java中23种设计模式-单例模式–饿汉式

    定义:
    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。

    工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。

    介绍
    意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

    主要解决:主要解决接口选择的问题。

    何时使用:我们明确地计划不同条件下创建不同实例时。

    如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

    关键代码:创建过程在其子类执行。

    在这里插入图片描述

    创建一个接口:

    package factory;
    
    /**
     * @author wenhao
     * @date 2024/02/20 15:12
     * @description
     */
    public interface Shape {
    	void draw();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    创建实现接口的实体类。

    package factory;
    
    /**
     * @author wenhao
     * @date 2024/02/20 15:16
     * @description
     */
    public class Circle implements Shape {
    	@Override
    	public void draw() {
    		System.out.println("Circle的方法");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    package factory;
    
    /**
     * @author wenhao
     * @date 2024/02/20 15:12
     * @description
     */
    public class Rectangle implements Shape{
    	@Override
    	public void draw() {
    		System.out.println("Rectangle中的方法 ");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    package factory;
    
    /**
     * @author wenhao
     * @date 2024/02/20 15:16
     * @description
     */
    public class Square  implements Shape{
    
    	@Override
    	public void draw() {
    		System.out.println("Square的方法");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    创建一个工厂类,根据传入的类型,来创建对象的实例对象。

    package factory;
    
    /**
     * @author wenhao
     * @date 2024/02/20 15:18
     * @description 工厂类
     */
    public class ShapeFactory {
    	//使用getShape方法获取形状类型的对象
    	public  Shape getShape(String shapeType){
    		if(shapeType == null){
    			return null;
    		}
    		//equalsIgnoreCase 忽略大写字符
    		if(shapeType.equalsIgnoreCase("circle")){
    			return new Circle();
    		}else if(shapeType.equalsIgnoreCase("rectangle")){
    			return new Rectangle();
    		} else if(shapeType.equalsIgnoreCase("square")){
    			return new Square();
    		}
    		return null;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    最后来验证这个工厂模式,将结果返回。

    package factory;
    
    /**
     * @author wenhao
     * @date 2024/02/20 16:28
     * @description
     */
    public class verify {
    	public static void main(String[] args) {
    		ShapeFactory shapefactory = new ShapeFactory();
    		//获取 Circle 的对象,并调用它的 draw 方法
    		Shape shape1 = shapefactory.getShape("circle");
    		//调用 Circle 的 draw 方法
    		shape1.draw();
    
    		Shape shape2 = shapefactory.getShape("RECTANGLE");
    		shape2.draw();
    
    		Shape shape3 = shapefactory.getShape("SQUARE");
    		shape3.draw();
    
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    每日一题——在windows x86/64 VS环境下,下面的程序会出现什么问题?运行结果是什么?为什么?
    SpringBoot+Vue实现前后端的高校失物招领系统
    同步 -- 自旋锁
    一种基于形态学的权重自适应周期性噪声去除方法-含Matlab代码
    Docker简单案例
    【接口干货】热门、免费api集合
    机组运行约束对机组节点边际电价的影响研究(Matlab代码实现)
    LeetCode 428. Serialize and Deserialize N-ary Tree【树,BFS,DFS】困难
    RabbitMQ延时队列
    12.5 Hierarchical names (层次化名称)
  • 原文地址:https://blog.csdn.net/weixin_45397785/article/details/136193783
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号