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

打印 上一主题 下一主题

主题 682|帖子 682|积分 2046

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

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

  1. package main
  2. import (
  3.         "fmt"
  4.         "time"
  5. )
  6. // 出行工具接口
  7. type TravelMode interface {
  8.         Travel() string
  9.         Price() float64
  10.         ArrivalTime() time.Time
  11. }
  12. // 具体出行工具:飞机
  13. type Airplane struct {
  14.         price        float64
  15.         arrivalTime  time.Time
  16. }
  17. func (a Airplane) Travel() string {
  18.         return "Flying by airplane"
  19. }
  20. func (a Airplane) Price() float64 {
  21.         return a.price
  22. }
  23. func (a Airplane) ArrivalTime() time.Time {
  24.         return a.arrivalTime
  25. }
  26. // 具体出行工具:高铁
  27. type HighSpeedTrain struct {
  28.         price        float64
  29.         arrivalTime  time.Time
  30. }
  31. func (h HighSpeedTrain) Travel() string {
  32.         return "Traveling by high-speed train"
  33. }
  34. func (h HighSpeedTrain) Price() float64 {
  35.         return h.price
  36. }
  37. func (h HighSpeedTrain) ArrivalTime() time.Time {
  38.         return h.arrivalTime
  39. }
  40. // 具体出行工具:大巴
  41. type Bus struct {
  42.         price        float64
  43.         arrivalTime  time.Time
  44. }
  45. func (b Bus) Travel() string {
  46.         return "Traveling by bus"
  47. }
  48. func (b Bus) Price() float64 {
  49.         return b.price
  50. }
  51. func (b Bus) ArrivalTime() time.Time {
  52.         return b.arrivalTime
  53. }
  54. // 工厂类
  55. func TravelModeFactory(modeType string, price float64, arrivalTime time.Time) TravelMode {
  56.         if modeType == "airplane" {
  57.                 return Airplane{price: price, arrivalTime: arrivalTime}
  58.         } else if modeType == "train" {
  59.                 return HighSpeedTrain{price: price, arrivalTime: arrivalTime}
  60.         } else if modeType == "bus" {
  61.                 return Bus{price: price, arrivalTime: arrivalTime}
  62.         }
  63.         return nil
  64. }
  65. func main() {
  66.         // 创建不同的出行工具
  67.         now := time.Now()
  68.         airplane := TravelModeFactory("airplane", 500.0, now.Add(2*time.Hour))
  69.         train := TravelModeFactory("train", 150.0, now.Add(1*time.Hour))
  70.         bus := TravelModeFactory("bus", 50.0, now.Add(5*time.Hour))
  71.         // 输出信息
  72.         fmt.Printf("%s\nPrice: $%.2f\nArrival Time: %v\n", airplane.Travel(), airplane.Price(), airplane.ArrivalTime())
  73.         fmt.Printf("%s\nPrice: $%.2f\nArrival Time: %v\n", train.Travel(), train.Price(), train.ArrivalTime())
  74.         fmt.Printf("%s\nPrice: $%.2f\nArrival Time: %v\n", bus.Travel(), bus.Price(), bus.ArrivalTime())
  75. }
复制代码
工厂方法 TravelModeFactory 用于创建具体的出行工具实例。
• 根据传入的 modeType 参数(“airplane”、“train” 或 “bus”),工厂方法返回相应的具体出行工具实例,并传入代价和到达时间。
• 如果 modeType 不匹配任何已知的范例,工厂方法返回 nil。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表