idea实现抽象类的所有抽象方法_go设计模式:抽象工厂方法实现多渠道的订单服务...

摘要:

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。

然而,抽象究竟是什么?

每个人的理解都尽不相同,我个人的理解是:抽象=格局。

认知,决定布局。

订单服务提供的接口,众所周知的有创建订单,补单等。就拿创建订单来说,单一的创建订单不需要考虑太多的规则,但若是遇到多渠道,每个渠道对创建订单有不同的要求,又如何来实现呢?正文部分将分享,分别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)}

39d086a1dab2281c57cd1585dbdad54f.png

上述关于if else与抽象工厂设计模式的比较,在此不作赘述了。

多思考,多动手,定能理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值