优点:
- 不需要记住具体类名,甚至连具体参数都不用记忆。
- 实现了对象创建和使用的分离。
- 系统的可扩展性也就变得非常好,无需修改接口和原类。
- 对于新产品的创建,符合开闭原则。
类图
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| package abstractfactory
import "fmt"
type Fruit interface { Show() }
type Factory interface { CreateFruit() Fruit }
type Apple struct{}
func (a *Apple) Show() { fmt.Println("我是苹果") }
type AppleFactory struct{}
func (af *AppleFactory) CreateFruit() Fruit { return new(Apple) }
type Banana struct{}
func (a *Banana) Show() { fmt.Println("我是香蕉") }
type BananaFactory struct{}
func (af *BananaFactory) CreateFruit() Fruit { return new(Banana) }
type Pear struct{}
func (a *Pear) Show() { fmt.Println("我是梨") }
type PearFactory struct{}
func (af *PearFactory) CreateFruit() Fruit { return new(Pear) }
|
符合开闭原则。如果需要加入新的水果。只需要在后面加入就可以
1 2 3 4 5 6 7 8 9 10 11 12
| type Strawberry struct{}
func (a *Strawberry) Show() { fmt.Println("我是草莓") }
type StrawberryFactory struct{}
func (af *StrawberryFactory) CreateFruit() Fruit { return new(Strawberry) }
|