Go 之基础速学 (十一) golang 里简单工厂模式

简单工厂模式:
基本特性:
1.“掩盖”new过程
2.会有一个工厂类,且一般有个方法接受参数,根据参数来决定实例化什么类

Go 之基础速学 (十) golang 里接口的实现 这篇文章当中我们讲到接口的实现方式发现如下代码:

var service services.IService = new(services.IServiceOne)
fmt.Println(service.Get(12))
var serviceTow services.IService = &services.IServiceTwo{}
fmt.Println(serviceTow.Get(13))

new(services.IServiceOne)以及&services.IServiceTwo{}频繁的使用是不是很难看啊,其实今天我们讲到的是为了让代码更加的规范化管理,更加舒适合理,当然你也可以不这么做,但是下边要讲到的可能对小白比较有用,牵扯到其他的几个知识要点

//main.go文件
package main
import (
   "com.huxiaobai/services"
   "fmt"
   "github.com/pquerna/ffjson/ffjson"
)
func main(){
   //接口的实现  (简单工厂模式的实现) 案例一
    //下边两个一起的  要么通过&符号传递内存地址进去 也就是指针 要么通过new也是获取到的内存指针 效果是一样的
    //var serviceFc services.IService = (&services.ServiceFactory{}).Create("one")
    //var serviceFc services.IService = new(services.ServiceFactory).Create("one")
    //这种方式是通过调用一个普通函数获取返回 return &ServiceFactory{} 的指针来实现的 是为了彻底的保证你看不到new关键字的存在
    var serviceFc services.IService = services.NewServiceFactory().Create("one")
    fmt.Println(serviceFc.Get(123))
}
//IService.go文件:
package services
//就这么简单 声明接口 interfacetype IService interface {
   Get(id int) string
}
//简单工厂模式 结构体
type ServiceFactory struct {
}
//简单工厂模式结构体里面的方法 要求传入的是指针类型 返回的是接口类型
func (sf *ServiceFactory) Create(name string) IService {
   switch name {
   case "one":
      return &IServiceOne{}
   case "two":
      return &IServiceTwo{}
   default:
      return nil
  }
}
//普通函数 要求返回的是指针类型
func NewServiceFactory() *ServiceFactory {
   //要么通过new 要么通过&符号获取内存地址也就是指针来返回
  //return new(ServiceFactory)
  return &ServiceFactory{}
}
//IServiceOne文件:
package services
type IServiceOne struct {
}
func (one *IServiceOne) Get(id int) string {
   return "单挑新闻内容one"
}
//IServiceTwo文件:
package services
type IServiceTwo struct {
}
func (two *IServiceTwo) Get(id int) string {
   return "单挑新闻内容two";
}

主要看代码里面的注释,看不懂我也没办法的啦!

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!