摘要:
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。
然而,抽象究竟是什么?
每个人的理解都尽不相同,我个人的理解是:抽象=格局。
认知,决定布局。
订单服务提供的接口,众所周知的有创建订单,补单等。就拿创建订单来说,单一的创建订单不需要考虑太多的规则,但若是遇到多渠道,每个渠道对创建订单有不同的要求,又如何来实现呢?正文部分将分享,分别if else与抽象工厂实现多渠道的创建订单。
正文:
if else:
package abstract_factoryimport "fmt"type OrderService struct {}func (*OrderService) createOrder(params map[string]interface{}) interface{} { channelId := fmt.Sprintf("%v", params["channId"]) if channelId == "1" { fmt.Printf("创建零售订单") } else if channelId == "2" { fmt.Printf("创建渠道订单") } return "订单创建成功"}
抽象工厂:
package abstract_factory// 创建订单接口type ICreateOrder interface { CreateOrder(params map[string]interface{}) map[string]interface{}}
package impl// 零售创建订单type RetailCreateOrder struct {}// 实现创建订单接口func (r *RetailCreateOrder) CreateOrder(params map[string]interface{}) map[string]interface{} { fmt.Println("创建零售订单") response := make(map[string]interface{}) return response}
package implimport "fmt"// 渠道创建订单type ChannelCreateOrder struct {}// 实现创建订单接口func (r *ChannelCreateOrder) CreateOrder(params map[string]interface{}) map[string]interface{} { fmt.Println("创建渠道订单") response := make(map[string]interface{}) return response}
package abstract_factory// 补单接口type ISupplementOrder interface { SupplementOrder(params map[string]interface{}) map[string]interface{}}
package impl// 零售补单type RetailSupplementOrder struct {}// 实现补单接口func (r *RetailSupplementOrder) SupplementOrder(params map[string]interface{}) map[string]interface{} { fmt.Println("创建零售补单") response := make(map[string]interface{}) return response}
package implimport "fmt"// 渠道补单type ChannelSupplementOrder struct {}func (r *ChannelSupplementOrder) SupplementOrder(params map[string]interface{}) map[string]interface{} { fmt.Println("创建渠道补单") response := make(map[string]interface{}) return response}
package abstract_factory// 订单工厂type IOrderFactory interface { CreateOrderFactory() ICreateOrder SupplementOrderFactory() ISupplementOrder}
package abstract_factoryimport "design/abstract_factory/impl"// 渠道订单工厂type ChannelOrderFactory struct {}// 实现渠道创建订单func (*ChannelOrderFactory) CreateOrderFactory() ICreateOrder { return &impl.ChannelCreateOrder{}}// 实现渠道补单func (*ChannelOrderFactory) SupplementOrderFactory() ISupplementOrder { return &impl.ChannelSupplementOrder{}}
package abstract_factoryimport "design/abstract_factory/impl"// 零售订单工厂type RetailOrderFactory struct {}// 实现零售创建订单func (*RetailOrderFactory) CreateOrderFactory() ICreateOrder { return &impl.RetailCreateOrder{}}// 实现零售补单func (*RetailOrderFactory) SupplementOrderFactory() ISupplementOrder { return &impl.RetailSupplementOrder{}}
package abstract_factoryimport ( "testing")func TestOrder(t *testing.T) { // 创建渠道订单 var factory IOrderFactory factory = &ChannelOrderFactory{} m := make(map[string]interface{}) m["price"] = "2.33" m["sku"] = "S343" factory.CreateOrderFactory().CreateOrder(m)}
上述关于if else与抽象工厂设计模式的比较,在此不作赘述了。
多思考,多动手,定能理解。