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();
            }
        }
    }
  • 相关阅读:
    Hystrix解析(三)
    Hystrix解析(二)
    在阿里云开发平台编写第一个 HelloWorld 程序
    Jenkins与Docker的自动化CI/CD实战
    网页计数器例子
    ServletContext 对象
    Session
    Cookie
    Request 对象作用域
    转发,重定向(包括请求中文乱码解决)
  • 原文地址:https://www.cnblogs.com/vpersie2008/p/4641583.html
Copyright © 2011-2022 走看看