设计模式简要介绍

设计模式有很多,较为重要的如下

静态和单例模式

单例模式的本质就是类成员中有一个对象实例

public class Animal{public static string Title = "Animal" // 类成员public string Name; // 对象成员public const float Pi = 3.14f; // 类成员public readonly float Pi2 = 3.14f // 对象成员public static readonly Animal animal; //类成员private static Animal Instance;  //实例public static Animal Instance{get{if(instance == null){instance = new Animal();}return instance;}}// 类构造函数static Animal(){animal = new Animal();}// 对象构造函数public Animal(){}
}

注意:

  1. 我们也可以把整个类static来当做单例
  2. 使用单例时,我们把构造函数私有可以防止被人new,在类前加上seal防止被继承,在构造函数前加上static也可以

观察者模式

多人开发的时候,每个人开发不同的功能,每个人代码风格不一样,但是要用到别人提供的功能,别人还没有写对应的功能,这时候我们要用到事件,关心的人订阅这个事件即可,完全不用关心其他人的代码。我们可以用到C#里面的Action函数。
这样的订阅功能我们可以用一个EventManager来管理,包含至少以下方法:订阅事件,取消订阅事件,触发事件, 移除事件,我们可以通过一个字典来进行管理,键是对应的命名(可以用枚举),值就是对应的Action(可以封装一下)。

外观模式

把一个功能的细节全部封装起来,只对外暴露使用者关心的部分。例如一场战斗开始之前我们需要初始化各个系统,有网络系统,团队系统,背包系统,AI系统等等,但是我们都把它封装到一个函数当中调用即可,对外只暴露一个初始化战斗的函数,战斗时候的更新同理,我们也可以把各个系统的更新集成到一起。
定义:为子系统定义一组统一的接口,这个高级接口让子系统更容易被使用。

状态模式

枚举是关键。怪物的状态机是一个例子。不同的状态有不同的初始化动作,不同的更新动作,更新的时候有状态转移条件。

工厂模式

概念:工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种将对象的创建和使用分离的方式。工厂模式通过定义一个创建对象的接口,但将具体的对象创建过程延迟到子类来完成。这样,客户端代码就不需要知道具体的对象创建细节,只需要通过工厂方法获取所需的对象。工厂模式的主要目的是封装对象的创建过程,使客户端与具体的对象类解耦,从而提供更大的灵活性和可维护性。
例子:MMORPG中输入网络端的信息即可调用对应的接口创建对应的角色。
工厂模式通常涉及以下角色:

抽象工厂(Abstract Factory):定义了创建对象的接口,它是工厂方法模式的核心,具体工厂类实现了这个接口。

具体工厂(Concrete Factory):实现抽象工厂接口,负责创建具体的产品对象。

抽象产品(Abstract Product):定义了产品的接口,描述了产品的特性和功能。

具体产品(Concrete Product):实现抽象产品接口,是被创建的对象。

工厂模式的工作流程如下:

客户端通过调用抽象工厂的方法创建产品对象,而不直接实例化具体产品类。

抽象工厂根据客户端的请求,选择合适的具体工厂来创建产品对象。

具体工厂根据客户端的请求,创建具体的产品对象,并将其返回给客户端。

工厂模式的好处在于当新增一个类的时候我们不会对原来的代码进行修改,只新增类本身及其工厂。

策略模式

根据不同的条件需求,构建不同的实例,并且在策略模式内 封装具体的自定义行为接口
应用场景
例如: 游戏设置界面,根据GPU品质,批量设置群组显示效果

命令模式

命令是对命令的封装,每一个命令都是一个操作,请求方发出请求,接收方接收请求,并执行操作。命令模式解耦了请求方和接收方,命令模式属于行为型模式
有执行队列的需求,且支持撤销需求
应用场景
例如: 比如FPS 输入模块,需要存储某些输入指令时
优点:
通过引入命令的抽象接口,实现了命令请求与实现的解耦
扩展性良好,可以很容易的增加新命令

面向对象的设计原则

  1. 单一职责原则:一个类只做一件事情
  2. 开放-封闭原则:对于扩展是开放的,对于更改是封闭的
  3. Liskov替换原则:子类必须能替换基类
  4. 依赖倒置原则:依赖于抽象,在依赖之间定义一个抽象的接口使得高层模块调用接口,而底层模块实现接口的定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标。
  5. 接口隔离原则:使用小的专门接口,不要使用大的总接口

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

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

相关文章

C语言—窄字符或宽字符

#include<iostream> #include<Windows.h> #include<tchar.h>int main() {TCHAR destination[100];lstrcpy(destination, __T("你好"));_tprintf(__T("Copied string: %s\n"), destination); }/*在C/C中&#xff0c;__T(x) 格式通常用于实…

【系统集成项目管理工程师】——3.管理

主要掌握输入&#xff0c;输出内容先看他的过程域本身&#xff0c;过程域是什么输出就是什么 上一个过程域的输出是下一个过程域的输入 十大管理1432都有计划过程组&#xff0c;通常规划为首&#xff0c;控制为尾 规划阶段的万能输出是各子计划&#xff0c;即项目管理计划的…

【第2章 Node.js基础】2.1 JavaScript基本语法

文章目录 学习目标JavaScript版本与JavaScript运行环境JavaScript版本JavaScript运行环境 JavaScript语句与注释语句语句块注释 变量变量的命名变量的声明与赋值变量提升变量泄露全局作用域和函数作用域块级作用域与let关键字使用const关键字声明只读常量注意 数据类型数值&…

引用类型;强引用;软引用;弱引用和虚引用

概述 平时在编写代码的时候内存都是由jvm管理&#xff0c;对象的回收也是jvm在管理&#xff1b; 但是有些时候jvm无法回收对象&#xff0c;最后就会抛出oom异常. 那么那些回收不了的对象肯定有区别于能回收的对象&#xff1b; 先上一波引用类型介绍 强引用 比如平常我们直…

2023-11-06 monetdb-事务-insert-delta缓存-分析

摘要: monetdb在事务处理时, 会将数据写入delta缓存中, 然后在commit时将数据写入wal文件, 随后由控制器决定何时将wal中的数据真正的写入BAT列文件中. 本文从delta缓存入手, 分析monetdb在事务处理中的细节. SQL: DML: create table t1 (a int); 事务DDL: START TRANSACTI…

数据结构-Prim算法构造无向图的最小生成树

引子&#xff1a; 无向图如果是一个网&#xff0c;那么它的所有的生成树中必有一颗生成树的边的权值之和是最小的&#xff0c;我们称 这颗权值和最小的树为&#xff1a;“最小生成树”&#xff08;MST&#xff09;。 其中&#xff0c;一棵树的代价就是树中所有权值之和。 而…

外呼系统需要关注哪些功能?okcc呼叫中心ai智能语音

场景一&#xff1a; 当点击呼叫、一键拨号、预览外呼发起时&#xff0c;座席人员当前绑定的外呼设备&#xff1a;可能是手机、固话、软电话、WebRTC软电话、SIP话机等&#xff0c;首先振铃&#xff0c;同时外呼系统自动弹出外呼弹屏&#xff0c;展示被叫号码的详细信息&#x…

封装localstorage为对象 js

export const LocalStorageManager {recordKey: "Record",// 获取本地存储中的值get(key) {try {const value localStorage.getItem(key);if (value null || value undefined || value "") {return null;}return JSON.parse(localStorage.getItem(key…

Jest和Mocha两者之间有哪些区别?

什么是单元测试&#xff1f; 所谓单元测试&#xff0c;是对软件中单个功能组件进行测试的一种软件测试方式&#xff0c;其目的是确保代码中的每一个基本单元都能正常运行。因此&#xff0c;开发人员在应用程序开发的整个过程&#xff08;即代码编写过程&#xff09;中都需要进…

云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6

开源项目推荐 Kueue Kueue 是一套用于作业队列的 API 和控制器。它是作业级管理器&#xff0c;可决定何时允许作业启动&#xff08;如创建 pod&#xff09;&#xff0c;何时停止作业&#xff08;如删除活动 pod&#xff09;。 Reloader 一个 Kubernetes 控制器&#xff0c;…

阿里云服务器登录、安装MySql、配置Python、GO环境

1、刚购买的云服务如何登录 刚购买的ECS没有默认密码&#xff0c;需要先设置一下登录的密码。选中实例&#xff0c;右上角的全部操作-->重置实例密码 如果想通过SSH登录&#xff0c;则一定要勾选开启 修改之后ssh root你机器的ip&#xff0c;输入密码就可以愉快的开始你的操…

如何安装Wnmp并结合内网穿透实现外网访问内网Wnmp服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…

冥想第九百七十天

1.充实的一天&#xff0c;今天的天气还好&#xff0c;准备下班后去跑步&#xff0c;本来是明天要跑的&#xff0c;因为明天有课&#xff0c;所以今天跑&#xff0c;不耽误事。 2.全力以赴的一天&#xff0c;感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不…

TSINGSEE智能分析网关V4车辆结构化数据检测算法及车辆布控

车辆结构化视频AI检测技术&#xff0c;可通过AI识别对视频图像中划定区域内的出现的车辆进行检测、抓拍和识别&#xff0c;系统通过视频采集设备获取车辆特征信息&#xff0c;经过预处理之后&#xff0c;接入AI识别算法并与车辆底库进行对比&#xff0c;快速识别车辆身份和属性…

架构漫谈 - 如何设计高性能、高可用、高扩展架构

文章目录 一、如何设计高扩展架构架构设计复杂度模型可扩展复杂度模型"拆分"复杂度分析和设计"封装"复杂度分析和设计(1)规则引擎:美团MazeGO规则引擎(2)微内核:OSGI微内核(3)抽象层:Linux VFS抽象层(4)设计模式二、设计高性能架构单机高性能集…

视频转码教程:轻松制作GIF动态图,一键高效剪辑操作

随着社交媒体的兴起&#xff0c;GIF动态图已经成为了人们表达情感、分享精彩瞬间的重要方式。而将视频转化为GIF动态图&#xff0c;不仅可以方便地在社交媒体上分享&#xff0c;还可以延长视频的播放时长&#xff0c;吸引更多的观众。本篇文章将为大家介绍如何将视频轻松转化为…

Flink ON Yarn 模式 --- per job mode 与application mode的区别

1、per job mode&#xff1a; 对于yarn-per-job模式调度的过程&#xff1a; 1、资源调度&#xff1a; 1、因为是yarn模式&#xff0c;所以客户端会向ResourceManager申请资源&#xff0c;申请容器负责来启动ApplicationManager 2、此时ResourceManager接受到客户端的请求&#…

算法与设计分析 | 全排列问题

题目 给定一个由不同的小写字母组成的字符串&#xff0c;输出这个字符串的全排列数量。 我们假设对于小写字母有a < b < ... < y < z。 输入 每组输入只有一行&#xff0c;是一个由小写字母组成的字符串&#xff08;不含相同字母&#xff09;&#xff0c;已知字符…

maven 上传本地jar包到nexus

maven上传命令 mvn deploy:deploy-file -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4 -Dversion4.0 -Dpackagingjar -DfileC:\java\top-sdk-java-1.0.1-lib\lib\bcprov-jdk16-1.46.jar -Durlhttp://ip:port/repository/maven-releases/ -DrepositoryIdsnapshot…

第二证券:“闻”A股:注册制走深走实是活跃市场制度保障

不久前举办的中心金融工作会议明确要求“推动股票发行注册制走深走实”&#xff0c;无疑为本钱商场活泼进一步夯实制度保证。 上市公司是本钱商场的基石&#xff0c;其质量是决议本钱商场长期健康展开的重要因素之一。作为牵一发而动全身的重要革新&#xff0c;注册制的实施逐…