zoukankan      html  css  js  c++  java
  • 建造者模式实例

    用户需求:

    设计思路:

           1.UML图

           

            2.采用建造者模式讲一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。

            3.建造者模式是一步一步创建一个复杂的对象,它允许用户只通过制定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

    具体代码实现:

         1.抽象部件

            Part类       

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public abstract class Part
        {
            public abstract void Show();
        }
    }

         2.具体部件

            MCBurger 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MCBurger:Part
        {
            public override void Show()
            {
                Console.WriteLine("麦当劳:双层吉士汉堡");
            }
    
        }
    }

            MCChips 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MCChips:Part
        {
            public override void Show()
            {
                Console.WriteLine("麦当劳:薯条");
            }
        }
    }

            MCDrink 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MCDrink:Part
        {
            public override void Show()
            {
                Console.WriteLine("麦当劳:可口可乐");
            }
        }
    }

            KFCBurger 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class KFCBurger:Part
        {
            public override void Show()
            {
                Console.WriteLine("肯德基:香辣鸡腿堡");
            }
        }
    }

            KFCChips 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class KFCChips:Part
        {
            public override void Show()
            {
                Console.WriteLine("肯德基:薯条");
            }
        }
    }

            KFCDrink 类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class KFCDrink:Part
        {
            public override void Show()
            {
                Console.WriteLine("肯德基:百事可乐");
            }
        }
    }

         3.产品

           Meal类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class Meal
        {
            protected List<Part> _parts = new List<Part>();
            public void AddPart(Part part)
            {
                _parts.Add(part);
            }
            public void Show()
            {
                foreach (Part part in _parts)
                {
                    part.Show();
                }
            }
        }
    }

         4.抽象建造者

            MealBuilder类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public abstract class MealBuilder
        {
            protected Meal _meal = new Meal();
    
            public abstract void BuildBurger();
    
            public abstract void BuildChips();
    
            public abstract void BuildDrink();
    
            public Meal GetMeal()
            {
                return _meal;
            }
        }
    }

         5.具体建造者

           MealKFCBuilder类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MealKFCBuilder:MealBuilder
        {
            public override void BuildBurger()
            {
                _meal.AddPart(new KFCBurger());
            }
            public override void BuildChips()
            {
                _meal.AddPart(new KFCChips());
            }
            public override void BuildDrink()
            {
                _meal.AddPart(new KFCDrink());
            }
            
        }
    }

           MealMCBuilder类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
       public class MealMCBuilder:MealBuilder
        {
           public override void BuildBurger()
           {
               _meal.AddPart(new MCBurger());
           }
           public override void BuildChips()
           {
               _meal.AddPart(new MCChips());
           }
           public override void BuildDrink()
           {
               _meal.AddPart(new MCDrink());
           }
        }
    }

           MealMixBuilder类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MealMixBuilder:MealBuilder
        {
            public override void BuildBurger()
            {
                _meal.AddPart(new KFCBurger());
            }
            public override void BuildChips()
            {
                _meal.AddPart(new MCChips());
            }
            public override void BuildDrink()
            {
                _meal.AddPart(new KFCDrink());
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MealMixBuilder:MealBuilder
        {
            public override void BuildBurger()
            {
                _meal.AddPart(new KFCBurger());
            }
            public override void BuildChips()
            {
                _meal.AddPart(new MCChips());
            }
            public override void BuildDrink()
            {
                _meal.AddPart(new KFCDrink());
            }
        }
    }

         6.指挥者

            Mealdirector类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        public class MealDirector
        {
            private MealBuilder _builder;
    
            public MealDirector(MealBuilder builder)
            {
                _builder = builder;
     
            }
            public Meal CreateMeal()
            {
                _builder.BuildBurger();
                _builder.BuildChips();
                _builder.BuildDrink();
                return _builder.GetMeal();
            }
        }
    }

            7.客户端

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                MealKFCBuilder kfcbuilder = new MealKFCBuilder();
                MealDirector kfcdirector = new MealDirector(kfcbuilder);
                Console.WriteLine("        菜单        ");
                Console.WriteLine("--------------------");
                kfcdirector.CreateMeal().Show();
                Console.WriteLine("--------------------");
                Console.WriteLine("");
    
                MealMCBuilder mcbuilder = new MealMCBuilder();
                MealDirector mcdirector = new MealDirector(mcbuilder);
                Console.WriteLine("        菜单        ");
                Console.WriteLine("--------------------");
                mcdirector.CreateMeal().Show();
                Console.WriteLine("--------------------");
                Console.WriteLine("");
    
                MealMixBuilder mixbuilder = new MealMixBuilder();
                MealDirector mixdirector = new MealDirector(mixbuilder);
                Console.WriteLine("        菜单        ");
                Console.WriteLine("--------------------");
                mixdirector.CreateMeal().Show();
                Console.WriteLine("--------------------");
                Console.WriteLine("");
                Console.Read();
                
            }
        }
    }

    运行结果:

    体会与感悟:

           建造者模式:

           优点:将产品本身与产品的创建过程解耦。

                    使用不同的建造者即可得到不同类型的产品。

                     增加新的产品类型只需要增加新的建造者,符合“开放--封闭原则”。

           缺点:如果产品之间的差异性很大,则不适合建造者模式。

                    如果产品的内部变化复杂,可能会需要定义很多具体建造者类来适应这种变化,导致系统变得很庞大。

              

  • 相关阅读:
    socket的几大异常以及其出现的原因
    将文件打包成apk
    putty失活不挂起运行
    天气免费接口
    内存泄漏
    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build
    009 预处理 #pragma once; typedef; #ifdef
    008 区别 : NULL nullptr
    007 头文件 : 作用/组织/包含
    006 整数/浮点数/cpu频率
  • 原文地址:https://www.cnblogs.com/134ylx/p/4995956.html
Copyright © 2011-2022 走看看