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

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 // 通俗易懂但画风极骚

__EOF__

本文作者cancantrbl
本文链接https://www.cnblogs.com/cancantrbl/p/14757869.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cancantrbl  阅读(81)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示