GO设计模式——25、模板模式(行为型)
2023-12-22 06:15:26
目录
模板模式(Template Pattern)
???????模板模式(Template Pattern)定义了一个算法的骨架,并允许子类为其中的一些步骤提供具体实现。在模板模式中,模板定义了算法的框架,具体步骤则由子类实现。这种模式通过把不变的行为放在超类中,去除子类中的重复代码,提高代码复用性。
模板模式的核心角色:
- 抽象类(Abstract Class):定义一个模板方法,其中包含算法的骨架和一些抽象方法,用于延迟到子类中实现的步骤。
- 具体类(Concrete Class):继承抽象类,实现抽象方法,完成具体步骤的实现。
优缺点
(1)优点:
- 封装不变部分,扩展可变部分。
- 提取公共代码,便于维护。
- 行为由父类控制,子类实现。
(2)缺点:
- 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大
使用场景
- 有多个子类共有的方法,且逻辑相同。
- 重要的、复杂的方法,可以考虑作为模板方法。
代码实现
package main
import "fmt"
// 咖啡店的点单系统,针对不同类型的咖啡(美式咖啡、拿铁咖啡),希望根据不同类型的咖啡来制作和提供服务。
// 抽象类
type CoffeeMaker interface {
Prepare()
Brew()
Serve()
}
// 具体类:美式咖啡
type Americano struct{}
func (a *Americano) Prepare() {
fmt.Println("准备美式咖啡的材料")
}
func (a *Americano) Brew() {
fmt.Println("冲泡美式咖啡")
}
func (a *Americano) Serve() {
fmt.Println("提供美式咖啡")
}
// 具体类:拿铁咖啡
type Latte struct{}
func (l *Latte) Prepare() {
fmt.Println("准备拿铁咖啡的材料")
}
func (l *Latte) Brew() {
fmt.Println("冲泡拿铁咖啡")
}
func (l *Latte) Serve() {
fmt.Println("提供拿铁咖啡")
}
// 客户端代码
func main() {
americano := &Americano{}
americano.Prepare()
americano.Brew()
americano.Serve()
latte := &Latte{}
latte.Prepare()
latte.Brew()
latte.Serve()
}
文章来源:https://blog.csdn.net/Gloming__zxy/article/details/135133908
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!