首页 > 其他分享 >创建类模式大PK

创建类模式大PK

时间:2022-11-09 17:40:04浏览次数:41  
标签:对象 创建 建造 模式 工厂 抽象 PK


创建类模式包括工厂方法模式、创建者模式、抽象工厂模式、单例模式和原型模式,他们能够提供对象的创建和管理职责。

创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。

为什么需要创建型模式

所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来;第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)来创建,以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性

常见的五种创建型模式

单件模式(Singleton Pattern)解决的是实体对象的个数问题,其他的都是解决new所带来的耦合关系问题。

工厂方法模式(Factory Pattern)在工厂方法中,工厂类成为了抽象类,其实际的创建工作将由其具体子类来完成。工厂方法的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中去,强调的是“单个对象”的变化。

抽象工厂模式(Abstract Factory)抽象工厂是所有工厂模式中最为抽象和最具有一般性的一种形态。抽象工厂可以向客户提供一个接口,使得客户可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象,强调的是“系列对象”的变化。

创建者模式(Builder Pattern)把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了这个类的构造逻辑。他把一个复杂对象的构造过程从对象的表示中分离出来。其直接效果是将一个复杂的对象简化为一个比较简单的目标对象。他强调的是产品的构造过程。

原型模式(Prototype Pattern)和工厂模式一样,同样对客户隐藏了对象创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。

1、工厂方法模式VS建造者模式

     工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在强调一步一步的创建出对象的这个过程。

      用制造超人举例子来说明这两个模式的区别:用工厂方法模式直接生产一个超人,出来就是力大无穷、能够飞翔、内裤外穿的超人,而是用建造者模式,需要组装手、头脚等躯干,然后再把内裤外穿,然后再给其赋予各种超能力,很明显,如果这个超人单一,那么工厂方法模式适用,但是如果有各种各样的超人,组装的次序不一样,就会有很多品种,用建造者模式可以令物种多样化。

      先来看看用工厂方法模式设计的UML图:

创建类模式大PK_prototype

  再来看看用建造者模式设计的UML图:

创建类模式大PK_产品_02

总结下两个模式的区别:建造者必须关注超人的各个部件,而工厂方法模式则只关注超人的整体

2、抽象工厂模式VS建造者模式

    抽象工厂模式:不关心构建过程,只关心什么产品由什么工厂生产即可

    建造者模式:要求按照指定的蓝图建造产品,它的主要目的是通过组装零件而产生一个新产品

    举例子来说明两者的不同:现代化的汽车工厂能够批量声场汽车,不同的工厂声场不同的汽车,宝马汽车生产宝马牌子的车,奔驰生产奔驰牌子的车。车不仅具有不同的品牌,还有不同的用途分类,如商务车Van,运动型车SUV等

    先来看看用抽象工厂模式来设计的实现方式:​

创建类模式大PK_工作_03

   再来看按照建造者模式来设计,建造者模式设计一个生产车辆需要把车辆进行拆分,拆分成引擎和车轮两部分,然后又建造者进行建造,想要什么车,你只要有设计图纸就成,马上就可以建造一辆车出来。具体的UML图如下

创建类模式大PK_uml_04

标签:对象,创建,建造,模式,工厂,抽象,PK
From: https://blog.51cto.com/u_15870687/5837374

相关文章

  • 结构类模式大PK
    结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式),结构类模式包括:适配器模式、组......
  • 包装模式大PK
    包装模式包括:装饰模式、适配器模式、门面模式、代理模式、桥梁模式,下面来看看这5个包装模式的区别,用一个追星的例子来加以说明,首先来看代理模式:追星族只需要找代理要签名即......
  • 设计模式利剑三--抽象工厂方法模型
    定   义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类优   点:           1、封装性,每个产品的实现类不是高层模块要关心的,他们......
  • 门面模式VS中介者模式
          门面模式为复杂的子系统提供给一个统一的访问界面,它定义的而是一个高层接口,该接口使得子系统更加容易使用,避免外部模块深入到子系统内部而产生于子系统内部细......
  • 设计模式利剑4-模板方法模式
    定   义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤优   点:            1......
  • 设计模式利剑5-建造者模式
    定   义:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示优   点:            1、封装性            2、建造者......
  • python之路27 单例模式实现方式、pickle模块、选课系统目录搭建
    单例模式实现的多种方式单例1:(提前定义一个名字)classC1:__instance=Nonedef__init__(self,name,age):self.name=nameself.age......
  • 设计模式利剑15-组合模式
    定     义:将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性优     点:              1、高层......
  • python单例模式
    单例模式的意思单例模式是一个软件的设计模式,为了保证一个类,无论调用多少次产生的实例对象,都是指向同一个内存地址,仅仅只有一个实例(只有一个对象)。单例模式的优势1.全......
  • 设计模式简介及单例模式
    目录设计模式简介及单例模式单例模块实现的多种方式方式一:绑定给类的方法方式二:基于元类的类名加括号方式三:基于模块的单例模式方式四:定义一个装饰器实现单例模式方法五:基......