汕尾海湾 发表于 2024-8-28 00:18:27

go设计模式———工厂模式

工厂模式是一种创建型设计模式,主要用于创建对象而不直接指定具体的类。它将对象的创建过程封装在一个工厂类中,如许可以在不修改客户端代码的环境下,改变创建的对象范例或实现。简朴来说,工厂模式就像是一个“工厂”,根据需求生产差别的“产物”。

出行模式可以用工厂模式 比如坐飞机 坐高铁 做大巴去北京玩
假设我们要实现一个程序来选择差别的出行方式:
1. 界说出行工具接口:表示全部出行工具的共同举动。
2. 具体出行工具类:实现出行工具接口,比如飞机、高铁和大巴。
3. 工厂类:根据客户的需求创建具体的出行工具实例。

package main

import (
        "fmt"
        "time"
)

// 出行工具接口
type TravelMode interface {
        Travel() string
        Price() float64
        ArrivalTime() time.Time
}

// 具体出行工具:飞机
type Airplane struct {
        price      float64
        arrivalTimetime.Time
}

func (a Airplane) Travel() string {
        return "Flying by airplane"
}

func (a Airplane) Price() float64 {
        return a.price
}

func (a Airplane) ArrivalTime() time.Time {
        return a.arrivalTime
}

// 具体出行工具:高铁
type HighSpeedTrain struct {
        price      float64
        arrivalTimetime.Time
}

func (h HighSpeedTrain) Travel() string {
        return "Traveling by high-speed train"
}

func (h HighSpeedTrain) Price() float64 {
        return h.price
}

func (h HighSpeedTrain) ArrivalTime() time.Time {
        return h.arrivalTime
}

// 具体出行工具:大巴
type Bus struct {
        price      float64
        arrivalTimetime.Time
}

func (b Bus) Travel() string {
        return "Traveling by bus"
}

func (b Bus) Price() float64 {
        return b.price
}

func (b Bus) ArrivalTime() time.Time {
        return b.arrivalTime
}

// 工厂类
func TravelModeFactory(modeType string, price float64, arrivalTime time.Time) TravelMode {
        if modeType == "airplane" {
                return Airplane{price: price, arrivalTime: arrivalTime}
        } else if modeType == "train" {
                return HighSpeedTrain{price: price, arrivalTime: arrivalTime}
        } else if modeType == "bus" {
                return Bus{price: price, arrivalTime: arrivalTime}
        }
        return nil
}

func main() {
        // 创建不同的出行工具
        now := time.Now()
        airplane := TravelModeFactory("airplane", 500.0, now.Add(2*time.Hour))
        train := TravelModeFactory("train", 150.0, now.Add(1*time.Hour))
        bus := TravelModeFactory("bus", 50.0, now.Add(5*time.Hour))

        // 输出信息
        fmt.Printf("%s\nPrice: $%.2f\nArrival Time: %v\n", airplane.Travel(), airplane.Price(), airplane.ArrivalTime())
        fmt.Printf("%s\nPrice: $%.2f\nArrival Time: %v\n", train.Travel(), train.Price(), train.ArrivalTime())
        fmt.Printf("%s\nPrice: $%.2f\nArrival Time: %v\n", bus.Travel(), bus.Price(), bus.ArrivalTime())
} 工厂方法 TravelModeFactory 用于创建具体的出行工具实例。
• 根据传入的 modeType 参数(“airplane”、“train” 或 “bus”),工厂方法返回相应的具体出行工具实例,并传入代价和到达时间。
• 如果 modeType 不匹配任何已知的范例,工厂方法返回 nil。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: go设计模式———工厂模式