建造者模式:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。(轉至《大話設計模式》)。 學習這個模式後,不知覺得和之前的簡單工廠模式做了對比,發現二者都是創建對象。但二者還是有所區別的,簡單工廠模式是更具不同的情況創建不同的對象, 而建造者模式則主要是用於創建一些複雜的對象 ...
建造者模式:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。(轉至《大話設計模式》)。
學習這個模式後,不知覺得和之前的簡單工廠模式做了對比,發現二者都是創建對象。但二者還是有所區別的,簡單工廠模式是更具不同的情況創建不同的對象,
而建造者模式則主要是用於創建一些複雜的對象,這些對象內部構建間的建造順序通常是穩定的,但對象內部
的構建通常面臨複雜的變化。
建造者模式的好處就是使得建造代碼與表示代碼分離,由於建造模式印廠了該產品是如何組裝的,所以需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。
下麵的代碼:是利用Graphics來畫圖。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 建造者模式 { public class Man { private Pen p; private Graphics g; public Pen P { get { return p; } set { p = value; } } public Graphics G { get { return g; } set { g = value; } } public Man(Pen myP, Graphics myG) { this.p = myP; this.g = myG; } public virtual void buildHead() { } public virtual void buildBody() { } public virtual void buildLeftArm() { } public virtual void buildRightArm() { } public virtual void buildLeftLeg() { } public virtual void buildRightLeg() { } } public class thinMan : Man { public thinMan(Pen p, Graphics g) : base(p, g) { } public override void buildHead() { G.DrawEllipse(P, 50, 20, 30, 30); } public override void buildBody() { G.DrawRectangle(P, 60, 50, 10, 50); } public override void buildLeftArm() { G.DrawLine(P, 60, 50, 40, 100); } public override void buildRightArm() { G.DrawLine(P, 70, 50, 90, 100); } public override void buildLeftLeg() { G.DrawLine(P, 60, 100, 45, 150); } public override void buildRightLeg() { G.DrawLine(P, 70, 100, 85, 150); } } public class fatMan:Man { public fatMan(Pen p, Graphics g) : base(p, g) { } public override void buildHead() { G.DrawEllipse(P, 50, 20, 30, 30); } public override void buildBody() { G.DrawEllipse(P, 45, 50, 40, 50); } public override void buildLeftArm() { G.DrawLine(P, 50, 50, 30, 100); } public override void buildRightArm() { G.DrawLine(P, 80, 50, 100, 100); } public override void buildLeftLeg() { G.DrawLine(P, 60, 100, 45, 150); } public override void buildRightLeg() { G.DrawLine(P, 70, 100, 85, 150); } } public class manBuilder { Man m; public manBuilder(Man mM) { this.m = mM; } public void Show() { m.buildHead(); m.buildBody(); m.buildLeftArm(); m.buildRightArm(); m.buildLeftLeg(); m.buildRightLeg(); } } public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Pen p = new Pen(Color.Blue); Graphics gThin = pictureBox1.CreateGraphics(); thinMan tMan = new thinMan(p, gThin); manBuilder m = new manBuilder(tMan); m.Show(); Graphics gFat = pictureBox2.CreateGraphics(); fatMan fMan = new fatMan(p, gFat); manBuilder m1 = new manBuilder(fMan); m1.Show(); } } }
運行結果: