• 大话设计-建造者模式


    建造代码和表示代码分离,建造顺序通常是稳定的,建造者隐藏了产品的组装过程,如果要增加产品的组装,可以新增具体的建造者。

    #define PPP
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                Pen p = new Pen(Color.Yellow);
                Graphics g=this.CreateGraphics();
                PersonThinBuilder personThinBuilder = new PersonThinBuilder(g, p);
                PersonFatBuilder personFatBuilder = new PersonFatBuilder(g, p);
    
                PersonDirector personDirector = new PersonDirector(personThinBuilder);
                personDirector.CreatePerson();
                personDirector = new PersonDirector(personFatBuilder);
                personDirector.CreatePerson();
            }        
        }
    
    
        abstract class PersonBuilder
        {
            protected Graphics g;
            protected Pen p;
            public PersonBuilder(Graphics g, Pen p)
            {
                this.g = g;
                this.p = p;
            }
    
            public abstract void BuildHead();
            public abstract void BuildBody();
            public abstract void BuildArmLeft();
            public abstract void BuildArmRight();
            public abstract void BuildLegLeft();
            public abstract void BuildLegRight();
        }
    
        class PersonThinBuilder : PersonBuilder
        {
            public PersonThinBuilder(Graphics g, Pen p) : base(g, p)
            {
            }
    
            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 BuildArmLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildArmRight()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegRight()
            {
                throw new NotImplementedException();
            }
        }
    
        class PersonFatBuilder : PersonBuilder
        {
            public PersonFatBuilder(Graphics g, Pen p) : base(g, p)
            {
            }
    
            public override void BuildArmLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildArmRight()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildBody()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildHead()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegRight()
            {
                throw new NotImplementedException();
            }
        }
    
        class PersonDirector
        {
            private PersonBuilder pb;
            public PersonDirector(PersonBuilder person)
            {
                this.pb = person;
            }
    
            public void CreatePerson()
            {
                pb.BuildHead();
                pb.BuildBody();
                pb.BuildArmLeft();
                pb.BuildArmRight();
                pb.BuildLegLeft();
                pb.BuildLegRight();
            }
        }
    }
    #define PPP
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                Pen p = new Pen(Color.Yellow);
                Graphics g=this.CreateGraphics();
                PersonThinBuilder personThinBuilder = new PersonThinBuilder(g, p);
                PersonFatBuilder personFatBuilder = new PersonFatBuilder(g, p);
    
                PersonDirector personDirector = new PersonDirector(personThinBuilder);
                personDirector.CreatePerson();
                personDirector = new PersonDirector(personFatBuilder);
                personDirector.CreatePerson();
            }        
        }
    
    
        abstract class PersonBuilder
        {
            protected Graphics g;
            protected Pen p;
            public PersonBuilder(Graphics g, Pen p)
            {
                this.g = g;
                this.p = p;
            }
    
            public abstract void BuildHead();
            public abstract void BuildBody();
            public abstract void BuildArmLeft();
            public abstract void BuildArmRight();
            public abstract void BuildLegLeft();
            public abstract void BuildLegRight();
        }
    
        class PersonThinBuilder : PersonBuilder
        {
            public PersonThinBuilder(Graphics g, Pen p) : base(g, p)
            {
            }
    
            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 BuildArmLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildArmRight()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegRight()
            {
                throw new NotImplementedException();
            }
        }
    
        class PersonFatBuilder : PersonBuilder
        {
            public PersonFatBuilder(Graphics g, Pen p) : base(g, p)
            {
            }
    
            public override void BuildArmLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildArmRight()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildBody()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildHead()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegLeft()
            {
                throw new NotImplementedException();
            }
    
            public override void BuildLegRight()
            {
                throw new NotImplementedException();
            }
        }
    
        class PersonDirector
        {
            private PersonBuilder pb;
            public PersonDirector(PersonBuilder person)
            {
                this.pb = person;
            }
    
            public void CreatePerson()
            {
                pb.BuildHead();
                pb.BuildBody();
                pb.BuildArmLeft();
                pb.BuildArmRight();
                pb.BuildLegLeft();
                pb.BuildLegRight();
            }
        }
    }
  • 相关阅读:
    浅谈iOS7 AVFoundation 二维码扫描
    使用ZBarSDK生成和读取二维码
    NSURLConnection与NSURLSession大比拼
    iOS开发------之runtime的运用-类与对象&&&获取当前网络状态
    XML之解析------使用NSXMLPaser(SAX)和GDataXML(DOM)
    Beta阶段项目总结
    星光小组第二阶段团队绩效
    第二阶段冲刺第十天
    第二阶段冲刺第九天
    第二阶段冲刺第八天
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/builderPattern.html
Copyright © 2020-2023  润新知