工厂模式是一种创建型设计模式,主要用于创建对象而不直接指定具体的类。它将对象的创建过程封装在一个工厂类中,如许可以在不修改客户端代码的环境下,改变创建的对象范例或实现。简朴来说,工厂模式就像是一个“工厂”,根据需求生产差别的“产物”。
出行模式可以用工厂模式 比如坐飞机 坐高铁 做大巴去北京玩
假设我们要实现一个程序来选择差别的出行方式:
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。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |