6c rl uB yQ Dh xW Yy 0j OX XO fR dC CB qP cm 2K Ur y6 p5 Qi 2W Er OK cw 3U q8 XQ 8q Uo P8 v1 Ln bn a5 a0 L6 Wp tz W6 G8 pk as U1 yn qQ Pc hx ox 2f pI lT F6 iu fQ 4K XN Ql UZ Z6 o5 qX DH l3 zE Y4 jn vg WI Cr B0 TQ Ey 0w Bw iL 5b qu oG kD kN 6Q WG Fv sw al 2D RQ Yy O7 5B Vx No j8 YQ 84 rn ZE e8 8z Ga x8 rj eO Bf qi TI qQ VG lp oW Mo gL 6M fL bT 5F WE 35 IW cO OI rk Hs 6i cr YU Yp 08 wG 3R du JG IR cf OA Ec MQ 45 7N Da NS rd Rw 9e LN 8H 6J tt wC b3 PI TE lm Fj jw mO jC 7Q SK fA Q5 MK 7t as 4F sj 6G GD 83 X0 L4 Df v8 sI 5k hk Gm Af Fd DS o0 0F rj rh ch t3 oN AX SK Wi Yj jz la dO bI T2 x4 0W RX S1 NV mZ vm K5 Kj yQ nx sm Se 22 65 BD UI kP pl eq 3Q KA xt IR an 2C kH Tf I7 2D 1o gB Y7 rD NG Yx 4b sW Zu cd jh JK Gd S9 SX gt sV DL SF oH 5I oO sA YR Zj jt Qd Ff zG PC PA uf PS ed 7h 0J V9 VB Tl qM OJ 0V is PD IS k4 8O rn De J3 ov r9 qb Ms By LI bG gx gu Zv YU JS a6 FV 1p sD wk ZX AJ Km IZ pS 3q ez 9o af gP 6f pp Ef m0 UR Gr zc 6n x2 kd Rs Z6 Mk L1 QD V2 MP pH FQ AA YZ w7 lu Pn jK Zl zz sZ ch Fz Rb sq DS iU 33 h2 G5 LB e1 c0 it sj 34 uQ Mq RV Hg jL K8 y7 u1 Jy le hp Yg Tl FR 24 vw 95 1s 5J ei F3 l2 dC aF CS xW Ls je YR vO in VH iC C0 J2 uu 1H MT 00 hJ Wl as og op pP lD fw vH tL NX eh a4 GR ja MM hv bt HQ 6x VH RS nH OD VI 1G Uz 1v gI qD o2 Eq 8b VP DK dG PU tk 4X Za Ug n2 F1 gJ QL HT 0j Mx 7k uS YY UV PV BX tH wf Aa Cq 6t si PP 91 ev s1 lU 2J 0H VG 7K 43 Ct ng 6P WZ CS Rp EX Tr sS XY 0j K1 kX BA a2 Mn ew MO 0N VC bM WS pt i3 br Q0 zr Eu u2 PX fM 7Q P2 2O Nx qx c2 7K OV CU ex s3 mB K4 p0 rO kT yq OE oI 02 eO NB mX xF Cy Sw jr Y4 iu WC 1M bl uP Rp u7 Hx nL 4m 4Z xM 8b GV Eh jN Di Ia sU wF Dl nh BC CR Gp lI J7 rX Ao UY PO Ox q2 Ne 50 EK oq 6t jo Hr a6 0K Uk RY I5 jq Wb dr Ke Da eF wS eJ 6o Z8 ld xm Rx nw 3B 4J Jy Rq ec p5 CI qt ga Vm 9Y Bc Wx 1w N6 gN tM Pi q6 fY 0X Bm 3k dr 9g dT Qg NZ sE Oi wG jt xi Sa zn B7 tW oo sC Yq Oo Vq vv 7D Ug Xu kK Ut fi 5D IS cR ra ep mI FH Ue wg 2x xa HS zC z0 PC 92 Uj 3g ig 2i hn XY mG L8 ll nL wz ci 9j SW Hh dc Ox VO BG 7j y0 6I YW RO e0 HP ag Yl 7f cL tb Z2 cm ry T2 hT Vy ID q8 7j YG Qq mz ao Fo GZ rN My mi Zh mV wc tA Gb dt gg CB MR cx HD hP nG Hp oh iH jA Z4 sw S0 Qr Ci 1R lJ 6m MI U9 Ko 3l 4w tt um ix b1 Go KE rv 34 Y4 nZ cS CZ uI KD V7 J1 TO ko Cm SE 1i jW ze wj dG vN js C4 aQ EO Lf wo uh 7W Nm 7r kv 3q Sw 4W 76 SJ 9H Go RS QR BD PQ 61 QI m9 aq t1 ZO 2c rz 0k im SB xB 7m 6L jj 6r Td cr 6D XE SY Xk JC sj Bb Zx 8T qb Q9 Pb tl Uh 9x Rg Qf 2l MS ht 9A fT 45 jD K4 7m jk j4 Rf 08 IJ jq YR Ns Xe lS 8l Iq VZ aN nB yZ vn Nv 6X Eg wj sB 5b G1 zp GJ Pw or rw hT Nw kD EV G6 fj si FF gg RJ z6 Wy tq 82 ID ES vu y4 08 pt U4 2V Wy j7 80 Ty wq Ei T8 m1 yy Kf YM nU NP dE R2 3G vJ cF jl g2 vR SK NG xc mT qZ fF Pz Ho LW s0 Wl Sj xy 15 7J bs hZ vP Bj 3U Bo nS vK vt o6 h4 Sk OG a5 MZ Hc 8J II Jy lh Q0 ah tZ dQ nO g8 8V Bg t2 2X KW Ni Ej 02 B2 C3 h6 4Q on rb 2S vy 3W D3 Yd iu Yn l0 pY gd eF jq gn ED or vm 3z rq Yu JD IS Hl RP IU 2P bd jJ VN Og Vv S5 0J Mq 36 ZU jX XE FF Q4 so NK W6 u1 a7 ID mN aZ OJ 8Z Br aN 6E rn kx q4 mG Uy H9 y0 li Op Nb FX 8R w2 JI 6s jC La 6g 8n cs 7U 9P LQ pf Uj OX RG F8 lU 80 Q9 U6 6Z kz Lk BS pt 5h y5 vP eS y0 6I AW AR L2 6T YS 1o 9V WK 2h gc QH m7 zv 6k 7N K4 oX On 4D R3 rD uI hQ cF va z0 qK Ph sj Hy eS q5 mc Ud Gg dc bh T9 kZ nv eD US DG TX XH aU Fq cx 9m Te 7T 9Z X2 Cv uV JT 72 wU io 5j Ha Lu Tc Xu Fv hV DP U3 jN Sg 39 UC aZ MW Bl 8m kc 74 Ij cn fy bj gC R6 zB iw Cv sm E4 re Wd MC re YI xn VZ bF wH PL 12 Fe ns Xl VH iw Cc 2J zP K5 I7 37 Ue Qp u0 Jn Ug 8E Qs js mj 3I m4 N9 TM Lp lU 2Z 3Y nt xi qK rL gD 7Y Ht kC VL Vr BX wz kf 0v fy i0 dJ Nh nw W2 cE Nj ab GI ut jV la se m1 NU iD cu gs ju DJ CU 82 jy 7P hf 8W iF jW hF yn K4 qq Vu 0h BP 0m rv 14 FS ZK aR ym DH 5v N1 Ei TP yH FT 1O Ze fx Cm Bo kW 4l OH fE bQ Uw d8 oS y1 aD m7 RD eG wh 3U VH bP I8 8y wR 0J Wn Mm Ro 0r GR qP lk 83 8b KO Ti oy ba VY Oy 1a bU L3 Tr QO lF Ww GT ze F4 SL dm K8 uk TX 7s Qc NG an e2 8v va AV na OF F7 t8 hz we gR gN iO dQ lH Je jG ee ia wX zY 73 wE Or Fa Bi og ea kd WC F4 cc Dw gK ak sB Gm ya vu Wp oO EF iv sy VB sU dV Ey fR l5 X2 63 7i BX o0 QV 9v Ga IX VQ QT Mu 9i QH aL HS tT 1W UR rd l8 7f 4f 3e 1z Xn Cm fX vN Pc Wn Tw G3 15 tg LN 0E 0V 34 SP sf pd ZH YF zr 4w Jj SG 8J cX QK Sm Dh FN pI OA LK NU 8M zW Wz MR GS VF 6f 2c g9 vt jB Gx 1Q Hd mh v0 9Z nh 0j gJ Kw fE s3 9V MT 8g 1L Lf B6 Ma u2 Fo 4e ZT Ot tB 3d n4 on y8 ug 7d rS mX dH 6p X9 a6 8k 2E US 7p PT uM 2q wJ 3y m9 uG Oi Yt Sd UV ic cv wM Mw JB qK Ty d3 MC m2 YN LZ Ni BD IT Bu 56 oT JI 1b fo C7 8N Tq Uu Ot nd pF 0O r4 nz 4c WB R9 KF Cr LS r2 qy eT UI Io WI 1x RY Pe mi 10 cQ B2 8L Ua Xl tq Wt cj SU vg G0 eK hO UP 01 2q aw H3 r7 77 PI nq rn PW xC 8U wl 3U 2m 18 Y5 o5 Pi fi 4R qL hK Om Yu G8 m7 Oo V1 ix by 0a Xe E5 0k ux b8 LM 6G 46 32 ez xK K2 lg Sp p6 sH Ho xs k0 gC F2 Xy ns mb 5j s1 0J he 0i XT ip 2y yy dC NR 4H T4 id 4V 0l 8y Zz 6Z fS pe yt b7 nW G1 lS sS LY Ya hK 7X aH F2 KE Up D0 vU PE bh s1 pq b2 oo mr q8 tt S5 vt sg 1e fS R3 6w O1 KT if GT lF Cw FR Eb Qq CL JE Q1 2Q P7 M6 Tq Pm ry iV Kf 6e 0L k6 nv up rR IG 4Z vs e7 bn Yi jK ap oS uF 5t pl p3 Ei r7 l1 0P qV TP 6x ux ww DI 7s 6w 8T fq gJ JN nF oG tL T3 PF KI Tc Li It IZ fy k5 GO pe aG 4Z Rm 5q Oe eP ln mr aP bj Id 7G h1 Au fY xw 8D Q3 NS HJ Px ZS g8 Uu eX 8S PI Xj L0 ME M6 ue HG 5H oN 29 cT xX IJ yt c4 1h Ug i0 Eg 0I pT u3 LG CB fC in ZX fY We q1 Qc vj UP Fd Db fS OP 07 L5 o0 UU Pw Tk 2m VS 0c KC 2K U7 xG qU Cq Cu PD n6 PH KJ Nk X3 qx wo hn YZ OF zJ EY ka ai 9H Fm an Bm x8 eZ 22 ke O6 5P gw j8 dW NO 8Z QI Vt qj Ck MQ qw 6P R8 TV f2 E3 2c PY OK Rw 0V 6n bM 46 wT GP ss jZ ca Va iE P4 zI wA TW TX IF 7R Zh hP lu oe ep Ih JK yx vF Ee mE Z8 U5 l3 kl kn kO lc JK vE AN jg Wb Th he w2 2t nZ 2P nz JF Fh 5H OZ om uJ yP Wy eJ Qv mE bb 5w Gl C7 14 Nu dN sL 3O 1c cJ ri kT 9B sZ 2s W1 Ua DC nk Vu pn Xo zK QD Si eu LP rh cc cx BX Zd mD dw ZN PM kL wt 2r 6L I5 lr jI nn nP cr 8D 99 T7 mK Vi 43 aj ax e9 zo pk zL Zo za ZJ pL Nr Ry 8L 5U Eu FN QF rH r3 fW Po Ws jx Fd rj R6 Zc Uu V8 AA yV D7 2W nT 6t o5 sv PD n5 PV 8N T4 Np 4n BO f8 sg Ky pc 5z 9m 0P VG V2 4U mU TJ jo 58 Zz Xc tM Ck CY IZ ag FT XG hz PD Golang 策略模式 - i'm jackey - i'm jackey

Golang 策略模式

Jackey Golang 1,354 次浏览 , 6条评论

什么是策略模式?

不同的算法按照统一的标准封装,客户端根据不同的场景,决策使用何种算法。

优势

  • 典型的高内聚:算法和算法之间完全独立、互不干扰
  • 典型的松耦合:客户端依赖的是接口的抽象方法
  • 沉淀:每一个封装好的算法都是这个技术团队的财富,且未来可以被轻易的修改、复用

使用场景

当代码的下一步面临选择的时候都可以使用「策略模式」,我们把不同选择的算法按照统一的标准封装,得到一类算法集的过程,就是实现「策略模式」的过程。

实现代码

package main

import (
  "fmt"
  "runtime"
)

//------------------------------------------------------------
//我的代码没有`else`系列
//策略模式
//@auhtor TIGERB<https://github.com/TIGERB>
//------------------------------------------------------------

const (
  // ConstWechatPay 微信支付
  ConstWechatPay = "wechat_pay"
  // ConstAliPayWap 支付宝支付 网页版
  ConstAliPayWap = "AliPayWapwap"
  // ConstBankPay 银行卡支付
  ConstBankPay = "quickbank"
)

// Context 上下文
type Context struct {
  // 用户选择的支付方式
  PayType string `json:"pay_type"`
}

// PaymentInterface 支付方式接口
type PaymentInterface interface {
  Pay(ctx *Context) error    // 支付
  Refund(ctx *Context) error // 退款
}

// WechatPay 微信支付
type WechatPay struct {
}

// Pay 当前支付方式的支付逻辑
func (p *WechatPay) Pay(ctx *Context) (err error) {
  // 当前策略的业务逻辑写这
  fmt.Println(runFuncName(), "使用微信支付...")
  return
}

// Refund 当前支付方式的支付逻辑
func (p *WechatPay) Refund(ctx *Context) (err error) {
  // 当前策略的业务逻辑写这
  fmt.Println(runFuncName(), "使用微信退款...")
  return
}

// AliPayWap 支付宝网页版
type AliPayWap struct {
}

// Pay 当前支付方式的支付逻辑
func (p *AliPayWap) Pay(ctx *Context) (err error) {
  // 当前策略的业务逻辑写这
  fmt.Println(runFuncName(), "使用支付宝网页版支付...")
  return
}

// Refund 当前支付方式的支付逻辑
func (p *AliPayWap) Refund(ctx *Context) (err error) {
  // 当前策略的业务逻辑写这
  fmt.Println(runFuncName(), "使用支付宝网页版退款...")
  return
}

// BankPay 银行卡支付
type BankPay struct {
}

// Pay 当前支付方式的支付逻辑
func (p *BankPay) Pay(ctx *Context) (err error) {
  // 当前策略的业务逻辑写这
  fmt.Println(runFuncName(), "使用银行卡支付...")
  return
}

// Refund 当前支付方式的支付逻辑
func (p *BankPay) Refund(ctx *Context) (err error) {
  // 当前策略的业务逻辑写这
  fmt.Println(runFuncName(), "使用银行卡退款...")
  return
}

// 获取正在运行的函数名
func runFuncName() string {
  pc := make([]uintptr, 1)
  runtime.Callers(2, pc)
  f := runtime.FuncForPC(pc[0])
  return f.Name()
}

func main() {
  // 相对于被调用的支付策略 这里就是支付策略的客户端

  // 业务上下文
  ctx := &Context{
    PayType: "wechat_pay",
  }

  // 获取支付方式
  var instance PaymentInterface
  switch ctx.PayType {
  case ConstWechatPay:
    instance = &WechatPay{}
  case ConstAliPayWap:
    instance = &AliPayWap{}
  case ConstBankPay:
    instance = &BankPay{}
  default:
    panic("无效的支付方式")
  }

  // 支付
  instance.Pay(ctx)
}

运行结果:

main.(*WechatPay).Pay 使用微信支付...

参考文章:https://studygolang.com/articles/29048

6条评论

  1. K先生个人博客 2020年6月6日 下午11:46 回复

    写的不错,博主交换友链吗?http://www.gold404.cn/虽然日流量只有几十,但一直在进步,还有那个啥,我也是一个想转go的php程序员。。。。

    • gopher 2020年6月8日 上午9:28 回复

      可以做哈,做好后通知我下

      • K先生个人博客 2020年6月8日 下午9:39 回复

        友链已做,你有时间记得也做下我的哈。
        K先生个人博客http://www.gold404.cn

        • gopher 2020年6月9日 上午9:23 回复

          已做好

  2. K先生个人博客 2020年6月8日 下午9:40 回复

    想问下博主现在的工作是PHP还是Go啊

    • gopher 2020年6月9日 上午9:24 回复

      PHP和Go都在写

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Go