• C#设计模式:建造者模式(Builder Pattern)


    一,建造者模式(Builder Pattern)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _4.建造者模式
    {
        //建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。
        //与抽象工厂的区别是:抽象工厂是针对系列对象(如会出现各种车对象),然而创建者模式是针对一个对象的局部变化(如单个对象有不同武器等)
        class Program
        {
            static void Main(string[] args)
            {
                Builder builder = new USA("黑皮肤", "美国人", "英语");
                Director director = new Director(builder);
                People product = director.Construct();
                Console.Write("
    ");
    
                Builder builder1 = new USA("白皮肤", "英国人", "日语");
                Director director1 = new Director(builder1);
                People product1 = director1.Construct();
                Console.ReadKey();
            }
        }
        /// <summary>
        /// 创建抽象类
        /// </summary>
        public abstract class Builder
        {
            protected People people = new People();
            public abstract void SetCountry();
            public abstract void SetSpeak();
            public abstract void SetSkinColor();
    
            public People getResult()
            {
                return people;
            }
        }
        /// <summary>
        /// 被创建的对象,对象会出现局部的不同,
        /// </summary>
        public class People
        {
            public People()
            {
                Console.Write("我们都是人,但是");
            }
        }
        public class USA : Builder
        {
            private string _country;
            private string _speak;
            private string _skincolor;
            public USA(string skincolor, string country, string speak)
            {
                this._country = country;
                this._skincolor = skincolor;
                this._speak = speak;
            }
            public override void SetSkinColor()
            {
                Console.Write(_skincolor + "");
            }
            public override void SetCountry()
            {
                Console.Write(_country);
            }
    
            public override void SetSpeak()
            {
                Console.Write("" + _speak);
            }
        }
        public class UK : Builder
        {
            private string _country;
            private string _speak;
            private string _skincolor;
            public UK(string skincolor, string country, string speak)
            {
                this._country = country;
                this._skincolor = skincolor;
                this._speak = speak;
            }
            public override void SetSkinColor()
            {
                Console.Write(_skincolor + "");
            }
            public override void SetCountry()
            {
                Console.Write(_country);
            }
    
            public override void SetSpeak()
            {
                Console.Write("" + _speak);
            }
        }
        /// <summary>
        /// 执行者,创建对象
        /// </summary>
        public class Director
        {
            private Builder builder;
            public Director(Builder bu)
            {
                this.builder = bu;
            }
            public People Construct()
            {
                builder.SetSkinColor();
                builder.SetCountry();
                builder.SetSpeak();
                return builder.getResult();
            }
        }
    }

    二,根据上面代码,我们会感觉和抽象工厂很像,他们两个是什么呢?

    1》建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种复杂对象创建型模式。

    2》抽象工厂则是针对系列对象,建造者模式是一种复杂对象

    三,相对抽象工厂和建造者的一种复杂对象怎么理解呢?

    我们就以People为对象来理解:

    1》在建造者模式中,我们可以通过抽象的类创建出美国人和英国人对象,而这对象则是有自己独立的东西等,如黑皮肤的美国人讲英语和白皮肤的英国人讲日语,这里的人理解成为同一种复杂的对象

    2》而在重抽象工厂中,在英国人工厂中,只能实现白皮肤的英国人讲日语。而不会出现实现了黑皮肤的美国人讲英语(这个属于美国人的工厂实现的),所以对于抽象工厂,在此时我们将英国人和美国人理解为两个不同的对象,所以抽象工厂是针对系列对象

  • 相关阅读:
    Ecommerce 3.0雏形出现
    网上购物折扣如此红火
    [ZZ]将测试人员整合到敏捷团队中
    晒工资网——Glassdoor
    [ZZ].NET自动探索式测试工具——Pex
    [ZZ]好的测试应该具备哪些特质?
    我用到的Firefox插件
    [ZZ]WatiN & Selenium RC-自动化测试工具比较
    [ZZ]高盛:Amazon预计10年营收涨10倍达台币3兆元
    从优惠券到维络卡
  • 原文地址:https://www.cnblogs.com/May-day/p/8422749.html
Copyright © 2020-2023  润新知