建造者模式

Posted 让学习如呼吸般自然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者模式相关的知识,希望对你有一定的参考价值。

设计模式之建造者设计模式(也叫生成器模式)

建造者模式就是将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示

1:使用建造者模式的话,它封装了一个产品的构造过程,并且允许按照预定的步骤构造产品。同时,向客户端隐藏了产品的内部表现

 

2:一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。 其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险

建造者模式与工厂模式的区别

1:工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端

总结

       建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式

 

 

    建造者模式:

                    1:Buider是一个抽象接口,是各个零件制定的抽象接口

                    2: ConcreteBuilder:是实现Buider接口的具体的类,构建和装配各个零件,达到我们想要的组件

                    3:Director:构建一个使用Builder接口的对象,明确产品的执行步骤,按照自己的顺序执行,不和Product直接接触,

                    4:Product:具体的产品

  代码实例:

                1:定义一个Builder接口

             public abstract class AbstractBuilder 
     { 
        //构建产品的 A 部件 
        public abstract void BuilderPartA(); 
        //构建产品的 B 部件 
        public abstract void BuilderPartB(); 
        //返回构建好的产品 
        public abstract Product GetResult(); 
    } 

                  2:定义一个产品(product

    private IList<string> parts = new List<string>();

        public void AddPart(string part) 
        { 
            parts.Add(part); 
        }

        public void ShowProduct() 
        { 
            foreach (string str in parts) 
            { 
                Console.WriteLine(str); 
            } 
        } 
    } 

      3:具体的建造者类  ConcreteBuilderA  和ConcreteBuilderB

     

 public class ConcreteBuilderA  implements  AbstractBuilder 

   private Product product = new Product();

 

        public override void BuilderPartA() 
        { 
            product.AddPart("具体类 A 的组件 A"); 
        }

 

        public override void BuilderPartB() 
        { 
            product.AddPart("具体类 A 的组件 B"); 
        }

 

        public override Product GetResult() 
        { 
            return product; 
        } 

 

}

   public class ConcreteBuilderB  implements  AbstractBuilder 

   private Product product = new Product();

 

        public override void BuilderPartA() 
        { 
            product.AddPart("具体类 A 的组件 A"); 
        }

 

        public override void BuilderPartB() 
        { 
            product.AddPart("具体类 A 的组件 B"); 
        }

 

        public override Product GetResult() 
        { 
            return product; 
        } 

 

}

4:创建一个指挥者Director

 

namespace Builder 

    public class 
Director 
    { 
        //通过指挥者的 Construct 来按照规定的顺序组装产品 
        public void Construct(AbstractBuilder builder) 
        { 
           //先组装 A 部件 
           
builder.BuilderPartA(); 
            //在组装 B 部件 
           
builder.BuilderPartB(); 
        } 
    } 
}

5:客户端代码

 

客户端代码:

 

public  class  BuilderTest 

        static void Main(string[] args) 
        { 
            //定义一个组装产品的指挥者 
            Director director = new Director();

 

            Console.WriteLine("产品 A:"); 
            //指挥组装产品 A 
            AbstractBuilder builderA = new ConcreteBuilderA
(); 
           
director.Construct(builderA); 
           builderA.GetResult().ShowProduct();

 

            //指挥组装产品 B 
            Console.WriteLine("\\n产品 B:"); 
            AbstractBuilder builderB = new ConcreteBuilderB(); 
            director.Construct(builderB);            
            builderB.GetResult().ShowProduct();

            Console.Read(); 

        } 
    } 

 

 

 

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

以上是关于建造者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式·建造者模式

设计模式之建造者模式(创建型)

《大话设计模式》——建造者模式

建造者模式(Builder Pattern)

设计模式—建造者模式(Builder)

什么是建造者模式