乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計(jì)模式系列 - 建造者模式

       新進(jìn)小設(shè)計(jì) 2020-07-18

      建造者模式通過將復(fù)雜對(duì)象逐一拆解成單一的簡(jiǎn)單對(duì)象,然后通過對(duì)簡(jiǎn)單對(duì)象的創(chuàng)建,最終構(gòu)建出一個(gè)復(fù)雜對(duì)象。

      介紹

      在現(xiàn)實(shí)世界中,和建造者模式最為相似的是我們到餐廳點(diǎn)餐的流程。在點(diǎn)餐的過程中,我們是不用關(guān)系點(diǎn)餐的先后順序,等我們點(diǎn)完后,點(diǎn)餐系統(tǒng)會(huì)自動(dòng)將我們的所有餐品列表和消費(fèi)情況全部一次性羅列出來,并且最后都會(huì)統(tǒng)一結(jié)算。這個(gè)過程其實(shí)就是建造者模式的應(yīng)用。

      類圖描述

      通過上述類圖,我們可以發(fā)現(xiàn)一個(gè)復(fù)雜對(duì)象通過 MealBuilder 來進(jìn)行創(chuàng)建,然后 MealBuilder 在進(jìn)行細(xì)化,通過實(shí)例化不同的 IItem 類型,來達(dá)到創(chuàng)建不同的實(shí)例對(duì)象并對(duì)其進(jìn)行最終的拼裝組合。

      代碼實(shí)現(xiàn)

      1、定義食物制作和信息接口

      public interface IPacking
      {
          string Pack();
      }
      
      public interface IItem
      {
          string Name();
          IPacking Packing();
          float Price();
      }
      

      2、定義抽象食物

      public abstract class ColdDrink:IItem
      {
          public abstract string Name();
      
          public IPacking Packing()
          {
              return  new Bottle();
          }
      
          public abstract float Price();
      }
      
      public abstract class Burger:IItem
      {
          public abstract string Name();
      
          public IPacking Packing()
          {
              return  new Wrapper();
          }
      
          public abstract float Price();
      }
      
      

      3、定義具體制作類

      class Bottle:IPacking
      {
          public string Pack() => "Bottle";
      }
      
      public class Wrapper : IPacking
      {
          public string Pack() => "Wrapper";
      }
      

      4、定義具體食物類

      public class Pepsi : ColdDrink
      {
          public override string Name() => "Pepsi";
      
          public override float Price() => 35.0f;
      }
      
      public class Coke : ColdDrink
      {
          public override string Name() => "Coke";
      
          public override float Price() => 30.0f;
      }
      
      public class VegBurger:Burger
      {
          public override string Name() => "Veg Burger";
      
          public override float Price() => 25.0f;
      }
      

      5、定義模擬用戶點(diǎn)餐類

      public class MealBuilder
      {
          public Meal PrepareVegMeal()
          {
              Meal meal = new Meal();
              meal.AddItem(new VegBurger());
              meal.AddItem(new Coke());
              return meal;
          }
      
          public Meal PrepareNonMeal()
          {
              Meal meal = new Meal();
              meal.AddItem(new ChickenBurger());
              meal.AddItem(new Pepsi());
              return meal;
          }
      }
      

      6、上層調(diào)用

      class Program
      {
          static void Main(string[] args)
          {
              MealBuilder builder = new MealBuilder();
      
              Meal vegMeal = builder.PrepareVegMeal();
              Console.WriteLine("Veg Meal");
              vegMeal.ShowItems();
              Console.WriteLine($"Total Cost:{vegMeal.GetCost()}");
      
              Console.WriteLine("-----------------");
      
              Meal nonVegMeal = builder.PrepareNonMeal();
              Console.WriteLine("Non-Veg Meal");
              nonVegMeal.ShowItems();
              Console.WriteLine($"Total Cost:{nonVegMeal.GetCost()}");
      
              Console.ReadKey();
          }
      }
      

      總結(jié)

      建造者模式使用多個(gè)簡(jiǎn)單的對(duì)象進(jìn)行拼裝組合,并最終構(gòu)建出一個(gè)復(fù)雜對(duì)象,它提供了一種創(chuàng)建對(duì)象的最佳方式。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多