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

工厂模式是一种创建型设计模式,主要用于创建对象而不直接指定具体的类。它将对象的创建过程封装在一个工厂类中,这样可以在不修改客户端代码的情况下,改变创建的对象类型或实现。简单来说,工厂模式就像是一个“工厂”,根据需求生产不同的“产品”。

出行模式可以用工厂模式 比如坐飞机 坐高铁 做大巴去北京玩

假设我们要实现一个程序来选择不同的出行方式:

1. 定义出行工具接口:表示所有出行工具的共同行为。

2. 具体出行工具类:实现出行工具接口,比如飞机、高铁和大巴。

3. 工厂类:根据客户的需求创建具体的出行工具实例。

package main

import (
	"fmt"
	"time"
)

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

// 具体出行工具:飞机
type Airplane struct {
	price        float64
	arrivalTime  time.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
	arrivalTime  time.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
	arrivalTime  time.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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值