美文网首页
{C#}设计模式辨析.建造者

{C#}设计模式辨析.建造者

作者: 码农猫爸 | 来源:发表于2021-08-04 09:32 被阅读0次

    背景

    • 已定型步骤中,由director提取部分步骤并预制成多种产品
    • 与模板的异同

    示例

    using static System.Console;
    
    namespace DesignPattern_Builder
    {
        public interface ICakeBuilder
        {
            void SetSize(bool big);
            void AddEggs(int amount);
            void AddVegitable(string name);
            void AddSauce(bool sweet);
        }
    
        // 主厨,相当于Builder
        public class Chef: ICakeBuilder
        {
            public void AddEggs(int amount)
                => WriteLine($"{amount} eggs {(amount > 1 ? "are" : "is")} added.");
    
            public void AddSauce(bool sweet)
                => WriteLine($"{(sweet ? "Sweet" : "Spicy")} sauce is added.");
    
            public void AddVegitable(string name)
                => WriteLine($"{name} is added.");
    
            public void SetSize(bool big)
                => WriteLine($"A {(big ? "big" : "small")} size of cake is set.");
        }
    
        // 服务员,相当于Director
        public class Waitor
        {
            // 允许多名建造者
            private readonly ICakeBuilder chef;
    
            public Director(ICakeBuilder chef)
            {
                this.chef= chef;
            }
    
            // 步骤需求不由建造者决定,在本类中预制产品,下同
            // 全套步骤
            public void CookNormal()
            {
                WriteLine();
                chef.SetSize(false);
                chef.AddEggs(1);
                chef.AddVegitable("Green onion");
                chef.AddSauce(true);
    
                ReadKey();
            }
    
            // 部分步骤
            public void CookSpicical()
            {
                WriteLine();
                chef.SetSize(true);  
                chef.AddEggs(2);  
                chef.AddSauce(false);  
    
                ReadKey();
            }
        }
    
        public class Client
        {
            public void Execute()
            {
                var builder= new Chef();
                var director= new Waitor(builder);
                director.CookNormal();
                director.CookSpicical();
            }
        }
        
        class Demo
        {
            static void Main(string[] args)
            {
                var client = new Client();
                client.Execute();
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:{C#}设计模式辨析.建造者

          本文链接:https://www.haomeiwen.com/subject/uuwuvltx.html