浅谈创建型模式 - 抽象工厂,建造者,工厂方法,原型,单例

1. 抽象工厂 - ABSTRACT FACTORY

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

通俗解释1:假如你和你朋友要装修新房,要去家具公司制定所需的家具,你跟家具公司说要椅子,家具公司会根据客户的需求配置一整套家具,包括椅子,沙发,餐桌等等。这种情况下你不需要知道家具工厂里是创建什么风格家具的,你只需要跟家具公司说一声你要椅子和桌子,他就会给你相对应统一风格的椅子和桌子。

通俗解释2:想送女友礼物,爱马仕的包包和LV的包包都是女朋友喜欢的,虽然样式有所不同,但不管你带女友去爱马仕还是去LV,只管向导购员说“给我选个包包 (Product)”就行了。爱马仕和LV就是生产包包的Factory

客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。

2. 建造者 - BUILDER

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

通俗解释1:你需要用代码画两个人,一个岳云鹏一个迪丽热巴。他们虽有很多不同,但也有很多相同的地方,比如头,身体,手,腿等等。如果对每个对象进行操作会有很多重复代码,而且容易画漏。如果再要你画个姚明,你又需要改他腿长的代码。这种情况我们可以知道建造的过程是不变的,就是画手画身体画腿等等,不同的是具体的创造细节,有胖有瘦有高有矮(岳云鹏:有被内涵到)。这个时候我们引入一个创建者,我们只需要指定需要建造的类型就可以得到他们,而具体的过程和细节就不需要知道了。比如岳云鹏是FatPerson(),姚明是TallPerson(), 迪丽热巴是BeautyPerson()。

将对象的内部表象和对象的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象,客户不必知道产品内部组成的细节

3. 工厂方法 - FACTORY METHOD

通俗解释1:有很多类型的演员公司,比如偶像出身的演员公司,演技学校出身的演员公司和专职群演的公司,他们之间都有共同的方法是演戏。导演觉得偶像出身公司的演员不行,想换个演员,用工厂方法的话,导演只需换一个演员公司即可,该演员公司会给他所需的演员。导演不需要知道该演员是如何变成演员的,导演只需要他能演戏即可。

通俗解释2:请小姐姐去麦当劳吃汉堡,不同的小姐姐有不同的口味,要每个都记住是一件烦人的事情,Factory Method模式呢就是我带着小姐姐到服务员那儿说“要一个汉堡”,具体要什么样的汉堡呢,让MM小姐姐直接跟服务员说就行了。

核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

4. 原型 - PROTOTYPE

用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象

通俗解释1:跟小姐姐聊天一定要说些土味情话咯,我搜集了好多情话,需要时只要copy出来就行了,这就是我的情话prototype了

在代码里,不是所有对象都能进行复制 因为有些对象可能拥有私有成员变量,这在对象本身以外是不可见的。原型模式为所有支持克隆的对象声明了一个通用接口 该接口让你能够克隆对象。该接口会创建一个当前类的对象 然后将原始对象所有的成员变量值复制到新建的类中。就像细胞的有丝分裂,原始细胞是原型,有丝分裂会生成一对一模一样的细胞。缺点是每一个类都必须配备一个克隆方法。

5. 单例 - SINGLETON

能够保证一个类只有一个实例 并提供一个访问该实例的全局节点

通俗解释1:俺有6个帅气的老婆,她们的老公都是俺,俺就是俺们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是俺(梦醒了)

单例破坏了单一职责原则:保证一个类只有一个实例和为该实例提供一个全局访问节点。

 Reference

  1. https://refactoringguru.cn/design-patterns/
  2. 大话设计模式
  3. http://blog.sina.com.cn/s/blog_6e162de70101d0cf.html // 通俗易懂但画风极骚
posted @ 2021-05-11 23:07  cancantrbl  阅读(69)  评论(0编辑  收藏  举报