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();
            }
        }
    }
  • 相关阅读:
    Java类变量和成员变量初始化过程
    Linux命令学习笔记
    gitlab本地部署方法(ubuntu16.04+gitlab9.5.5)
    Hanoi塔
    求递归算法时间复杂度:递归树
    最大堆/最小堆
    Matlab中plot基本用法
    这是一篇叼炸天的博客
    c++ static理解
    经典排序算法+文件操作~c语言实现
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/builderPattern.html
Copyright © 2011-2022 走看看