创建型模式总结(一) | 青训营

71 阅读3分钟

本系列笔记总结23种设计模式在GO语言中的实现方法,参考了refactoringguru.cn/design-patt… 网站的内容,也包括我自己的理解。如果有理解不对的地方,恳请批评指正。

创建型设计模式

设计模式是指在进行项目构建时的代码组织思路,而不是类似接口、基础、反射一类具体的特定技术。思路不拘泥于不同语言的实现方式,而是在更高层次指导项目的构建。

设计模式通常被分为创建型模式、结构型模式和行为模式三大类。其中创建型模式主要包含了五种设计模式:

  • 工厂模式
  • 抽象工厂模式
  • 原型模式
  • 单例模式
  • 生成器模式

这些概念真的很容易令人混淆,因为一种语言创建对象的方法很简洁,不落实到实际使用中你很难理解为什么要这样组织创建对象的代码。

下面讲一讲我理解到的。

工厂模式

工厂模式能够将多种产品的创建封装在同一个工厂中,使得调用者在获取不同产品时只需调用同一个方法即可。

当然,这些不同的产品必须有一定的共同点,落实在GO语言中就是它们也许都实现了某个接口。

举个例子,假如你的项目中可能用到多种不同的数据库,需要获得多种不同的数据库连接对象,如果每次获取不同的数据库连接都要进行手动配置显然很麻烦,如果能封装成一个open(string) *DB方法,根据输入参数的不同返回不同的DB对象就好了。这个就是工厂模式的使用场景了。

抽象工厂模式

抽象工厂模式在名字上很容易和工厂模式产生误会,让人以为是工厂模式的抽象方法。真相是抽象工厂先产生不同工厂,再由这些工厂产生不同的产品。

举个例子,假如你在写一个游戏。战士、法师有不同的装备套装,有战士系列衣服、武器和法师系列衣服、武器,你无法装备别的职业装备。

假如你需要生成一套装备给人物使用,这个时候就需要保证装备是配套且满足人物职业的。我们可以设计一个抽象工厂GetFactory(career string) *Factory,传入职业即可返回对应职业的装备制造工厂,再调用factory.createClothes()factory.createWeapon()生成衣服和武器。Factory是一个需要实现createClothes() *ClothescreateWeapon() *Weapon方法的接口。

这样设计的好处是,你只需要传入人物的职业便能获取对应的配套资源,在日后拓展项目时,也无需改动客户端的调用方法,只需让新职业实现抽象工厂的接口即可。

由于篇幅过长不利于阅读,这篇先写到这里,如果有理解不对的地方,也希望大佬们多多指正!