C# 设计模式———建造者模式

建造者模式简介

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在这里插入图片描述
在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

何时使用:

  1. 需要生成的对象具有复杂的内部结构。
  2. 需要生成的对象内部属性本身相互依赖。
  3. 一些基本部件不会变,而其组合经常变化的时候。

Hints: 与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

C# 建筑者模式Demo

在这里插入图片描述
AbstractPerson.cs

namespace ConstructionPattern
{
    public abstract class AbstractPerson
    {
        public abstract void CreateBody();
        public abstract void CreateHand();
        public abstract void CreateHead();
        public abstract void CreateLeg();
    }
}

FatPerson.cs

using System;

namespace ConstructionPattern
{
    public class FatPerson : AbstractPerson
    {
        public override void CreateBody()
        {
            Console.WriteLine("生成胖人的身体");
        }

        public override void CreateHand()
        {
            Console.WriteLine("生成胖人的手");
        }

        public override void CreateHead()
        {
            Console.WriteLine("生成胖人的头部");
        }

        public override void CreateLeg()
        {
            Console.WriteLine("生成胖人的腿");
        }
    }
}

ThinPerson.cs

using System;

namespace ConstructionPattern
{
    public class ThinPerson : AbstractPerson
    {
        public override void CreateBody()
        {
            Console.WriteLine("生成瘦人的身体");
        }

        public override void CreateHand()
        {
            Console.WriteLine("生成瘦人的手");
        }

        public override void CreateHead()
        {
            Console.WriteLine("生成瘦人的头部");
        }

        public override void CreateLeg()
        {
            Console.WriteLine("生成瘦人的腿");
        }
    }
}

BuilderDirector.cs

namespace ConstructionPattern
{
    public class BuilderDirector
    {
        AbstractPerson person = null;

        public BuilderDirector(AbstractPerson person)
        {
            this.person = person;
        }
        public void CreatePerson()
        {
            this.person.CreateBody();
            this.person.CreateHand();
            this.person.CreateHead();
            this.person.CreateLeg();
        }
    }
}

Program.cs

namespace ConstructionPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            BuilderDirector builderDirector = new BuilderDirector( new FatPerson() );
            builderDirector.CreatePerson();

            builderDirector = new BuilderDirector(new ThinPerson());
            builderDirector.CreatePerson();
        }
    }
}

测试结果:
在这里插入图片描述

建造者独立,易扩展。便于控制细节风险。
发布了18 篇原创文章 · 获赞 17 · 访问量 2695

猜你喜欢

转载自blog.csdn.net/chasinghope/article/details/104209001
今日推荐