Unity設計模式之工廠模式

什么是工廠模式?

? ? ? ? 工廠是一種創建型設計模式。通俗來講就是提供一種封裝對象創建的方式,將對象的創建和使用區分開。就是Unity里面通常用到的創建和管理對象。

工廠模式有什么優點?

? ? ? ? 1、封裝對象的創建方式,使其更加靈活、易于管理、可擴展、可維護,降低代碼的耦合性。

? ? ? ? 2、提供一種統一的對象創建方式,代碼解讀更加容易懂、邏輯更加清晰。

? ? ? ? 3、可以根據不同的需求創建不同的對象。

工廠模式有什么缺點?

? ? ? ? 1、違反了單一職責原則;添加新類型時需要修改工廠類。(不包含抽象工廠模式)

? ? ? ? 2、增加了前期代碼的復雜度,需要創建更多的類(基類、管理類、派生類等)

? ? ? ? 感覺這也不算缺點吧。。。

工廠模式中的分類:

????????普通工廠模式、工廠方法模式、抽象工廠模式。

普通工廠模式

1、創建一個類作為其他派生類的基類

public class FactoryBase : MonoBehaviour
{protected string name;public virtual void OnUse(){Debug.LogError(name);}
}

2、再創建兩個派生類 Derive1、Derive2

public class Derive1 : FactoryBase
{public Derive1(){name = "Derive1";}public override void OnUse(){base.OnUse();GameObject o = new GameObject(name);o.AddComponent<Derive1>();}
}public class Derive2 : FactoryBase
{public Derive2(){name = "Derive2";}public override void OnUse(){base.OnUse();GameObject o = new GameObject(name);o.AddComponent<Derive1>();}
}

3、最后創建一個對象管理類

public class FactoryMgr : MonoBehaviour
{public static FactoryBase CreateItem(string deriveName){FactoryBase item = null;if (deriveName == "1"){item = new Derive1();}if (deriveName == "2"){item = new Derive2();}return item;}
}

應用普通工廠模式

這就是普通的工廠模式的應用

public class FactoryApply : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){FactoryMgr.CreateItem("1").OnUse();FactoryMgr.CreateItem("2").OnUse();}
}

工廠方法模式

1、定義派生類接口和派生類

public interface IDevive
{void Use();
}public class Devive1 : IDevive
{public void Use(){Debug.LogError("Devive1");}
}public class Devive2 : IDevive
{public void Use(){Debug.LogError("Devive2");}
}

2、再定義派生工廠接口和派生工廠類

public interface IFactory
{IDevive CreateDevive();
}public class Devive1Item : IFactory
{public IDevive CreateDevive(){return new Devive1();}
}public class Devive2Item : IFactory
{public IDevive CreateDevive(){return new Devive2();}
}

應用工廠方法模式

public class FactoryApply : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){var i1 = new Devive1Item().CreateDevive();i1.Use();var i2 = new Devive2Item().CreateDevive();i2.Use();}
}

抽象工廠模式

1、定義派生類接口和派生類

public interface IDevive
{void Use();
}public class Devive1 : IDevive
{public void Use(){Debug.LogError("Devive1");}
}public class Devive2 : IDevive
{public void Use(){Debug.LogError("Devive2");}
}

2、再定義派生工廠接口和派生工廠類

public interface IFactory
{IDevive CreateDevive();
}public class Devive1Item : IFactory
{public IDevive CreateDevive(){return new Devive1();}
}public class Devive2Item : IFactory
{public IDevive CreateDevive(){return new Devive2();}
}

3、抽象派生類管理器接口和派生類管理器

public interface IDeviveManager
{IFactory CreateDevive1Item();IFactory CreateDevive2Item();
}public class DeviveManager : IDeviveManager
{public IFactory CreateDevive1Item(){return new Devive1Item();}public IFactory CreateDevive2Item(){return new Devive2Item();}
}

應用抽象工廠模式

public class FactoryApply : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){IDeviveManager deviveManager = new DeviveManager();IFactory item1 = deviveManager.CreateDevive1Item();IDevive devive1 = item1.CreateDevive();devive1.Use();IFactory item2 = deviveManager.CreateDevive2Item();IDevive devive2 = item2.CreateDevive();devive2.Use();}
}

總結:

????????工廠模式定義了一個創建對象的接口,但由子類決定實例化哪個類。它使一個類的實例化延遲到其子類。

????????工廠模式通過將客戶端代碼與具體類的實例化過程解耦,使得系統更靈活。

? ? ? ? 但是,每增加一個子模塊就需要增加一個子類和工廠類,導致類的數量增加。

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

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

相關文章

vue elementui時間選擇器返回的時間轉成年月日-格式

關鍵點&#xff1a;value-format“yyyy-MM-dd” <template><el-date-pickerv-model"date"type"date"placeholder"選擇日期"format"yyyy-MM-dd"value-format"yyyy-MM-dd"></el-date-picker> </template…

【教學類-55-04】20240515圖層順序挑戰(四格長條紙加黑色邊框、4*4、7張,不重復5400張,16坐標點顏色哈希值去重、保留7色)

背景需求&#xff1a; 前文實現了7張色彩紙條加上黑色邊框的需求。 【教學類-55-02】20240512圖層順序挑戰&#xff08;四格長條紙加黑色邊框、4*4、7張 、43200張去掉非7色有23040張&#xff0c;哈希算法快速去重剩余1221張&#xff09;-CSDN博客文章瀏覽閱讀1k次&#xff0…

GPT-4o模型介紹和使用方法

大家好,我是herosunly。985院校碩士畢業,現擔任算法研究員一職,熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名,CCF比賽第二名,科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的見解。曾經輔導過若干個非計算機專業的學生進入到算法…

9個優質免費視頻素材網站推薦丨2024年最新資源合集

在短視頻火爆的時代&#xff0c;高清、無水印、可商用的視頻素材變得尤為重要。下面是我精心整理的9個常用免費視頻素材網站&#xff0c;適合各類視頻創作者。希望你能找到滿意的素材&#xff01; 一、視頻素材 1. 蛙學府 優點&#xff1a;豐富的正版商用素材&#xff0c;涵蓋…

AI 繪畫神器 Fooocus 高級用法:設置、風格、模型、高級設置

本文收錄于《AI繪畫從入門到精通》專欄&#xff0c;專欄總目錄&#xff1a;點這里&#xff0c;訂閱后可閱讀專欄內所有文章。 大家好&#xff0c;我是水滴~~ 本文精選了一系列高級技巧和細致調整&#xff0c;旨在提升 Fooocus 用戶在利用 Stable Diffusion 模型進行圖像生成時的…

vue使用marked和highlight.js實現代碼高亮效果

marked是對markdown進行解析的插件&#xff0c;它可以把markdown語法解析成html語法&#xff0c;從而實現頁面效果&#xff0c;而highlight.js是對解析出的代碼實現高亮效果 效果&#xff1a; 安裝&#xff1a;避免踩我走的坑&#xff0c;安裝盡量按照這個版本安裝 npm install…

Java實現ZIP壓縮并支持設置密碼:輕松上手指南

在日常開發中&#xff0c;我們常常需要對文件進行壓縮處理&#xff0c;尤其是當文件需要傳輸或存儲時&#xff0c;壓縮不僅能節省空間&#xff0c;還能提升效率。而為壓縮文件添加密碼則為數據安全提供了額外保障。本文將指導你如何在Java中實現ZIP文件的壓縮&#xff0c;并為其…

Linux進程——進程地址空間

前言&#xff1a;在講完環境變量后&#xff0c;相信大家對Linux有更進一步的認識&#xff0c;而Linux進程概念到這也快接近尾聲了&#xff0c;現在我們了解Linux進程中的地址空間&#xff01; 本篇主要內容&#xff1a; 了解程序地址空間 理解進程地址空間 探究頁表和虛擬地址空…

matlab使用教程(71)—控制坐標區布局

1.與位置相關的屬性和函數 有幾個屬性和函數可用于獲取和設置坐標區的大小與位置。下表摘要顯示了這些屬性和函數。 函數或屬性描述 OuterPosition 屬性 使用此屬性可以查詢或更改坐標區的外邊界&#xff0c;包括標題、標簽和邊距。要更改外邊界&#xff0c;請將此屬性指定為…

MySQL、JDBC復盤及規劃

數據庫仍有習題尚未做完&#xff0c;策略從一天做完改為每天5到10題&#xff0c;以此達到掌握和復習的效果&#xff0c;JDBC的六部仍需每天練習&#xff0c;從明天開始正式進行JavaWeb的學習&#xff0c;預計持續到七月中旬&#xff0c;還會完成一個書城項目&#xff0c;六月底…

基于Hadoop的課程診改大數據可視化分析研究與應用

基于Hadoop的課程診改大數據可視化分析研究與應用 “A Study and Application of Big Data Visualization Analysis for Course Diagnosis and Improvement based on Hadoop” 完整下載鏈接:基于Hadoop的課程診改大數據可視化分析研究與應用 文章目錄 基于Hadoop的課程診改大…

Vue 快速入門:Vue初級

語法規則 前端渲染 渲染有幾種方式&#xff1a;原生js、js模板、Vue模板語法 原生js 使用字符串拼接 js模板語法 Vue.js 模板語法概述 Vue.js 是一個用于構建用戶界面的漸進式框架&#xff0c;其模板語法非常靈活和直觀。Vue 的模板語法基于 HTML&#xff0c;可以通過指令…

Symbol類型的作用

在TypeScript&#xff08;和JavaScript&#xff09;中&#xff0c;Symbol 是一個內置對象&#xff0c;它提供了一個唯一的且不可改變的數據類型&#xff0c;用于作為對象的鍵&#xff08;key&#xff09;。這種類型主要用于避免命名沖突&#xff0c;特別是在使用像 for...in 或…

kali更換鏡像源

vim /etc/apt/sources.list.d/docker.list 或 vim /ect/apt/sources.list #清華大學源 deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free #中科大 de…

PID調節常見的問題----積分飽和等問題--參考學習

1&#xff0c; PID控制學習筆記之三—積分的處理 https://zhuanlan.zhihu.com/p/264238608 2&#xff0c;PID控制參數整定&#xff08;調節方法&#xff09;原理圖示MATLAB調試 https://blog.csdn.net/viafcccy/article/details/107988093 3&#xff0c;如何理解PID控制算法中…

Java為什么會成為現在主流的編程語言

Java為什么會成為現在的主流語言 前言一、Java語言概述Java是什么為什么大多數人會選擇從事Java為什么從事Java的工作者數量從年遞減 二、Java語言的特點簡單性面向對象分布式&#xff08;微服務&#xff09;健壯性安全性體系結構中立可移植性解釋型高性能多線程動態性 三、Jav…

UDP多對多組播通信

廣播和多播僅應用于UDP。TCP是一個面向連接的協議&#xff0c;TCP一定是點對點的&#xff0c;一點是兩個主機來建立連接的&#xff0c;TCP肯定是單播。只有UDP才會使用廣播和組播。 如下示例實現一個UDP多對多的組播通信&#xff0c;進程中有收、發兩個線程&#xff0c;分別表…

6款電腦精選工具軟件推薦!

AI視頻生成&#xff1a;小說文案智能分鏡智能識別角色和場景批量Ai繪圖自動配音添加音樂一鍵合成視頻https://aitools.jurilu.com/ 1.IP地址查看工具——純真ip數據庫 純真IP數據庫是一個易于操作的IP地址查詢工具&#xff0c;它允許用戶通過輸入IP地址來查詢其對應的地理位置…

Django創建網站的地基

相關文檔 1、為新網站創建一個文件夾&#xff08;這里是&#xff1a;locallibrary&#xff09; D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\dj…

【Uniapp】簡易封裝提示框showToast/showModal

組件 // 封裝提示框 export const showModal (content, showCancel false, title "提示") > {return new Promise((resolve, reject) > {uni.showModal({title: title,content: content,showCancel: showCancel,success: (res) > {resolve(res);},fail:…