建造者模式

让学习如呼吸般自然 让学习如呼吸般自然     2022-09-06     163

关键词:

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

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

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)

建造者模式(Builder)C#设计模式系列:建造者模式(Builder)建造者模式(BuilderPattern) 状态模式C#设计模式——状态模式(StatePattern) 查看详情

设计模式建造者模式(简介|适用场景|优缺点|代码示例)(代码片段)

文章目录一、建造者模式简介二、建造者模式适用场景三、建造者模式优缺点四、建造者模式与工厂模式五、建造者模式代码示例1、学生类2、建造者抽象类3、建造者实现类4、教师类(非必须)5、测试类六、实例类和建造者类定... 查看详情

设计模式——建造者模式

设计模式(五)——建造者模式一、建造者模式简介1、建造者模式简介    建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。    建造者模式和抽象工厂模式... 查看详情

设计模式之————建造者模式

建造者模式1.什么是建造者模式?建造者模式属于创造型模式,它是将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。举例:普通房子和高楼,两者都很难建造,但也有相似点:打地... 查看详情

设计模式之建造者模式(创建型)(代码片段)

模式定义建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法。所谓建造者模式就是将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象。所以建造者模式又叫生成器模式。建造者... 查看详情

设计模式—建造者模式(builder)(代码片段)

title:设计模式—建造者模式建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。我们获得一... 查看详情

java设计模式-建造者模式

建造者模式概述建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如... 查看详情

设计模式之建造者模式

1定义建造者模式(BuilderPatten):将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式用于一步一步创建一个复杂的对象,他允许用户只通过指定复杂对象的类型和内容进行构建,用户... 查看详情

大话设计模式-建造者模式(代码片段)

建造者模式建造者模式又称生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构构建间的构造顺序通常是稳定的,但对象内... 查看详情

设计模式建造者模式

建造者模式建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在建造事物时,如果发现事物的内部建造的顺序是保持不变的,并且多个事物之间的建造过程也是一致的那么就可以使... 查看详情

设计模式:学习笔记——建造者模式

设计模式:学习笔记(4)——建造者模式概述建造者模式  建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只... 查看详情

建造者模式

建造者模式的定义建造者模式(BuilderPattern)也叫做生成器模式,其定义如下:Separatetheconstructionofacomplexobjectfromitsrepresentationsothatthesameconstructionprocesscancreatedifferentrepresentations.(将一个复杂对象的构建与它的表示分离,使得同样... 查看详情

建造者模式

设计模式之建造者设计模式(也叫生成器模式)建造者模式就是将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示1:使用建造者模式的话,它封装了一个产品的构造过程,并且允许按照预定的步骤构... 查看详情

建造者模式

...的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。二、角色抽象... 查看详情

建造者模式

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知... 查看详情

建造者模式

建造者模式将一个复杂对象的构建与其表示分离。将复杂对象进行框架化,将同类的对象编造进同一个制造流程。同类·对象会有一样的框架。而由于各部分的实现细节有所不同,所生产出来的产品会有所不同。从而有不同的·... 查看详情

java设计模式3.建造者模式原型模式

建造者模式一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才有... 查看详情

设计模式—建造者模式

1建造者模式  将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者返回给客户一个完整的产品对象,而客户端无须关心该对象所包含的属性和组建方式,这就是建造者模式的设... 查看详情