详解几种常见设计模式Singleton、Factory、Strategy在项目中的应用

Java程序员必备,史上最详细常用的八种设计模式讲解丨建议收藏 本文转载自:[Java程序员必备,史上最详细常用的八种设计模式讲解丨建议收藏](https://segmentfault.com/a/1190000021026645 一、Proxy代理模式 1. 什么是代理模式 抽象点说是一个类代表另一个类的功能,或者说一个对象为另一个对象提供一个代理或者占位符以控制对这个对象的访问。同样我也会举例子来说明,这里我举一个买车票的例子。通常我们我们买车票需要去车... 阅读详情

本文转载自:详解几种常见设计模式Singleton、Factory、Strategy在项目中的应用


一、前言

前几天阅读一框架文档,里面有一段这样的描述 “从对象工厂中………” ,促使写下本文。尽管一些模式简单和简单,但是常用、有用。

结合最近一个项目场景回顾一下里面应用到的一些模式<Singleton、Factory、Strategy>。

  • Singleton:创建型模式,负责创建维护一个全局唯一实例
  • Factory:创建型模式,对象工厂负责根据标识创建或获取具体的实例对象
  • Strategy:行为型/运行时模式,策略负责根据标识控制应用运行时的行为

二、场景上下文

项目需求/场景:通过增加辅助工具使用脚本程序对特定应用程序进行“自动化测试”,内容包括:点击按钮、选择菜单、读取控件内容等。

原始实现:脚本程序通过计算坐标的方式对特定应用程序进行“自动化测试”。缺点:脚本程序工作量大、依赖按钮屏幕坐标、坐标计算繁杂、依赖屏幕分辨率等。

目标程序简化图:

使用辅助工具前 :

使用辅助工具后:

三、分析、设计

这里只对 辅助工具 进行分析设计,其它略过。

  1. 图1 目标程序有以下主要特点:
    • 目标程序分为 A-E五个功能区
    • 每个功能区有按钮、菜单等相似功能
    • 每个功能区有特有功能
  2. 辅助工具对外提供统一调用
  3. 辅助工具可以被重复调用,但不支持并发操作

基于以上分析:

  1. 将 Operator <操控代码或具体操控行为>分为五个具体的 Operator 分别为: AOperator 、BOperator 、COperator 、DOperator 、EOperator ,分别对应操作不同的应用程序区域。
  2. 使用创建型模式管理 Operator
  3. 使用锁机制,限制并发
  4. 外层封装一个单例

四、UML

五、Code Show

1. AuxiliaryToolSingleton 对外提供调用,并用锁机制控制并发。

using System;
using System.Threading;
using DesignPatternDemo.Operator;

namespace DesignPatternDemo
{
    public c
设计模式(策略,观察者,单例,工厂方法) C语言实现设计模式的核心方法,重点分析了策略模式和观察者模式。通过结构体和函数指针模拟面向对象特性,策略模式实现了算法族封装与动态切换,观察者模式建立了一对多的状态通知机制。两种模式均遵循开闭原则,策略模式适用于算法选择等场景,观察者模式则用于事件处理系统。文中提供了完整的C语言实现代码,展示了头文件组织、接口定义和具体模式应用,为C语言项目提供了可扩展的设计范例。 阅读详情

相关推荐

C++代码复用与设计模式实战:从思维框架到现代特性应用

代码复用是软件工程的核心概念,旨在通过逻辑复用而非简单复制来提升开发效率和维护性。其原理在于识别代码中稳定与变化的部分,通过合理封装降低模块间耦合度。这一实践的技术价值在于构建可扩展、易维护的软件系统,广泛应用于算法策略封装、对象创建管理、事件驱动架构等场景。现代C++工程中,结合智能指针、lambda表达式等特性,策略模式、工厂模式等经典设计模式能更优雅地实现解耦与扩展,有效解决项目中常见的复用失败与过度设计问题。

weixin_34290096的博客 371

设计模式:可复用面向对象软件的基础

意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。别名Kit动机 略适用性在以下情况下可以使用Abstract Factory模式一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时。结构。

goodparty的专栏 939

Python @classmethod 装饰器详解:从工厂方法到设计模式实战

在面向对象编程中,类方法是绑定到类而非实例的方法,它通过接收类本身作为第一个参数(通常命名为 cls)来实现。其核心原理在于方法解析时,Python 解释器会将类作为隐式参数传入,从而允许方法在无需实例化的情况下访问和操作类级别的属性与状态。这一机制的技术价值在于提供了清晰的代码组织方式,支持多态性,并能作为灵活的工厂方法,用于创建类的实例。典型的应用场景包括实现替代构造函数、管理类级状态(如单例模式)、在继承体系中定义可扩展的接口,以及编写与类逻辑相关但不依赖具体实例的工具函数。例如,在构建数据模型或工具

weixin_34378969的博客 333

【软考设计模式总览】GoF 23 种设计模式全景图:分类、考频与备考路线图

【软考设计模式总览】GoF 23 种设计模式全景图:分类、考频与备考路线图

ttod的博客 328

SAP ABAP全局类创建指南:从SE24入门到设计模式实践

在SAP ABAP开发中,面向对象编程(OOABAP)通过封装、继承和多态等核心概念,实现了代码的高内聚和低耦合,显著提升了软件的可维护性和复用性。其技术价值在于能够构建更加灵活、可扩展的应用架构,尤其适用于S/4HANA、Fiori和RAP等现代SAP技术栈。在实际工程实践中,开发者常利用事务代码SE24创建全局类,并通过定义属性、方法、接口和事件来封装业务逻辑。例如,在处理物料主数据或实现单位换算等场景时,运用工厂模式或单例模式等设计模式,可以进一步优化代码结构。本文聚焦于全局类的创建流程与核心设计思想

weixin_33816946的博客 388

Python桥接模式实战:解耦抽象与实现的艺术

设计模式是软件工程中解决常见问题的经典方案,其中桥接模式(Bridge Pattern)作为一种结构型模式,通过分离抽象部分与实现部分,使两者能够独立演化。从原理上看,桥接模式通过组合替代继承,有效避免了类爆炸问题。在Python这样的动态语言中,可以利用鸭子类型和闭包等特性实现更灵活的桥接方案。这种技术特别适用于需要处理多维度变化的系统,比如跨平台GUI开发、数据转换管道等场景。通过实际案例可见,合理应用桥接模式不仅能提升代码的可维护性,还能增强系统的扩展性。在数据处理和系统架构设计中,桥接模式与适配器模

优快云头条 1096

Python面向对象编程核心概念与实战技巧

面向对象编程(OOP)是现代编程语言的核心范式,通过封装、继承、多态三大特性实现代码的高效组织与复用。Python作为动态类型语言,其OOP实现具有独特的灵活性,支持魔术方法、描述符等高级特性。在实际工程中,合理运用类与对象、属性控制、设计模式等OOP技术,能够显著提升代码质量。特别是在Web开发、数据分析等领域,Python的面向对象特性被广泛应用于框架设计如Django ORM、SQLAlchemy等。掌握封装原则与@property装饰器的使用,可以构建更安全的API接口;而理解MRO算法则能有效解决

weixin_30421809的博客 303

从 ABAP 项目看 OO Design Patterns,Factory、Singleton、Strategy 和 Template Method 的工程化理解

文章摘要:ABAP代码在初期快速迭代时容易堆积IF/CASE条件分支和全局变量,但随着系统演进到S/4HANA环境,这种写法会导致维护困难。设计模式的价值在于解决对象创建、多实现切换和状态管理等核心问题。Factory Method集中管理对象创建,隔离调用方与具体实现;Singleton控制唯一实例但需避免滥用为全局变量;Strategy用组合替代条件分支,提升算法可替换性。这些模式在Clean Core架构下尤为重要,能帮助遵守SAP扩展治理规范,确保系统长期可维护性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 67

别把设计模式当形容词:在 SAP ABAP 代码里,Factory、Facade 这些名字一旦写下去,就等于签了技术承诺书

摘要 SAP项目中代码质量问题的根源常始于命名不诚实,而非技术缺陷。滥用设计模式名称(如Factory、Facade)但未实现相应模式结构,会导致系统可维护性下降。Clean ABAP建议:仅当完全实现设计模式时才在类名中使用模式名称。在SAP多环境开发中,准确的命名是跨技术栈沟通的基础协议。本文通过ABAP示例和真实场景分析,阐明设计模式名称的本质是"可验证的结构声明",而非装饰性标签,并针对SAP Gateway、RAP等环境提供实用命名建议。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 135

JAVA的22种设计模式

java设计模式集大成--易理解!慢慢积累追加笔记。

の博客 1922

singleton factory

在这个程序中,在内部(非界面部分)用了3种设计模式:单体模式,工厂模式,门面模式.和vector容器,希望能对大家有点用

LeRobot SO-ARM100 学习笔记(2) diffusion module

对 lerobot 中的 diffusion policy 进行基本的代码阅读

mikhailbran的博客 1586

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 460

Android中的Service:Binder,Messenger,AIDL(2)

前言前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等。在这一篇博文里有一些需要前一篇铺垫的东西,建议没有看过前一篇博文的同学先去看一下前一篇: Android中的Service:默默的奉献者 (1) 。但是在前一篇博文中也有一些遗漏的东西——主要是关于bindService()这一块的具体细节。由于这

lypeer的专栏 5万+

跨平台CMake AutoSAR

AutoSAR是汽车行业采用的一种软件架构标准,它旨在提供一个通用的软件平台,使得汽车软件的开发和集成变得更加高效和灵活。总结一下,CMake AutoSAR是一个强大的跨平台工具,为AutoSAR开发提供了便利。通过简单的配置文件和命令,开发人员可以实现高效、灵活的跨平台开发,并加快自动驾驶系统的开发进程。上述示例中,我们定义了一个名为AutoSAR的项目,指定了源代码文件的路径和依赖库的路径。通过简单的配置文件和命令,开发人员可以实现高效、灵活的跨平台开发,并加快自动驾驶系统的开发进程。

EcmFsharp的博客 232

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用

明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。

每日出拳老爷子的博客 556

Ollama系列---【ollama使用gpu运行大模型】

一、安装CudaToolkit 使用控制台命令查看当前显卡驱动中的cuda版本 nvidia-smi 二、下载CudaToolkit 注意:CudaToolkit版本要低于上面的显卡Cuda版本。 Cuda各版本下载地址:https://developer.nvidia.com/cuda-toolkit-archive 下载好之后,一路下一步,一直默认即可。 如果安装到了自定义的位置,记得加环...

-少年-的博客 7982

[Dify实战] 招投标标书智能生成:模板套用 + 风险校验

摘要:本文提出基于Dify构建AI标书生成工作流,解决传统标书撰写中内容重复(80%复用率)、人工修改效率低、风险检查易出错等痛点。方案包含三大核心模块:1)智能生成(基于模板自动填充项目信息);2)风险校验(AI自动检查废标风险点);3)多角色协作。通过拆分标书结构、设置详细Prompt、建立风险检查清单,实现从"人工撰写"到"参数化自动生成+AI审核"的转型,最终输出标准格式文档并支持企业系统集成。典型应用场景下,系统能自动生成技术方案并识别关键风险(如支付安全合

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 827

5大步骤!轻松玩转Dorisoy.Rigger:基于.NET Core 6、MAUI和Blazor的多数据库开发框架生成器

各位小伙伴,你们是否厌倦了每次项目启动都要从头配置数据库连接、编写重复的代码?今天,我们就来聊聊如何使用Dorisoy.Rigger这个强大的开发框架生成器,让你的.NET Core 6、MAUI和Blazor项目开发变得简单又高效!准备好迎接开发的新乐趣了吗?让我们一起开始吧!接下来,我们需要定义数据模型。假设我们有一个简单的用户表,包含ID、用户名和密码字段。在项目中创建一个新的类文件,命名为User.csset;set;set;这段代码定义了一个用户模型,其中包含了用户的ID、用户名和密码。

java专栏 1738

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 面试倒在了HashMap上?别急HashMap面试题,看这一篇就够了
下一篇: Java程序员必备的5个工作技能;关爱程序员,更关心自己!
Java_supermanNO1
博客等级 码龄7年 1170粉丝 329原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值