214. 用過哪些設計模式?談談自己比較熟悉的設計模式
1、工廠模式 2、代理模式 3、策略模式 4、觀察者模式 6、單例模式
工廠模式:簡單工廠模式解決的問題是如何去實例化一個合適的對象。
簡單工廠模式的核心思想就是:有一個專門的類來負責創建實例的過程。凡是出現了大量的產品需要創建,并且具有共同的接口時,可以通過工廠方法模式進行創建。比如說寫技能是一系列類,那么就可以使用工廠模式創建。
代理模式:一個是真正的你要訪問的對象(目標類),一個是代理對象,真正對象與代理對象實現同一個接口,先訪問代理類再訪問真正要訪問的對象。代理模式就是多一個代理類出來,替原對象進行一些操作,比如我們在租房子的時候回去找中介,為什么呢?因為你對該地區房屋的信息掌握的不夠全面,希望找一個更熟悉的人去幫你做,此處的代理就是這個意思。再如我們有的時候打官司,我們需要請律師,因為律師在法律方面有專長,可以替我們進行操作,表達我們的想法。
代理模式的應用場景:
如果已有的方法在使用的時候需要對原有的方法進行改進,此時有兩種辦法:
1、修改原有的方法來適應。這樣違反了“對擴展開放,對修改關閉”的原則。
2、就是采用一個代理類調用原有的方法,且對產生的結果進行控制。這種方法就是代理模式。
使用代理模式,可以將功能劃分的更加清晰,有助于后期維護!
其實,簡單來講就一句 使用算法的客戶。策略模式的決定權在用戶unity狀態機屬性,系統本身提供不同算法的實現,新增或者刪除算法,對各種算法做封裝。因此,策略模式多用在算法決策系統中,外部用戶只需要決定用哪個算法即可。
觀察者模式很好理解,類似于郵件訂閱和 RSS 訂閱,當我們瀏覽一些博客或 wiki 時,經常會看到 RSS 標,就這的意思是,當你訂閱了該文章,如果后續有更新,會及時通知你。其實,簡單來講就一句話:當一個對象變化時,其它依賴該對象的對象都會收到通知,并且隨著變化!對象之間是一種一對多的關系。
單例對象()是一種常用的設計模式。在 C#應用中,單例對象能保證在一個 CLR 中,該對象
只有一個實例存在。這樣的模式有幾個好處:
1、某些類創建比較頻繁,對于一些大型的對象,這是一筆很大的系統開銷。
2、省去了 new 操作符,降低了系統內存的使用頻率,減輕 GC 壓力。
3、有些類如交易所的核心交易引擎,控制著交易流程,如果該類可以創建多個的話,系統完全亂了。
(比如一個軍隊出現了多個司令員同時指揮,肯定會亂成一團),所以只有使用單例模式,才能保證核
心交易服務器獨立控制整個流程。
215. 請說出 4 種面向對象的設計原則,并分別簡述它們的含義。
1) 單一職責原則 (The ,簡稱
SRP):一個類,最好只做一件事,只有一個引起它的變化.
2) 開放-封閉原則 (The Open-Close ,簡稱
OCP):對于擴展是開放的,對于更改是封閉的
3) 替換原則(The ,簡稱
LSP):子類必須能夠替換其基類
4) 依賴倒置原則 (Theunity狀態機屬性, 簡稱
DIP):依賴于抽象
5) 接口隔離原則 (The ,簡稱
ISP):使用多個小的專門的接口,而不要使用一個大的總接口。
216. 設計一個狀態機類型,狀態值為 int 類型,要求:
擁有接口,獲取當前狀態,切換狀態
外部可以監聽狀態切換事件,參數為切換前狀態和切換后狀態(使用 和 event)//定義一個狀態
public abstract class IAction{ public int StateName; public IAction(int stateName) { this.StateName = stateName; } public int GetState(){return StateName; } public abstract bool CanGetIn(); public abstract void GetIn(); public abstract void GetOut(); public abstract void Update(float dt); } //定義一個狀態切換事件 public abstract class IEvent { public int code; public IEvent(int code) { this.code = code; }
public int GetCode(){ return code; } //當前狀態事件檢測 public abstract bool Check(); } public class AvatarStateMachine{ //初始化狀態機public void InitStateMachine(){} //注冊一個狀態 public void AddAction(int action) {} //注冊一個狀態切換事件 public void AddEventTransition(int fromAction, int toAction, IEvent byEvent) {} //更新當前狀態,檢測能否進入下一個狀態
public void UpdateStateMachine(){} //強行切換狀態 public void SwitchTo(int toState) {} }
217. 如何處理 unity 中界面資源,界面邏輯以及功能模塊三者之間耦合關系
這就是在 Unity 使用 MVC 時通常將功能模塊盡量脫離脫離 ,同一個模塊內 M 只用來操
作數據并發送更新消息,V 只用來接受消息并控制界面顯示跳轉,使用 C 來處理界面與數據的頻繁操
作。
218. 觀察者模式的深入理解?
觀察者模式:一對多的關系,當被觀察這發生改變時會通知所有觀察者。讓雙方都依賴于抽象,使得
各自變化不會影響另一方。
219. MVC 模式
用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和
個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。