搜索
您的当前位置:首页正文

JavaScript设计模式之建造者模式介绍_javascript技巧

2023-12-05 来源:好心意情感网

建造者模式说明

1. 将一个复杂对象的 构造 与它的表示相分离,使同样的创建过程可有不同的表示,这就叫做建造者模式。2. 面向对象语言中的说明,主要角色:

1>. Builder 这个接口类,定义这个建造者[工人],统一的可操作的行为方式,它表示一个复杂的结构对象;2>. ConcreteBuilder 用于创建[实现] Builder 各种形态的实例对象,来表示 Builder 不同的表示;3>. Director 这个指挥者 用于指导 Builder 实例的执行过程跟形式,用于与 Builder 的实例 表现 相分离,用于指导 这个 Builder 实例 按某规则顺序来创建生成 产品结果;4>. ResultObject 创建的结果都会生成一个结果对象;这是具体创建者根据 Director 指导创建的结果;

3. 建造者模式实际,就是一个指挥者,一个建造者,一个使用指挥者调用具体建造者工作、并得从具体建造者得出结果的客户;

4. 建造者模式,模拟场景:[看到一个说明建造者模式描述的例子很好]

说一户家人要建房子,但房子主人或家里其他人是不懂得如何去建房子的,所以他得去请几个工人,这个建房子的队伍还得有个工头,来按房主人的想法来建一套房子,工头按房主人的要求设计要求工人如何如何做;

工头说,第一步先把房整体骨架搭起来,第二步睡房建造好,第三步把厨房装饰好,第四步把客厅建造装饰完毕,第五步...

工头是不做事的,但具体建造者必须按照工头的要求来做,第一步,第二步的这样步骤来建造,直至整个房子完成;

创建者必须要有创建这个房屋的所有技能,即建骨架,装饰睡房等...,即建造者所做的事,或所具有的能力,必须大于或等于指挥者要求要做的事,或具有的能力;

即指挥者是个组织者,而建造者提供技能;

5. JavaScript 这种弱语言里,没有接口这样的东西,就忽略接口定义这一层,直接创建具体建造者,再建一个 指导类来回调这个建造者;

实例源码

1. 工人建造者X: 代码如下:function workerBuilder() { this.workOne = function() { //建房子骨架 } this.workTwo=function() { //建睡房 } this.workThree=function() { //建厨房 } this.workFour=function() { //建客厅 } //.... this.getResult = function() { //建成房子     var house = new House();     //house.HouseFrame ...     return house;  }}

workBuilder 是具体建造者类,workOne, Two是要做的事情,建骨架等;

当然 workBuilder 可以多建几个,用于表示 工人 对于每个工作执行的方法不一样;但工作内容是一样的;

2. 指挥者类

代码如下:function Director() { this.construct = function(builder) { builder.workOne(); builder.workTwo(); builder.workThree(); builder.workFour(); //... //上面的内容,顺序可设置,并且工作项也可以设定 }}

指挥者类下的 指导 方法,有对 建造者 的回调引用,内容包括建者工作内容几项或全部; 指挥者对建造者工人要做的事情进行组织跟安排;

3. 产品房子

代码如下:function House() { this.HouseFrame = ''; this.Room = ''; this.Kitchen = ''; this.LivingRoom = ''; //...}

4. 使用方法

代码如下:var builder = new workBuilder();var director = new Director();director.construct(builder);

var house = builder.getResult();

第四步,整个使用相当于客户:房主人,房主人请 Director 工头来建房子,但是工头是不做事的,所以他指挥 builder 工个来建子,最后房主人从工人那里取得建好的房子;

其他说明

建造者模式比较适于那种,内容[抽象]复杂,实际场景表现又多个不一样,比如工作内容或顺序不一致的情况;比如每个人每天的生活过程啊,还有像上面的实例类似的场景;通过指导者层,可以减少对很多相似工作场合,但工作规则顺序不一致的环境;可以大减少对实际对象的建造抽象;

小编还为您整理了以下内容,可能对您也有帮助:

23种设计模式知识要点,你都了解了吗?

23种设计模式知识要点分别是工厂方法,抽象工厂,单例,建造者,原型,适配器,桥接,装饰器,组合,外观,享元,代理,模板方法,策略,命令,责任链,中介者,观察者,备忘录,迭代器,访问者,状态,解释器模式。

设计模式是指在软件开发中常用的解决问题的代码结构的总结和抽象。在代码开发中采用设计模式可以提高软件的可维护性。可拓展性和代码复用性。下面简单地回顾下23种设计模式的概念以及其应用场景:

1、工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪个类。应用场景:可以避免与具体对象类型的绑定关系,可以创建多种不同对象,易于扩展。

2、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。应用场景:可以创建多个产品族的对象,在一定程度上提高了系统的灵活性和可扩展性。

3、单例模式:确保类只有一个实例,并提供一个全局访问点。应用场景:在需要实现系统中唯一对象时使用,如线程池。缓存。日志对象等。

4、建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。应用场景:需要通过多个步骤来构建一个复杂的对象时使用。

5、原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。应用场景:需要创建多个相同对象时使用,可以避免重复的初始化操作。

6、适配器模式:将一个类的接口转换成客户希望的另一个接口。应用场景:当两个类接口不兼容时使用,可以让它们协同工作。

7、桥接模式:将抽象部分与实现部分分离,使它们可以变化。应用场景:通过将变化的抽象部分与实现部分分离,可以提高系统的灵活性和可维护性。

8、装饰器模式:动态地将责任附加到对象上,扩展功能。应用场景:在不改变对象接口的前提下,动态地给对象增加功能时使用。

9、组合模式:将对象组合成树形结构以表示“部分-整体”的结构关系,允许用户以相同的方式处理单个对象和组合对象。应用场景:当需要把整体与部分的关系表示出来时使用。

10、外观模式:为子系统中的一组接口提供一个统一的接口。应用场景:当需要简化接口或减少客户端与系统的交互时使用,可以提高系统的灵活性和可扩展性。

11、享元模式:运用共享技术有效地支持大量细粒度的对象。应用场景:当需要创建大量对象,且这些对象的许多属性相同时使用,可以减少内存的使用。

12、代理模式:为其他对象提供一种代理以控制对这个对象的访问。应用场景:当需要控制对象的访问权限或对象不易直接访问时使用。

13、模板方法模式:定义一个算法的骨架,将一些步骤延迟到子类中实现。应用场景:当需要在不改变算法结构的情况下修改算法的某些步骤时使用。

14、策略模式:定义一系列算法,将每个算法都封装起来,并让它们之间可以互换。应用场景:当需要动态地改变对象的行为时使用,可以提供灵活的设计。

15、命令模式:将请求封装成对象,以便使用不同的请求。队列或者日志来参数化其他对象。应用场景:当需要将请求发送者和请求接收者解耦时使用,可以提高系统的灵活性。

16、责任链模式:将多个对象连成一条责任链,并沿着这条链传递请求,直到有一个对象处理它为止。应用场景:当需要避免请求发送者与接收者之间的耦合时使用,可以提高系统的灵活性。

17、中介者模式:用一个中介对象封装一系列的对象交互,使得每个对象都不需要显式地知道其他对象。应用场景:当需要解耦对象之间的关系时使用,可以简化对象之间的交互。

18、观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。应用场景:当对象之间存在关联关系,一个对象的状态发生改变会影响到其他对象时使用。

19、备忘录模式:在不破坏封装的前提下,捕获并存储对象的内部状态,以便稍后可以将该对象恢复到原先的状态。应用场景:当需要实现撤销操作时使用,可以保存某个对象的历史状态。

20、迭代器模式:提供一种顺序访问复合对象内各元素的方法,而又不需要暴露该对象的内部表示。应用场景:当需要按顺序访问复杂对象内部的各个元素时使用,可以提供灵活和安全的访问方式。

21、访问者模式:表示一个作用于某对象结构中各元素的操作,可以在不改变各个元素的情况下定义作用于这些元素的新操作。应用场景:当需要对复杂对象结构中的各个元素进行某些特定的操作时使用。

22、状态模式:允许一个对象在其内部状态改变时改变其行为。应用场景:当需要根据对象的内部状态改变其行为时使用,可以提高系统的灵活性和可扩展性。

23、解释器模式:给定一个语言定义,定义出其文法的一种表示,并定义一个解释器,使用该解释器来解释这个语言中的句子。应用场景:当需要解释和执行一些特定的语法时使用。

常用设计模式概览:提高程序可维护性和可扩展性的秘密武器?

设计模式是在软件开发中常用的一种编程技巧,它提供了一种通用的解决方案,以便在面对特定的问题时,能够提高软件的可维护性、可扩展性和可重用性。设计模式是一种经过实践证明并被广泛使用的最佳实践。在本文中,我们将简要介绍常见的设计模式。

一、创建型模式

1、工厂方法模式(Factory Method)

工厂方法模式是一种用于创建对象的设计模式。它定义了一个接口来创建对象,并由子类来实现这个接口,从而创建出不同的对象。这样,我们就可以在不暴露对象创建细节的情况下创建对象。工厂方法模式可以帮助我们解决创建对象时的复杂性。

2、抽象工厂模式(Abstract Factory)

抽象工厂模式是工厂方法模式的一种扩展。它可以帮助我们创建一组相关的对象,而不是单个对象。抽象工厂模式定义了一个抽象工厂接口,具体的工厂实现了这个接口来创建对象。通过使用抽象工厂模式,我们可以将对象的创建过程封装起来,从而让客户端代码更加简单。

3、单例模式(Singleton)

单例模式是一种确保一个类只有一个实例的模式。它通过将类的构造函数私有化来实现。这样,就可以防止通过构造函数创建多个实例。单例模式通常提供一个静态方法来获取类的唯一实例。单例模式可以帮助我们确保全局只有一个实例,并且可以让我们方便地访问这个实例。

4、建造者模式(Builder)

建造者模式是一种用于创建复杂对象的模式。它将对象的构造过程分解成多个步骤,并且允许在每个步骤中使用不同的构造方法。这样,就可以创建出不同的对象。建造者模式可以帮助我们解决创建复杂对象时的复杂性。

5、原型模式(Prototype)

原型模式是一种用于创建对象的模式。它允许我们通过克隆一个现有对象来创建一个新的对象。这样,我们就可以在不知道对象创建细节的情况下创建新的对象。原型模式可以帮助我们提高对象创建的效率。

二、结构型模式

1、适配器模式(Adapter)

适配器模式是一种用于将不兼容接口转换为兼容接口的模式。适配器模式通过包装一个对象来适配不同的接口。这样,就可以让原本不兼容的接口能够相互协作。适配器模式可以帮助我们将旧系统与新系统无缝集成。

2、桥接模式(Bridge)

桥接模式是一种用于将抽象部分与实现部分分离的模式。桥接模式通过将抽象部分与实现部分分离,从而可以让它们能够地变化。这样,就可以在不影响其他部分的情况下修改抽象部分或实现部分。

3、组合模式(Composite)

组合模式是一种用于将对象组合成树形结构的模式。组合模式通过将对象组合成树形结构,从而可以让客户端代码以统一的方式处理单个对象和组合对象。组合模式可以帮助我们简化代码结构,从而提高代码的可读性和可维护性。

4、装饰器模式(Decorator)

装饰器模式是一种用于在运行时添加功能的模式。装饰器模式通过将对象包装在另一个对象中,从而可以在运行时动态地添加功能。装饰器模式可以帮助我们将复杂的功能分解成简单的功能,并且可以让我们方便地扩展对象的功能。

5、外观模式(Facade)

外观模式是一种用于简化接口的模式。外观模式通过提供一个简单的接口来隐藏系统的复杂性。这样,就可以让客户端代码更加简单。外观模式可以帮助我们简化代码结构,并且可以提高代码的可读性和可维护性。

6、享元模式(Flyweight)

享元模式是一种用于共享对象的模式。享元模式通过将共享对象的状态分离出来,从而可以让多个对象共享同一个状态。这样,就可以减少对象的数量,从而提高系统的性能。享元模式可以帮助我们优化系统性能,并且可以减少内存使用量。

三、行为型模式

1、职责链模式(Chain of Responsibility)

职责链模式是一种用于处理请求的模式。职责链模式通过将请求沿着一条链传递下去,从而可以让多个对象都有机会处理这个请求。职责链模式可以帮助我们将复杂的业务逻辑分解成简单的逻辑,并且可以让我们方便地扩展处理请求的对象。

2、命令模式(Command)

命令模式是一种用于封装操作的模式。命令模式通过将操作封装成对象,从而可以让我们能够以统一的方式处理不同的操作。命令模式可以帮助我们简化代码结构,并且可以让我们方便地撤销和重做操作。

3、解释器模式(Interpreter)

解释器模式是一种用于处理语言的模式。解释器模式通过将语言分解成语法树,从而可以让我们方便地解析和执行语言。解释器模式可以帮助我们扩展语言的语法和功能,并且可以让我们方便地添加新的语言。

4、迭代器模式(Iterator)

迭代器模式是一种用于访问集合的模式。迭代器模式通过将集合的遍历过程封装成对象,从而可以让客户端代码以统一的方式访问集合中的元素。迭代器模式可以帮助我们简化代码结构,并且可以让我们方便地扩展集合的遍历方式。

5、中介者模式(Mediator)

中介者模式是一种用于处理对象之间的交互的模式。中介者模式通过将对象之间的交互集中在一个中介者对象中,从而可以让对象之间的交互变得更加简单。中介者模式可以帮助我们解耦对象之间的交互,并且可以让我们方便地添加新的对象和交互方式。

6、备忘录模式(Memento)

备忘录模式是一种用于保存对象状态的模式。备忘录模式通过将对象的状态保存在一个备忘录对象中,从而可以让对象在后续操作中恢复到之前的状态。备忘录模式可以帮助我们实现撤销和重做操作,并且可以让我们方便地保存对象的历史状态。

7、观察者模式(Observer)

观察者模式是一种用于处理对象之间的通知的模式。观察者模式通过将对象之间的通知封装成事件,从而可以让对象之间的通知变得更加简单。观察者模式可以帮助我们解耦对象之间的通知,并且可以让我们方便地添加新的对象和通知方式。

8、状态模式(State)

状态模式是一种用于处理对象状态的模式。状态模式通过将对象的状态分解成不同的状态类,从而可以让对象的状态变得更加清晰。状态模式可以帮助我们简化代码结构,并且可以让我们方便地扩展对象的状态。

9、策略模式(Strategy)

策略模式是一种用于处理算法的模式。策略模式通过将算法封装成不同的策略类,从而可以让客户端代码选择不同的算法。策略模式可以帮助我们简化代码结构,并且可以让我们方便地扩展算法。

10、模板方法模式(Template Method)

模板方法模式是一种用于处理算法的模式。模板方法模式通过将算法的骨架定义在抽象基类中,从而可以让子类实现具体的算法细节。模板方法模式可以帮助我们简化代码结构,并且可以让我们方便地扩展算法的骨架和细节。

11、访问者模式(Visitor)

访问者模式是一种用于处理对象结构的模式。访问者模式通过将对象结构和访问操作分离,从而可以让客户端代码以统一的方式访问对象结构中的元素。访问者模式可以帮助我们简化代码结构,并且可以让我们方便地添加新的访问操作和元素类型。

12、享元模式(Flyweight)

像元模式是一种用于处理大量相似对象的模式。享元模式通过共享相同的状态,从而可以让我们节省内存和时间开销。享元模式可以帮助我们提高程序的性能,并且可以让我们方便地添加新的对象类型。

总结:设计模式是一种被广泛使用的软件设计方法,它可以帮助我们简化代码结构、提高程序的可维护性和可扩展性。在本文中,我们介绍了12种常用的设计模式,包括工厂模式、单例模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

每种设计模式都有自己的特点和用途,我们可以根据不同的情况选择适合的模式来解决问题。虽然设计模式可以帮助我们提高程序的质量和效率,但是过度使用设计模式也会带来一些问题,例如增加代码的复杂性和维护成本。因此,在使用设计模式时,我们应该权衡利弊,根据实际情况作出选择。

java设计模式都有哪些(java的设计模式有哪些)

一共23种设计模式!

按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。

创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。

创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:

工厂方法模式(FactoryMethodPattern)

抽象工厂模式(AbstractFactoryPattern)

建造者模式(BuilderPattern)

原型模式(PrototypePattern)

单例模式(SingletonPattern)

结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:

适配器模式(AdapterPattern)

桥接模式(BridgePattern)

组合模式(CompositePattern)

装饰者模式(DecoratorPattern)

外观模式(FacadePattern)

享元模式(FlyweightPattern)

代理模式(ProxyPattern)

行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:

责任链模式(ChainofPattern)

命令模式(CommandPattern)

解释器模式(InterpreterPattern)

迭代器模式(IteratorPattern)

中介者模式(MediatorPattern)

备忘录模式(MementoPattern)

观察者模式(ObserverPattern)

状态模式(StatePattern)

策略模式(StrategyPattern)

模板方法模式(TemplateMethodPattern)

访问者模式(VisitorPattern)

推荐你一本好书:《软件秘笈:设计模式那点事》,里面讲解的23中设计模式例子很生动,容易理解,还有JDK中设计模式应用情况,看了收获挺大的!百度里面搜“设计模式”,第一条中设计模式百度百科中就有首推该图书,浏览量在20几万以上的,不会错的。好东西大家一起分享!

祝你早日学会设计模式!

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文

  • 戏赠张叔甫黄庭坚的其他诗词有哪些

    《戏赠张叔甫》黄庭坚其他诗词:《秋怀二首》、《登快阁》、《诉衷情》、《虞美人宜州见梅作》、《寄黄几复》。《戏赠张叔甫》黄庭坚其他诗词:《秋怀二首》、《登快阁》、《诉衷情》、《虞美人宜州见梅作》、《寄黄几复》。作者:黄庭坚。年代:宋代。我们为您从以下几个方面提供戏赠张叔甫的详细介绍。一、《戏赠张叔甫》的全文 点此查看《戏赠张叔甫》的详细内容。团扇复团扇,因风托方便。衔泥巢君屋,双燕令人羡。张公子,时相见。张公一生江海客,文章献纳麒麟殿。文采风流今尚存,看君不合长贫贱。醉中往往爱逃禅,解道澄江静如练。淮南百宗经行处,携手落日回高宴。城上乌,尾毕逋。尘沙立暝途,惟有摩尼珠。云梦泽南州,更有赤须胡。与君歌一曲,长铗归来乎。出无车,食无鱼。不须闻此意惨怆,幸是元无免破除。脱吾帽,向君笑。

  • 戏赠张叔甫黄庭坚的其他诗词

    《戏赠张叔甫》黄庭坚其他诗词:《秋怀二首》、《登快阁》、《诉衷情》、《虞美人宜州见梅作》、《寄黄几复》。《戏赠张叔甫》黄庭坚其他诗词:《秋怀二首》、《登快阁》、《诉衷情》、《虞美人宜州见梅作》、《寄黄几复》。作者:黄庭坚。年代:宋代。我们为您从以下几个方面提供戏赠张叔甫的详细介绍。一、《戏赠张叔甫》的全文 点此查看《戏赠张叔甫》的详细内容。团扇复团扇,因风托方便。衔泥巢君屋,双燕令人羡。张公子,时相见。张公一生江海客,文章献纳麒麟殿。文采风流今尚存,看君不合长贫贱。醉中往往爱逃禅,解道澄江静如练。淮南百宗经行处,携手落日回高宴。城上乌,尾毕逋。尘沙立暝途,惟有摩尼珠。云梦泽南州,更有赤须胡。与君歌一曲,长铗归来乎。出无车,食无鱼。不须闻此意惨怆,幸是元无免破除。脱吾帽,向君笑。

  • 戏赠张叔甫黄庭坚其他诗词

    《戏赠张叔甫》黄庭坚其他诗词:《秋怀二首》、《登快阁》、《诉衷情》、《虞美人宜州见梅作》、《寄黄几复》。《戏赠张叔甫》黄庭坚其他诗词:《秋怀二首》、《登快阁》、《诉衷情》、《虞美人宜州见梅作》、《寄黄几复》。作者:黄庭坚。年代:宋代。我们为您从以下几个方面提供戏赠张叔甫的详细介绍。一、《戏赠张叔甫》的全文 点此查看《戏赠张叔甫》的详细内容。团扇复团扇,因风托方便。衔泥巢君屋,双燕令人羡。张公子,时相见。张公一生江海客,文章献纳麒麟殿。文采风流今尚存,看君不合长贫贱。醉中往往爱逃禅,解道澄江静如练。淮南百宗经行处,携手落日回高宴。城上乌,尾毕逋。尘沙立暝途,惟有摩尼珠。云梦泽南州,更有赤须胡。与君歌一曲,长铗归来乎。出无车,食无鱼。不须闻此意惨怆,幸是元无免破除。脱吾帽,向君笑。

  • 紴字的组词 紴字的组词有哪些

    紴字的组词 紴字的组词有哪些。麻紴、;紴的笔顺是撇折、撇折、点、点、点、点、横撇。紴字的笔顺图解;共十一画;紴;1;撇折;2;撇折;3;点;4;点;5;点;6;点;7;横撇;8;撇;9;竖;10;横撇;11;捺;紴的拼音为bō,部首为糹,结构为左右,注音为ㄅㄛ,ㄅㄧˋ。紴字的具体字的具体解释是什么呢,我们通过以下几个方面为您介绍。一、基本解释 点此查看紴的详细内容。[ bō ]1.绦属。2.锦类。3.水波锦文。[ bì ]1.装束貌。二、康熙字典;紴【未集中】【糸部】 康熙筆画:11画,部外筆画:5画《廣韻》博禾切《集韻》逋禾切。音波。《說文》絛屬。又《集韻》匹靡切,音帔。《玉篇》水紴錦文也。又《集韻》平義切,音被。《類篇》裝束貌。三、说文解字;

  • 戏赠张叔甫相同朝代诗歌 戏赠张叔甫相同朝代诗歌有哪些

    《戏赠张叔甫》黄庭坚相同朝代诗词。《曹将军》、《下瞿塘》、《滕王阁》、《儿馁嗔郎罢妻寒怨藁砧唐眉山诗也戏为笺之》、《题艾溪》、《废贡院为米廪过之值盘厫》、《送客至灵谷》、《叹屩词》、《题陈朝玉爱竹轩》、《酬春湖史履庸惠四皓图》。《戏赠张叔甫》相同朝代的诗词:《曹将军》、《下瞿塘》、《滕王阁》、《儿馁嗔郎罢妻寒怨藁砧唐眉山诗也戏为笺之》、《题艾溪》、《废贡院为米廪过之值盘厫》、《送客至灵谷》、《叹屩词》、《题陈朝玉爱竹轩》、《酬春湖史履庸惠四皓图》作者:黄庭坚。年代:宋代。我们为您从以下几个方面提供戏赠张叔甫的详细介绍。一、《戏赠张叔甫》的全文 点此查看《戏赠张叔甫》的详细内容。团扇复团扇,因风托方便。衔泥巢君屋,双燕令人羡。张公子,时相见。张公一生江海客,文章献纳麒麟殿。

Top