一、创建型 关注 如何创建对象 :把“怎么 new”与“怎么用”解耦,让系统不依赖具体类型。 1. 单例 Singleton 思想 :保证一个类只有一个实例,并提供全局访问点。逻辑:包内私有变量 + 受控获取入口 + 并发安全的一次性初始化。代价是隐含全局状态、不利测试,能用依赖注入时优先注入。 场景 :全局配置;日志器;数据库连接池( sql.DB 本身即单例使用)。 var once sync.Once var cfg *Config func GetConfig () * Config { once.Do( func () { cfg = loadConfig() }); return cfg } 2. 工厂方法 Factory Method 思想 :把“创建哪种对象”这个变化点封装起来,调用方只依赖接口,不直接 new 具体类型。逻辑:定义创建接口,由具体工厂决定产出,新增类型无需改调用方(开闭原则)。 场景 :按渠道创建通知器(短信/邮件/推送);按文件类型创建解析器;日志输出目标创建。 type Notifier interface { Send(msg string ) } type Creator interface { Create() Notifier } type SMSCreator struct {} func (SMSCreator) Create () Notifier { return &SMS{} } 3. 抽象工厂 Abstract Factory 思想 :一次创建“一整族”相关对象,保证它们互相兼容(不会把 S3 存储和阿里云队列混用)。逻辑:工厂接口含多个创建方法,切换工厂即整族切换。 场景 :多云适配(AWS/阿里云/GCP 的存储+队列成套创建);多数据库方言;UI 主题套件。 type CloudFactory interface { NewStorage() Storage; NewQueue() Queue } type AWSFactory struct {} func (AWSFactory) NewStorage () Storage { return &S3{} } func (AWSFactory) NewQ...