我们一起来读书吧 关注:154贴子:2,822
  • 0回复贴,共1

设计模式-可复用面向对象软件的基础 第三章 创建型模式

只看楼主收藏回复

创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。
抽象工厂模式:创建一系列相关或相互依赖对象的接口,但无需指定他们的具体类。
工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
工厂模式和抽象工厂模式都属于创建型设计模式,主要用于对象的创建,但它们之间有一些关键的不同:
1、目的不同: 工厂模式(Factory Method)旨在通过让子类决定应该实例化哪一个类来创建对象,主要用于创建单一类型的对象。而抽象工厂模式(Abstract Factory)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
2、复杂性不同: 工厂模式相对简单,每个具体工厂类只负责创建一种具体产品。抽象工厂模式更复杂,一个工厂类可以创建多种产品对象。
3、应用场景不同: 工厂模式适用于产品种类相对较少且不会频繁增加的情况。抽象工厂模式适用于有多个产品系列,且产品系列中的产品需要一起使用时。
以下是抽象工厂的例子:
//创建一个book,再创建一个能够创建book的BookCompany接口
type BookCompany interface {
Create() Book
}
//创建两种 book 并且实现它
type Book interface {
ReadBook() string
WriteBook() string
}
type EnglishBook struct{}
type ChineseBook struct{}
//实现book的功能
func (e *EnglishBook) ReadBook() string {
return "reading a english book"
}
func (e *EnglishBook) WriteBook() string {
return "i'am writing"
}
func (c *ChineseBook) ReadBook() string {
return "读中文书"
}
func (c *ChineseBook) WriteBook() string {
return "我在创作中"
}
//创建两个印刷厂
type BeiJingCompany struct{}
type ShanghaiCompany struct{}
//一个印刷场刷英语书,一个刷中文书
func (c *BeiJingCompany) Create() Book {
return &EnglishBook{}
}
func (c *ShanghaiCompany) Create() Book {
return &ChineseBook{}
}
func main() {
var f BookCompany
f = new(BeiJingCompany)
book := f.Create()
fmt.Println(book.ReadBook())
}


IP属地:北京1楼2024-09-05 23:41回复