1. 程式人生 > >遊戲中的設計模式七(建造者模式)

遊戲中的設計模式七(建造者模式)

好久沒有更新設計模式系列教程了

本文給大家介紹建造者模式

寫在前面

在建立遊戲物件時往往一個物件伴隨著多個屬性或建立邏輯

此時為了構建這個複雜的遊戲物件將各個部分的邏輯進行分離(與工廠模式最主要的作用區別)

案例分析


建造者類

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


/// <summary>
/// 建造者模式的建造者角色
/// </summary>
public abstract class IBuilder
{
    public ICharacter character { get; set; }
    public abstract void AddAttribute();
    public abstract void AddCharacterGameobject();
    public abstract void AddWeaponGameObject();
    public abstract ICharacter ResultCharacter();
}


具體士兵建造者類

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

public class SliderBuilder : IBuilder
{
    public SliderBuilder()
    {
        character = new SliderCharacter();
    }

    public override void AddAttribute()
    {
        character.SetAttribute();
    }

    public override void AddCharacterGameobject()
    {
        character.SetCharacter();
    }

    public override void AddWeaponGameObject()
    {
        character.SetWeapon();
    }

    public override ICharacter ResultCharacter()
    {
        Debug.Log("成功建立士兵");
        return character;
    }
}

具體敵人建造者類
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBuilder : IBuilder
{
    public EnemyBuilder()
    {
        character = new EnemyCharacter();
    }

    public override void AddAttribute()
    {
        character.SetAttribute();
    }

    public override void AddCharacterGameobject()
    {
        character.SetCharacter();
    }

    public override void AddWeaponGameObject()
    {
        character.SetWeapon();
    }

    public override ICharacter ResultCharacter()
    {
        Debug.Log("成功建立敵人");
        return character;
    }
}

導演類
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 建造者模式的導演角色
/// </summary>
public class Director : MonoBehaviour
{
    public static ICharacter ConstructCharacter(IBuilder builder)
    {
        builder.AddAttribute();
        builder.AddCharacterGameobject();
        builder.AddWeaponGameObject();

        return builder.ResultCharacter();
    }
}

產品類
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 建造者模式的產品角色
/// </summary>
public abstract class ICharacter
{
    public abstract void SetAttribute();
    public abstract void SetCharacter();
    public abstract void SetWeapon();
}

士兵類

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

public class SliderCharacter:ICharacter
{
    public string name { get; set; }
    public string characterPrefabPath { get; set; }
    public string weaponPrefabPath { get; set; }
    public GameObject characterGameObject { get; set; }
    public GameObject weaponGameObject { get; set; }


    public override void SetAttribute()
    {
        name = "Slider";
        characterPrefabPath = "SliderCharacterPrefabPath";
        weaponPrefabPath = "SliderWeaponPrefabPath";
    }

    public override void SetCharacter()
    {
       // characterGameObject = GameObject.Instantiate(Resources.Load(characterPrefabPath) as GameObject);
    }

    public override void SetWeapon()
    {
       // characterGameObject = GameObject.Instantiate(Resources.Load(weaponPrefabPath) as GameObject);
    }
}

敵人類
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyCharacter : ICharacter
{
    public string name { get; set; }
    public string characterPrefabPath { get; set; }
    public string weaponPrefabPath { get; set; }
    public GameObject characterGameObject { get; set; }
    public GameObject weaponGameObject { get; set; }


    public override void SetAttribute()
    {
        name = "Enemy";
        characterPrefabPath = "EnemyCharacterPrefabPath";
        weaponPrefabPath = "EnemyWeaponPrefabPath";
    }

    public override void SetCharacter()
    {
       // characterGameObject = GameObject.Instantiate(Resources.Load(characterPrefabPath) as GameObject);
    }

    public override void SetWeapon()
    {
       // characterGameObject = GameObject.Instantiate(Resources.Load(weaponPrefabPath) as GameObject);
    }
}

測試

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

public class BuilderDesigner : MonoBehaviour
{
    private void Start()
    {
        ICharacter slider = Director.ConstructCharacter(new SliderBuilder());
        ICharacter enemy = Director.ConstructCharacter(new EnemyBuilder());
    }    
}


模式分析

模式定義:建造者模式是設計模式的一種,將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示模式優點:封裝性很好、很容易的進行擴充套件與工廠模式的對比:同:一般來說,建立的物件比較複雜時候用工廠模式,更復雜時候就用建造者模式異:工廠模式是將一個物件的全部建立過程封裝在工廠類中,由於工廠類向客戶端提供最終的產品;而建造者模式中,建造者類一般只提供產品類中各個元件的建造,而將具體建造邏輯過程交付給導演類。由於導演類負責將各個元件按照特定的規則元件為產品,然後將元件好的產品物件交付給客戶端

相關推薦

遊戲設計模式建造模式

好久沒有更新設計模式系列教程了本文給大家介紹建造者模式寫在前面在建立遊戲物件時往往一個物件伴隨著多個屬性或建立邏輯此時為了構建這個複雜的遊戲物件將各個部分的邏輯進行分離(與工廠模式最主要的作用區別)案例分析建造者類using System.Collections; using

淺析設計模式——創建型模式之Builder(建造模式)

main方法 ref 內部 spa implement line pat 接口 及其 建造者模式Builder 本文的內容: 一、建造者模式的定義 二、建造者模式的參與者及其角色 三、建造者模式的類圖 四、建造者模式的示例 五、參考 一、建造者模式的定義    將一個復

初識設計模式建造模式

auth div bsp ddp des print 生成 pub 定義 前言:繼續學習設計模式,今天學習建造者模式。 建造者模式(Builder Pattern) 定義   又叫生成器模式。將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 設

多屬性類的設計--builder模式建造模式

參考文件: https://www.cnblogs.com/lwbqqyumidi/p/3742562.html https://blog.csdn.net/superdangbo/article/details/80308820 https://www.cnblogs.com/aa

設計模式總結之Builder Pattern建造模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Builder Pattern(建造者模式) 意圖 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。適用性 * 當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。

設計模式實戰——開發經常涉及到的建造模式

> 本系列部落格是自己在學習設計模式過程中收集整理的文章集合,其他文章參看[設計模式傳送門](https://www.cnblogs.com/54chensongxia/p/12394160.html) ## 建造者模式簡介 建造者模式是一種建立型設計模式,這種模式具有很好的封裝性。使用建造者模式可以有

Java設計模式百例 - 建造模式

java設計模式本文源碼見:https://github.com/get-set/get-designpatterns/tree/master/builder建造者模式(Builder Pattern)使用多個簡單的對象一步一步構建成一個復雜的對象,這種類型的設計模式屬於創建型模式。建造模式可以將一個復雜對象

我的設計模式:從模版設計模式談到建造模式

模版設計模式 建造者模式 導演模式 1.模版設計模式 TemplateMethod Pattern問題:創建模型,如何處理更好?有共性有異性,共性放在哪裏(abstract)?異性放在哪裏(實現)? 缺陷:暴露方法好嗎?protected保護起來 方法不會被子類繼承修改final

設計模式のMediatorPattern中介模式----行為模式

短信 應該 console ons read 操作 namespace 原則 針對 一、產生背景 從生活中的例子可以看出,不論是QQ遊戲還是QQ群,它們都是充當一個中間平臺,QQ用戶可以登錄這個中間平臺與其他QQ用戶進行交流,如果沒有這些中間平臺,我們如果想與朋友進行聊天的

設計模式:builder 建造模式

設計模式能很好的解決多引數構造複雜的問題,程式碼可讀性高,易維護,缺點是過於冗長。其基本思想是在構造的類中,使用一個靜態內部Builder類提供的build方法來構造該物件,Builder內部類對所有的引數有方法化。 https://blog.csdn.net/xu404741377/a

自定義dialog建造模式

效果圖: Styles.xml <style name="updateStyleDialog" parent="android:Theme.Dialog"> <item name="android:windowFrame">@nul

Java設計模式4:建造模式

一、什麼是建造者模式? 1、定義: 是將一個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立複合物件,所謂複合物件就是指某個類具有不同的屬性,其實建造者模式就

大話設計模式六:建造模式

一.模式定義 物件建立型模式。實現複雜物件的構建與表示分離,使得同樣的構建過程可以建立不同的表示。 建造者模式是一步一步建立一個複雜的物件,它允許使用者只通過指定複雜物件的型別和內容就可以構建它們,使用者不需要知道內部的具體構建細節。 Builder Pattern: Se

java常用設計模式四:建造模式

規則 擴展 cto 抽象 具體類 代碼量 特定 clas class 1、定義 是一種對象構建的設計模式,它可以將復雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象。 產品類:一般是一個較為復雜的對象,也就是說創建對象的過

大話設計模式java版--建造模式

建造者模式用來解決的問題是建造的將流程與細節分開來處理的。例如:樓房的建造流程是固定的,但是具體的建造是不一定的。還有漢堡的製造流程是固定的,但是具體的用的材料和細節是不一定的,這時候建造者模式就是為了解決這個問題出現的。 建造者模式:是將一個複雜的物件的構建與它的表示分離

Java進階篇設計模式之三 ----- 建造模式和原型模式

前言 在上一篇中我們學習了工廠模式,介紹了簡單工廠模式、工廠方法和抽象工廠模式。本篇則介紹設計模式中屬於建立型模式的建造者模式和原型模式。 建造者模式 簡介 建造者模式是屬於建立型模式。建造者模式使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式

Java 設計模式情景分析——建造模式

當我們遇到類似汽車的裝配,需要車輪、方向盤、發動機,還有各種小零件時,為了在構建過程中隱藏實現細節,就可以使用建造者模式 (Builder模式) 將部件和組裝過程分離,使得構建過程和部件都可以自由擴充套件,兩者之間的耦合也降到最低。接下來我們看一下定義,建造

設計模式--淺談建造模式

建造者模式的優缺點和使用環境 1.優點:(1)客戶端不必知道產品內部組成的細節,將產品本身與產品的建立過程解耦,使得相同的建立過程可建立不同的產品物件 (2)每一個建造者都相對獨立,與其他的建造者無關,因此可以很方便的替換具體建造者或增加新的具體建造者,使用者使用不同的建

設計模式讀書筆記-----建造模式

       流水作業大家應該都清楚吧!在流水作業中,我們可以將一些複雜的東西給構建出來,例如汽車。我們都知道汽車內部構件比較複雜,由很多部件組成,例如車輪、車門、發動機、方向盤等等,對於我們使用者來

設計模式之Builder建造模式 代碼初見

() 分享 void this emp 技術 傳送門 birt pat public class EmployeeBuilder { private int id = 1; private string firstname = "first&quo