建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 --《大话设计模式》
“徒儿,为师教的功法你都学会了吗?”此时一位白发苍苍的老者走到少年前说道。
“师傅,弟子以再此苦修数十载,不说融会贯通,确都小有所成。”少年拱手说道。
老者眯着眼睛,捋了捋胡须,嘴角拂过疑似笑意,突然步下生风,向少年袭去,只见少年一个撤不,身形变换,竟凭借惯性转身绕到了老者背后,一拳震出。
老者此时依旧不慌不忙,一个扫腿,速度之快少年脚还没收回,便被扫了个360度大回旋,好在腰功了得,不几下便摆正了姿势,趁此说道:“师傅你搞偷袭,玩不起。下面我要认真了,得罪了。”
几招过后。老者看着身前气喘吁吁地少年,微笑着点了点头,说道:“自身基础是够了,只是这一招是一招,还没有融会贯通啊。”
少年听闻,赶忙正身作揖:“还请师傅赐教!”
“这一招一式,固然重要,却也不重要,招中有招,招中生招,这才是融会贯通。你看好了,为师只做一遍!”,只见老者起手一个标准招式,却在后续用到了不同学派招式,好一个融会贯通!原来不止是固定一套动作,原来还可以中间穿插不同的动作,武学果然学无止境啊,少年感概到。
“功法万家,各不相同,但不离根本,见你已有所成,为师今日便教你心法——建造经。”一套动作下来,老者说道:“所谓建造,根基尤其重要,首先你要认识到你的目的是什么,所谓万变不离其宗。如果你要使用一套招式,你需要手脚头同时运作,但姿势各不相同。”
这里我们先理一下需要运动的地方:
/// <summary>
/// 定义一个功夫类
/// </summary>
abstract class KongFu
{
public abstract void BuildBody();
public abstract void BuildHead();
public abstract void BuildHand();
public abstract void BuildLeg();
}
然后生成两个不一样的招式:
class KongFuA : KongFu
{
public override void BuildBody()
{
Debug.Log("身体不动");
}
public override void BuildHand()
{
Debug.Log("手向前伸");
}
public override void BuildHead()
{
Debug.Log("头也不动");
}
public override void BuildLeg()
{
Debug.Log("双腿马步");
}
}
class KongFuB : KongFu
{
public override void BuildBody()
{
Debug.Log("身体倾斜");
}
public override void BuildHand()
{
Debug.Log("头目视前方");
}
public override void BuildHead()
{
Debug.Log("双手展开");
}
public override void BuildLeg()
{
Debug.Log("双腿侧弓步");
}
}
弟子若有所思的看着,不经意的说了句“那这不还是一套一套的嘛?用的时候依然没什么变化啊”。
老者笑了笑说道:“这就需要一个统一管理的地方了啊,招式记于心,想到招式名一整套动作也就该出来了。”
/// <summary>
/// 指挥者
/// </summary>
class PeopleDirector
{
private KongFu kf;
public PeopleDirector(KongFu kf)
{
this.kf = kf;
}
public void CreatePerson()
{
this.kf.BuildBody();
this.kf.BuildHand();
this.kf.BuildHead();
this.kf.BuildLeg();
}
}
“这样子是不是就方便多了哈哈。”
/// <summary>
/// 建造者模式
/// </summary>
public class BuildPattern : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
KongFuA a = new KongFuA();
PeopleDirector dir = new PeopleDirector(a);
dir.CreatePerson();
}
}
“弟子懂了,这样一来同样路数但不同规则的招式,我也不用再去想每一步要怎么做了,已经熟练于心,在知道该用什么的时候就已经可以全施展出来了,弟子受教了!!”
“孺子可教哈哈,这图谱就授予你了,定要好生保管!”
用处:主要用于创建一些复杂的对象,这些对象内部构建的建造顺序通常是稳定或者无序的,但对象内部的构建通常面临着复杂的变化。
所以说,建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
--《大话设计模式》