Golang设计模式——02抽象工厂模式

简介: Golang设计模式——02抽象工厂模式

抽象工厂模式

优点

  1. 提供一个创建一系列相关或者依赖对象的接口,而无需指定他们具体的类。
  2. 解决接口选择的问题。
  3. 抽象工厂模式不可以增加产品,但是可以增加产品族
  4. 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
  5. 如果同一家工厂需要生产不止一种产品,那么使用工厂模式会造成工厂过多的情况,使用抽象工厂模式可以使同一个工厂组成一个“产品族”,即可以生产多种产品。

缺点

  1. 产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

场景

当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。

代码

package Abstract_Factory
import "fmt"
type mouse interface {
  click()
}
type AsusMouse struct {
}
func (a *AsusMouse) click() {
  fmt.Println("Asus Mouse Check screen")
}
type LogitechMouse struct {
}
func (l *LogitechMouse) click() {
  fmt.Println("Logitech Mouse Check screen")
}
type keyboard interface {
  press()
}
type AsusKeyboard struct {
}
func (a *AsusKeyboard) press() {
  fmt.Println("Asus keyboard press")
}
type LogitechKeyboard struct {
}
func (l *LogitechKeyboard) press() {
  fmt.Println("Logitech Keyboard press")
}
type AbstractFactory interface {
  produceMouse(brand string) mouse
  produceKeyboard(brand string) keyboard
}
type MouseFactory struct {
}
func (m *MouseFactory) produceMouse(brand string) mouse {
  switch brand {
  case "Asus":
    return &AsusMouse{}
  case "Logitech":
    return &LogitechMouse{}
  }
  return nil
}
func (m *MouseFactory) produceKeyboard(brand string) keyboard {
  return nil
}
type KeyboardFactory struct {
}
func (k KeyboardFactory) produceMouse(brand string) mouse {
  return nil
}
func (k KeyboardFactory) produceKeyboard(brand string) keyboard {
  switch brand {
  case "Asus":
    return &AsusKeyboard{}
  case "Logitech":
    return &LogitechKeyboard{}
  }
  return nil
}
func NewFactory(factory string) AbstractFactory {
  switch factory {
  case "mouse":
    return &MouseFactory{}
  case "keyboard":
    return &KeyboardFactory{}
  }
  return nil
}


package Abstract_Factory
import "testing"
func TestNewFactory(t *testing.T) {
  factory := NewFactory("mouse")
  AsusMouse := factory.produceMouse("Asus")
  AsusMouse.click()
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
8月前
|
设计模式 PHP
php设计模式--抽象工厂模式(二)
php设计模式--抽象工厂模式(二)
45 0
|
7月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
37 5
|
8月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
8月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
73 2
|
8月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
258 4
|
4月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
5月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
47 1
|
5月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
5月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
5月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式

热门文章

最新文章