zoukankan      html  css  js  c++  java
  • 大话设计-建造者模式

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

    #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();
            }
        }
    }
  • 相关阅读:
    蒜厂年会|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    抠图|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    轻重搭配|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    后缀字符串|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    LIS|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    倍数|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    找质数|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
    2018年第九届蓝桥杯B组题C++汇总解析-fishers
    RepPoints v2: Verification Meets Regression for Object Detection
    i 的二次幂求和
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/builderPattern.html
Copyright © 2011-2022 走看看