1. 程式人生 > >遊戲中的設計模式二(外觀模式)

遊戲中的設計模式二(外觀模式)

寫在前面

在遊戲中一個場景可能需要與多個系統進行資訊互動,比如戰鬥系統,揹包系統,經濟系統等

在編寫程式碼時候勢必要將各個系統之間的通訊和依賴降低到儘可能的小

這時候適合使用外觀模式,將應用程式只能看到外觀(facade)物件,不必理會內部的細節物件,從而降低應用程式的複雜度,提高應用程式的可維護性

案例分析


外觀模式整理後


這樣讓外部減少與子系統內多個模組的互動,鬆散耦合,從而使外部能夠更簡單地使用各個子系統。

程式碼編寫

以上篇文章專案繼續開發,比如在戰鬥場景中初始化各個系統

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine.SceneManagement;

class BattleScene : ISceneState
{
	public BattleScene() : base("BattleScene")
	{
	}

	public override void StartScene()
	{
		SceneManager.LoadScene(this.mSceneName);

		BattleSystem bs = new BattleSystem();
		bs.Init();
		PacketSystem ps = new PacketSystem();
		ps.Init();
		GoldSystem gs = new GoldSystem();
		gs.Init();
	}
}


使用外觀模式管理程式碼如下

Facade.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Facad
{
	public void Init()
	{
		BattleSystem bs = new BattleSystem();
		bs.Init();
		PacketSystem ps = new PacketSystem();
		ps.Init();
		GoldSystem gs = new GoldSystem();
		gs.Init();
	}
}


在戰鬥場景內呼叫Facade來初始化各個子系統

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine.SceneManagement;

class BattleScene : ISceneState
{
	public BattleScene() : base("BattleScene")
	{
	}

	public override void StartScene()
	{
		SceneManager.LoadScene(this.mSceneName);

		Facade facade = new Facade();
		facade.Init();
	}
}


但是外觀模式的缺點顯而易見了,違背了設計原則的開閉原則,當我們有其他系統需要做初始化工作時候將修改Facade。

原文地址:blog.liujunliang.com.cn

相關推薦

遊戲設計模式外觀模式

寫在前面 在遊戲中一個場景可能需要與多個系統進行資訊互動,比如戰鬥系統,揹包系統,經濟系統等 在編寫程式碼時候勢必要將各個系統之間的通訊和依賴降低到儘可能的小 這時候適合使用外觀模式,將應用程式只能看到外觀(facade)物件,不必理會內部的細節物件,從而降低應用程式的複雜

C++重寫《大話設計模式模式例項工廠模式

下面連結文章是我改寫的簡單工廠模式,可以和工廠模式做對比。 程式:輸入兩個數和運算子,得到 結果。 雖然工廠模式比簡單工廠模式編寫複雜一點,但是它更符合“開放-封閉原則”,就是程式增加功能應該是

設計模式【Facade模式外觀模式

Facade模式(外觀模式) 為子系統中的一組介面提供一個統一的介面。Facade模式定義了一個更高層的介面,使系統更容易使用。 Facade模式 關鍵特徵 意圖 希望簡化 原系統的使用方

遊戲設計模式策略模式

部落格地址:blog.liujunliang.com.cn寫在前面在遊戲中計算各個覺得的攻擊值、防禦值時,由於各個角色的職業不同,攻擊值和防禦值計算演算法就會不一樣通常使用if....else語句來抉擇不同型別之間的演算法將帶來程式複雜和難以維持,當有新的演算法或行為時違背開

23種設計模式策略模式

而不是 部分 nts 設定 算法 策略 bstr 算法族 none 策略模式:(分別封裝行為接口,實現算法族,超類裏放行為接口對象,在子類裏具體設定行為對象) 原則:   分離變化部分,封裝接口,基於接口編程各種功能。此模式讓行為算法的變化獨立於算法的使用者。    舉

設計模式的黃金搭檔一對活寶:命令模式+觀察者模式

現有場景描述:現在無論是系統自帶的鍵盤還是第三方的鍵盤一般都自帶撤銷和恢復功能,你知道它們是用的什麼模式實現的嗎?它們用的是==命令模式+觀察者模式==,你答對了嗎?簡單科普一下啥是==Command模式==? Command模式:- 模式型別:行為類模式- 定義:將一個操作、一個方法呼叫、一個命令封裝成一個

設計模式之單例模式懶漢式double check

上一篇文章中的懶漢式單例模式採用同步方法保證了執行緒安全,但是開銷很大,每次執行該方法都會檢查鎖。下面採用double check的方式進行改寫,下面這種實現看似可行,實則有缺陷,具體缺陷在後文分析: 注意上面第二幅圖中對lazyDoubleCheckSingl

JAVA設計模式之門面模式外觀模式

醫院的例子   現代的軟體系統都是比較複雜的,設計師處理複雜系統的一個常見方法便是將其“分而治之”,把一個系統劃分為幾個較小的子系統。如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為掛號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系

java23種設計模式-門面外觀模式

定義 外觀模式為子系統的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 UML 角色 子系統(SubSystem): 表示一個系統的子系統或者模組 門面(Facade): 客戶端通過門面間接控制子系統。門面遮蔽

Java設計模式之從[打飛機遊戲的控制器]分析命令(Command)模式

  首先請允許我囉嗦幾句。為什麼我們在軟體設計過程中強調設計模式?為軟體增加設計模式確實會增加一定的程式碼複雜程度,但是它的好處是無窮的。它可以使得軟體更加易於擴充套件而無需改變原始碼。“解耦”是設計模式中的一個關鍵詞。例如,對於某個物件obj,在呼叫obj.method(

設計模式之門面模式外觀模式 十一

說到了門面模式,有些地方又叫做外觀模式,這個模式在平時做Web專案中應該是經常用到,像我們的Service層與DAO層,就是用到了門面模式,Controller層本來是需要跟一個個DAO打交道,但是有了Service層,它直接與DAO打交道,Controller就可以直接使用

IOS設計模式門面模式,裝飾器模式

注意:這個是一個重要的模式。蘋果在UIKit類中大量使用了它:UITableView, UITextView,UITextField, UIWebView, UIAlert, UIActionSheet, UICollectionView,UIPickerView,UIGestureRecognizer, U

Java設計模式之十代理模式

一、什麼是代理模式 Proxy模式又叫做代理模式,是構造型的設計模式之一,它可以為其他物件提供一種代理(Proxy)以控制對這個物件的訪問。 所謂代理,是指具有與代理元(被代理的物件)具有相同的介面的類,客戶端必須通過代理與被代理的目標類互動,而代理一般在互動的過程中(互

設計模式總結之Facade Pattern外觀模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Facade Pattern(外觀模式) 意圖 為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。適用性 * 當你要為一個複雜子系統提供一個簡單介

WebKit設計模式(),單例模式

單例模式應該是最容易理解的一個設計模式了.我在面試的時候也被問過. 它可以讓我們很輕鬆的訪問定義的全域性,或某些功能實現,並保證在整個工程中只有這一個物件. ResourceHandleManager.cpp ResourceHandleManager* Resource

設計模式學習C++實現7——介面卡模式、裝飾器模式、代理模式外觀模式

介面卡模式、裝飾器模式、代理模式和外觀有些類似,又有些不同,他們的實現形式差不多,都是對已有的方法和類進行封裝,以實現適配、增強、加以控制或隱藏系統複雜性的目的 1 介面卡模式 例如多功能讀卡器,可插入多種不同的卡,完成讀取資料的功能。 class C

Java設計模式系列十三外觀模式

故事一 A:聽說最近出了某款遊戲超好玩,但是我電腦帶不起來,需要個組裝機玩遊戲。 B:你說XX遊戲嗎?真的很好玩,筆記本玩不了

門面模式外觀模式

package archive 相互調用 int 選擇 oid pub href sta 參考:http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html /DesignPatterns/sr

設計模式5命令模式,叠代器模式

對象的訪問 叠代器模式 元素 div 使用 ble col top 執行 命令模式 本質是封閉請求,其關鍵是把請求封閉成對象,也就是命令對象,並定義了統一的執行操作的接口,這個命令可以存儲、轉發、記錄、處理、撤消等。整個命令模式都是圍繞這個對象進行。 命令

設計模式4代理模式,觀察者模式

代理 bject body border 策略 解決 設計模式 server 觀察者 代理模式 本質是控制對主題對象的訪問 功能 目的 代理模式 但是代理對象則提供與目標對象相同的接口 控制對象的訪問 適配器模式 解決接口