zoukankan      html  css  js  c++  java
  • C# 建造者模式

    C# 设计模式之---建造者模式

    一、定义:

    建造者模式(Builder)是将复杂的构建与其表示相分离,使得同样的构建可以产生不同的表示。

    二、原型模式应用:

    在软件系统中,有时候面临一个复杂对象的创建工作,该对象通常由各个部分对象用一定算法构成,

    或者按一定的步骤组合而成,这些算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求的变化而不断变化。

    举个例子,比如一个工厂要生产奔驰和宝马两种车子,它们组装的过程基本都是不变的,都可以由

    logo,车身,轮子,椅子等构成,但是这些零件在奔驰和宝马这两种车子之间又是多变的,那么将一些易变的两件与其他部件分离出来,实现解耦合,则可以轻松实现车子的升级。

    三、建造者欧式参与者

    ①Builder:为创建一个 product对象的各个部件指定抽象接口;

    ②ConcreateBuilder 

      1>实现Builder的接口以构造和装配该产品的各个部件

      2>定义并明确它所创建的表示

    ③Director:构造一个使用Builder接口的对象;

    ④Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。

    在建造者模式中,Director规定了创建一个对象所需要的步骤和次序,builder则提供了一些完成这些步骤的方法,ConcreateBuilder给出了这些方法的具有实现,是对象的直接创建者。

    四、构建者模式实现

    Director.cs

    namespace BuilderExample
    {
        public class Director
        {
            public void Constructor(IBuilder builder)
            {
                builder.CreateLogo();
                builder.CreateBody();
                builder.CreateWheel();
                builder.CreateChair();
            }
        }
    }

    IBuilder.cs

    namespace BuilderExample
    {
        public interface IBuilder
        {
            void CreateLogo();
            void CreateBody();
            void CreateWheel();
            void CreateChair();
        }
    }

    Benz.cs

    using System;
    
    namespace BuilderExample
    {
        public class Benz : IBuilder
        {
            public void CreateLogo()
            {
                Console.WriteLine("创建奔驰的logo");
            }
    
            public void CreateBody()
            {
                Console.WriteLine("创建奔驰的身体");
            }
    
            public void CreateWheel()
            {
                Console.WriteLine("创建奔驰的轮子");
            }
    
            public void CreateChair()
            {
                Console.WriteLine("创建奔驰的椅子");
            }
        }
    }

    BMW.cs

    using System;
    
    namespace BuilderExample
    {
        public class BMW : IBuilder
        {
            public void CreateLogo()
            {
                Console.WriteLine("创建宝马的logo");
            }
    
            public void CreateBody()
            {
                Console.WriteLine("创建宝马的身体");
            }
    
            public void CreateWheel()
            {
                Console.WriteLine("创建宝马的轮子");
            }
    
            public void CreateChair()
            {
                Console.WriteLine("创建宝马的椅子");
            }
        }
    }

    Program.cs

    using System;
    
    namespace BuilderExample
    {
        class Program
        {
            static void Main(string[] args)
            {
                Director director = new Director();
    
                director.Constructor(new Benz());
    
                director.Constructor(new BMW());
    
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    如何改变拖动时鼠标悬浮样式
    Nginx的server为0.0.0.0/0.0.0.1的作用?
    redis的lua脚本拓展,返回nil及其判断
    lua异常捕获
    nginx配置及常见问题
    centos安装postgresql-10及操作
    23种设计模式
    php的function() use($args)用法
    lua中self.__index = self是什么意思?
    lor实践
  • 原文地址:https://www.cnblogs.com/vpersie2008/p/4641583.html
Copyright © 2011-2022 走看看