工厂模式
定义
创建对象的接口,让其子类自己决定实例化哪个类,工厂模式使其创建过程延迟到子类进行。
角色
1.产品抽象接口
2.工厂创建产品方法
3.产品实例
例子
选银行借钱的例子,资质方法根据你的收入等其他情况给你选择银行。
//抽象产品接口
type Bank interface {
BorrowMoney()
}
//具体银行产品实例
type BjBank struct{
}
func (b *BjBank)BorrowMoney(){
fmt.Println("bj bank borrow money")
}
type ZsBank struct{
}
func (z *ZsBank)BorrowMoney(){
fmt.Println("zs bank borrow money")
}
//工厂创建产品方法
func GetBank(incomeMoney int64)Bank{
if incomeMoney > 10{
return &BjBank{}
}else if incomeMoney >100{
return &ZsBank{}
}
return nil
}
func main(){
//向资质工厂获取可以借钱的银行对象
b := GetBank(20)
//借钱
b.BorrowMoney()
b := GetBank(200)
b.BorrowMoney()
}
总结
抽象一个类(interface),多个struct 实现了这个抽象,这个时候我们可以对这个抽象类实现一个工厂方法,这个工厂方法专门来根据一些不确定条件来创建这个抽象类的实体类。