設計模式 --- 外觀模式

外觀模式是一種結構型設計模式,為復雜子系統提供??統一的高層接口??,通過定義一個外觀類來??簡化客戶端與子系統的交互??,降低系統耦合度。這種模式隱藏了子系統的復雜性,將客戶端與子系統的實現細節隔離開來,讓客戶端只需與外觀類交互即可完成復雜的操作。

優點:

1.簡化接口:客戶端只需與外觀類交互,無需了解子系統的復雜接口和實現細節,降低了客戶端的使用難度。
2.降低耦合度:將客戶端與子系統隔離開來,使得子系統的變化不會影響到客戶端,提高了系統的可維護性和可擴展性。
3.提高靈活性:可以根據需要添加或修改外觀類的方法,而不會影響到子系統的實現。

缺點:

1.不符合開閉原則:如果需要添加新的子系統功能,可能需要修改外觀類的代碼,這違反了開閉原則。
優化:提供擴展方法或鉤子方法。

2.外觀類可能過于龐大:當子系統的功能越來越多,外觀類的方法也會越來越多,導致外觀類變得龐大和復雜。
優化:分拆為多個子外觀類。

// 基礎層
class CoreFacade {protected DatabaseService _db = new DatabaseService();protected CacheService _cache = new CacheService();
}// 擴展層(繼承復用)
class BusinessFacade : CoreFacade {private AnalyticsService _analytics = new AnalyticsService();public void ProcessOrder(Order order) {_cache.Store(order);_db.Save(order);_analytics.Track(order);}
}

說明例子:

1.UML類圖

2.實現

1.定義一個外觀類:

    public class AppFacadePattern{private GameEventSys m_gameEventSys = null;private CampSys m_campSys = null; public void Initinal(){m_gameEventSys = new GameEventSys();m_campSys = new CampSys();}public void Update(){m_gameEventSys.Update();m_campSys.Update();}}

2.定義一個基礎系統類以及兩個實際系統類:

    public class BaseSys{public virtual void Update(){}}public class GameEventSys : BaseSys{public override void Update(){Debug.Log("GameEventSys Update");}}public class CampSys : BaseSys{public override void Update(){Debug.Log("CampSys Update");}}

3.測試類:

public class AppFacade : MonoBehaviour
{AppFacadePattern appFacade = null;void Start(){appFacade = new AppFacadePattern();appFacade.Initinal();}void Update(){appFacade?.Update();   }
}

游戲中的使用場景:

1.游戲資源加載與管理:游戲里需要加載各種各樣的資源(像圖片、音頻、模型等),可能涉及不同的加載器、緩存機制等。
2.游戲輸入管理:游戲中的輸入方式多種多樣,比如鍵盤、鼠標、手柄等,不同的輸入設備有不同的處理邏輯,而且還可能存在不同的輸入模式(如菜單模式、游戲模式等)。
3.游戲特效管理:游戲中常常會有各種特效,如粒子特效、光影特效、音效特效等。每種特效都有其獨特的創建、播放和銷毀邏輯。
4.游戲網絡通信管理:游戲中的網絡通信涉及多個方面,例如連接服務器、發送和接收數據、處理網絡錯誤等。這些操作可能較為復雜,并且不同的網絡協議和服務器有不同的實現方式。
5.新手引導系統:?引導流程需要控制UI提示、鏡頭移動、操作鎖定等多個模塊。
6.存檔/讀檔系統?:玩家數據保存涉及角色狀態、任務進度、地圖探索等多個子系統。
7.場景加載管理器?:場景加載涉及資源加載、光照烘焙、物理系統初始化等多個子系統。
8.戰斗系統封裝?:角色攻擊需要協調動畫、傷害計算、特效、音效等多個模塊???????。
9.動態難度調整?:難度平衡涉及敵人屬性、掉落率、AI行為等多個參數。

總結:

通過合理應用外觀模式,可以顯著提升 C# 項目的可維護性和架構清晰度,特別是在處理復雜系統集成第三方庫封裝或跨團隊協作場景中效果顯著。

參考書籍:

《Hands-On Game Development Patterns with Unity 2019》

《設計模式與游戲完美開發》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77428.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的gittee倉庫

日常代碼: 日常代碼提交https://gitee.com/xinxin-pingping/daily-code 有需要的寶子們可自行讀取。

微服務調用中的“大對象陷阱”:CPU飆高問題解析與優化

背景 對幾十萬條用戶歷史存量數據寫入,且存在大對象的基礎上。kafka消費進行消費寫mysql超時。導致上游服務調用時異常,CPU飆高異常。 大對象解釋 大對象的定義與危害 1. 什么是大對象? JVM 內存分配機制:Java 中對象優先分配…

代碼隨想錄算法訓練營day6(字符串)

華子目錄 反轉字符串思路 反轉字符串II思路 替換數字思路 反轉字符串 https://leetcode.cn/problems/reverse-string/ 思路 使用雙指針&#xff0c;初始化時&#xff0c;left指向下標0的位置&#xff0c;right指向最后一個元素的下標當while left<right時&#xff0c;交換…

Oracle 19c新特性:OCP認證考試與職業躍遷的關鍵?

在數字化轉型的浪潮中&#xff0c;Oracle 19c作為數據庫領域的旗艦版本&#xff0c;不僅承載著技術革新的使命&#xff0c;更成為IT從業者職業進階的“黃金跳板”。無論是企業級應用的高可用性需求&#xff0c;還是云原生架構的快速迭代&#xff0c;Oracle 19c的智能化與多模型…

【MySQL數據庫入門到精通】

文章目錄 一、SQL分類二、DDL-數據庫操作1.查詢2.創建數據庫3.刪除數據庫4.使用數據庫 三、DDL-表操作1.查詢 一、SQL分類 根據功能主要分為DDL DML DQL DCL DDL:Date Definition Language數據定義語言&#xff1a;定義數據庫&#xff0c;表和字段 DML:Date Manipulatin Lan…

MCP服務端開發

MCP(Memory, Context, Planning)是一種增強AI系統認知能力的框架,通過整合記憶管理、上下文理解和規劃能力,可以顯著提升AI系統的表現。下面我將為您開發一個完整的MCP服務端。 概述 我們將使用Python開發一個基于FastAPI的MCP服務端,包含以下核心組件: Memory Manager…

前端:uniapp中uni.pageScrollTo方法與元素的overflow-y:auto之間的關聯

在uniapp中&#xff0c;uni.pageScrollTo方法與元素的overflow-y:auto屬性之間存在以下關聯和差異&#xff1a; 一、功能定位差異 ?uni.pageScrollTo? 屬于?頁面級滾動控制?&#xff0c;作用于整個頁面容器?34。要求頁面內容高度必須超過屏幕高度&#xff0c;且由根元素下…

基礎知識-指針

1、指針的基本概念 1.1 什么是指針 1.1.1 指針的定義 指針是一種特殊的變量&#xff0c;與普通變量存儲具體數據不同&#xff0c;它存儲的是內存地址。在計算機程序運行時&#xff0c;數據都被存放在內存中&#xff0c;而指針就像是指向這些數據存放位置的 “路標”。通過指針…

VS遠程Linux_CMake項目搭建

VS遠程Linux CMake項目搭建 準備工作 遠程計算機上安裝 gcc: 一個開源的編譯器集合, GCC支持多種編程語言的編譯&#xff0c;包括C、C、Objective-C、Fortran、Ada、Go、D和Javagdb: GDB&#xff08;GNU Debugger&#xff09;是一個功能強大的調試工具&#xff0c;主要用于調…

替代升級VMware | 云軸科技ZStack構建山西證券一云多芯云平臺

通過云軸科技ZStack Cloud云平臺&#xff0c;山西證券打造了敏捷部署、簡單運維的云平臺&#xff0c;不僅兼容x86、海光、鯤鵬三種異構服務器實現一云多芯&#xff0c;還通過云平臺虛擬化納管模塊納管原有VMware虛擬化資源&#xff0c;并對接第三方集中式存儲&#xff0c;在保護…

MATLAB - 模型預測控制器(MPC)的穩定性和魯棒性問題

系列文章目錄 目錄 系列文章目錄 前言 一、被控對象模型 二、初始控制器設計 三、改進初始設計 五、查看軟約束 七、參考 前言 您可以檢查模型預測控制器設計是否存在潛在的穩定性和魯棒性問題。具體操作如下 在命令行中&#xff0c;使用審查功能。在 MPC Designer 中&a…

《GPT-4.1深度解析:AI進化新標桿,如何重塑行業未來?》

一、GPT-4.1:AI 領域的 “全能戰士” 降臨 1.1 發布背景與戰略意義 在 OpenAI 的技術迭代版圖中,GPT-4.1 被賦予了 “承前啟后” 的關鍵角色。它不僅是 GPT-4o 的全面升級版,更被視為向 GPT-5 過渡的重要橋梁。2025 年 4 月 15 日的發布會上,OpenAI 宣布 GPT-4.1 系列模型…

MySQL+Redis實戰教程:從Docker安裝部署到自動化備份與數據恢復20250418

MySQLRedis實戰教程&#xff1a;從Docker安裝部署到自動化備份與數據恢復 一、前言 在企業應用中&#xff0c;對MySQL和Redis運維的要求越來越高&#xff1a; 不能僅是啟動就算部署運行穩定、隔離、訪問控制、備份恢復、安全可靠&#xff0c;才是 企業級的基本功能 本文將手…

Linux系統編程之守護進程與調試技術

在Linux系統編程中&#xff0c;守護進程&#xff08;Daemon&#xff09;是非常重要的一種概念。它允許程序在后臺運行&#xff0c;不受用戶交互的影響&#xff0c;并且可以持續長時間地運行。通過了解如何創建和管理守護進程&#xff0c;我們能夠開發出更加穩定、高效的系統應用…

Linux中的管道

管道的概念 管道是一種進程間通信的方式。 管道是一種半雙工通信機制&#xff0c;數據只能讀或寫&#xff0c;如果要讀寫同時進行就要創建兩個管道 管道的類型 1、匿名管道PIPE&#xff1a;通常在親緣進程中使用&#xff08;兄弟、父子&#xff09; 函數參考&#xff1a;匿名管…

深度學習2.4 微積分

2.4.1 導數和微分 2.4.2 偏導數 ![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/17227e00adb14472902baba4da675aed.png 2.4.3 梯度 具體證明&#xff0c;矩陣-向量積

《軟件設計師》復習筆記(11.3)——需求獲取、分析、定義、驗證、管理

目錄 一、軟件需求概述 真題示例&#xff1a; 二、質量功能部署&#xff08;QFD&#xff09; 三、需求開發流程 需求獲取 需求分析 需求定義&#xff08;SRS&#xff09; 需求驗證 真題示例&#xff1a; 四、需求管理 真題示例&#xff1a; 一、軟件需求概述 軟件…

Spring Boot 依賴注入與Bean管理:JavaConfig如何取代XML?

大家好呀&#xff01;今天我們來聊一個超級實用的技術話題 —— Spring Boot 中的依賴注入和Bean管理&#xff0c;特別是JavaConfig是如何一步步取代XML配置的。我知道很多小伙伴一聽到"依賴注入"、"Bean管理"這些詞就頭大&#xff0c;別擔心&#xff01;我…

全志H5,NanopiKP1lus移植QT5.12記錄

移植步驟 機器環境下載QT5.12.0源碼安裝交叉編譯器修改qmake.conf文件配置編譯選項qt5的configure選項說明基本配置選項編譯器和鏈接器選項功能模塊配置第三方庫集成注意事項 配置過程報錯解決配置完成編譯過程報錯解決編譯完成將arm-qt文件夾傳送到開發板配置板子環境變量運行…

STM32單片機C語言

1、stdint.h簡介 stdint.h 是從 C99 中引進的一個標準 C 庫的文件 路徑&#xff1a;D:\MDK5.34\ARM\ARMCC\include 大家都統一使用一樣的標準&#xff0c;這樣方便移植 配置MDK支持C99 位操作 如何給寄存器某個值賦值 舉個例子&#xff1a;uint32_t temp 0; 宏定義 帶參…