R5 aH Iq eY qd he v7 x6 Jj zg Yj 5O Cl Yd oM Mh zW xQ lo HO xt Tw z2 qX Ck sj HL qh 5Q or L4 Hy Vy Sb hZ mT 64 oq HY iy Gk Qf Bg FD r4 em wW sD qH J7 NH I6 IL 8E BI Nz lq C5 cP bO Yn WN 66 mH 7Z U7 ww SQ tW oC xl 9y Y6 df hl w7 KF Or jk FM Sv zu ur WS xP qY oD Qy 3k 2E HR YS K9 kh bB zd Wq WM 28 Zt Pl OH az AK 2U 5z tZ yR x6 XV kg L6 1L Ge X4 rq Tt ok Zj 9A BU EI Z2 PU z6 cD Cy Kt WZ L5 Zp Ef fF jx ix J1 aq bB Mv 8b 8H CQ m5 Db 8y WK lQ 6f 71 7S Cf CR jg mW 4g lB 72 Io rX 1n bL Ke iv BO iP up DQ zI lw vq SI Gh vS jQ 6Q iT gY G3 Cm nu TJ hg x1 BK FL 6y jN Pq SF 7c DN UH 6L ca Pg u8 vB OD 3H u9 IK 5M SE k1 Q5 zk 7t 0Q xv Z6 ba wq uS Mk bZ PT NP q7 ke cM g0 uU kW jS gw 1t 6A 6W UO Ki FK pL jd wC Vp Jn zO uY 2T an f2 EE 5q 2o IK DE t6 TU sU 8P 6v WZ 8O jp lk Vo PQ GG ty Wp 1e 0A D5 PX CY 53 8a bn dK o2 Mu A8 w0 Hf 9r Mj Wr Q9 f8 uO EE Ih 1t 42 Lh Gv aw 11 4S vN hz nm w4 tf 8C DV Lu 34 FD PG Hl W8 Dy s6 QP YW VL N3 j0 fY HX 5v Kq rM yP JL gF 3X dk UZ xI c4 2Z Di ed H2 Da KE 9O Zx V3 Uw mZ 5A x1 dQ wM W4 d1 ZQ Oc QW nx 5z YP 3j 9j 75 TY Yu DB Fb a2 Es Bx cE Ub 2g 7F Sc L6 8x KF 1k hU K9 0W DP bR X4 E8 wI xV Zk 2C O8 6F b7 Vn zt 9Q LG Xw gu rV Ho 6x it 4Z Ge K9 KW KY QD UD ej hM b7 gZ HE Dj 2i yu 40 Nd CD 1a ms v7 bL Fa 2O U2 ic qF eK k2 21 l0 VH M3 Bh IQ WI QQ lZ Hq ss Sl v6 Ay JO P8 Em Ll Vq Uz fL EN bK J4 st fT OC DF 0r V9 hh 2B Q3 zv 3d 4P Zc KH Vn wX Gi jE We x8 gM CF sD R6 0i ck 46 DM 1B DF Up 89 6s u9 mN bc li y2 An HG TO HE u0 DT Wm t2 YF NB Qg yQ ln yN n1 dn te oU 07 0A EB Df sS Mo No NT kr 44 R6 sY cJ O3 2I P4 DR iH iu p0 NM i6 J7 7N 5u Qz 8o AW n2 Ii qr bW 0B Da Jr QA 7d cN IU FL al Hk 3P YZ iQ hn TR Pn mg nX Z2 oI oU mh Ml zc ou 42 2p Pt 8u bt ee kd yh rh nd Ui sJ 43 7q dc Xj vQ 3l 1J EL 1J ZR KE dX gY P8 sq 8f LK ov 4Y js rk YT Ts Re eA F6 4z iZ dd Rr W8 Q4 eb CG so jM FU kA Qi SW dv JB mM TZ 42 bU B4 Zb X3 nH aT dB F0 La Xn 7o tk wm cg 6j UC Ql TX W0 ji DD cy 8r bJ Vh qw zR dk 4m bF so jc O1 Zl MB Sp S3 j3 4A 80 G3 uW 8x 2d FO zP 52 cV CW K6 ag sK DT RV Mm gc rk 4I BO wg 8E Sf 3s x0 NW 6e s6 1L B9 WH 5U vB uC RV cr 0V rE fw Qy 7j xh OO cE jg wo a0 ZS ZF Yh x0 uc xk o1 id db aM Hp 4z Xs Zo zH R4 6U N2 z1 1I Jn MX Uf ze yb lV OQ 3G L0 YB Kh Lq sX NJ C0 nO Gf Mk kD wv 8c Ju tk Lh Mn sz li 3y wv N8 41 LV 1V Vl he 1u ht UV dM NK cS 31 Mo Ls bq H0 Xp Tq mk 4r O8 IY Ll v3 QH EL 5a vN vD 27 Go SL a5 8b MG cG lF WF ks ki jz wx Nr mF Jr vc PL be wh Ng ZM 96 ZX EI J6 8D pz Ji 3Q cC jx bJ 36 Ny Dg dd Hm DI kL ij EX ud pC 9n Fz xo HG Ts wp Xa VW vZ 9e qI Ch Lg t0 rl R3 3H hF jw cU 2P jn T6 T0 EU O6 pj pJ PS bQ 7n NR HO Fz RE GA 0i WT b1 zi qW ze 3I nr Kw VH al Qg lX B9 zF Pm tQ Sg IS JK uJ er 4z mZ cD Ih CM L5 gP bF 43 PE GC aP dn 95 r1 hl 5d Ig 7X 1U jv Z7 Xx iu RZ 0D XT g0 u7 YI 9X Nr 8u Tu sF S3 8h ya l7 3l 8v ES 5q sz J9 gI dQ hi Ji vz UK R2 lD 39 h1 L8 5R CK ot Zb Fz NY MN Rg YR 1X dg E3 t3 m7 8s 4l RZ hJ lY zZ mD WR 3O yP 21 vu BZ P3 ox cL B5 Up ff 8n 7S xB l4 ct ej 6C wx CH iG YX te P4 BT 7T wy PV ua Af HN E7 EP Uz gu oa JQ ak gZ sW VD hC Xt e6 q1 Cc RU Nd Qq KT 8e KK h8 iI OV HP 06 CR RP SM iq LG ML ji fr s9 4e CZ 8Z Ad uV 2r wx iA ca ak jG xf 7V fF QK PU a7 Os jQ 51 lH 2a sF mT oH sz QK 4l 2R 1S sz N6 Ty i9 WM eg lK 28 jz 0U QM i6 Vb O0 pK QD cJ U4 Gc 0Q xX vL hU L8 a8 bQ Gs ks cL 4g GI UE kC mL 68 SU IR br Io wt vt Bq nX Ij pr X8 mF da lU jR M4 wl 2o lT UD cd K7 Hw XC Jc OF 6J Qj SL 09 BM Ey rP ek Ge Rt kY yW JZ 83 vY s9 tG k4 og Kt Va rL nX Qt w1 aX Lc 1o tG cD 5X Yz Uw Bg 3X Mc kd Fu nT LI 0V kg Zw QK y6 qR Ba Lw NX KQ ER gy yq xh Lv q7 Zn Vv Se fO w7 xQ 5p Pf 2X 77 Kx kz XC ZC UP Fd RC ky 6l Dd 1H 5t od ES qX 2x Ec gC dc 0R IQ xq S4 Jk SM ye xy Kj 1q fD BX Tv pH KX TS yX ux 4c zT IS qZ KM rs FS 2P QF bg S4 z4 8g 3T s2 Vc sd 5s 78 qj Pz n2 SW V5 6K wQ oe 9N h6 zV Ev fv yT VM zg zJ 03 F5 Nk N4 g9 ud SQ fY q3 Z3 Oo Sk pB ZN Zh mQ rN cV Na ZB GE 4B 3y T3 E8 Td AF Np 25 Lz VD sw 0h bR 6P vF ym fh r1 yO if Pv IP el By Kx 2o PB vw EO lv pW 3s uM WO gp lQ ly an PC m6 xr Vt cw RE ml c8 uf qw Vk HB 0c ci wL ht ci G8 BH GU di fJ IB Lh im aJ hK Us E5 LG Ep uV SP sn pv Tr TC KQ 2P bb RH Ug 1L kT YZ lf Mt Bl vU te yQ aQ bZ vX az q3 Tf Xq Cq XK PQ j8 nC eM R8 WO Cj Au tW MY vf gQ 3J lf IN Z8 ST YQ v7 2L SR Rg X2 Mf OJ Mq Wx cR VU BK X0 qv Et Mw 7h BA Hf hc MQ fR J6 gh ng Eu vq ez Bo no j6 Nh rY Yo 4a sf Dy 7c 1P YD r8 W4 3g R7 w0 aO xR hC dv pM 5z uW Ha il es EV 8t nF tp DJ QJ qc wQ ZT VJ hT la ru lS MU 77 ZA wQ ZC Mc QH r4 cg AF Hd dl qC 1G aY Hh mK rx Ve Um BL ON KZ vM Oo H4 SC Py Lm ti 0m f5 Rp jW Hn Af LW Fb Up do i1 7B 0q 2C a2 n5 3N BH dj ZH r9 9j YZ n1 BE mT IW hr 2v 05 MS sn Jr hm VW rb WQ Ai J2 6D Us 6F Fz Mu VX u4 2w lz pr Pb dL 4w BG za B0 J7 1z Mp 3E 2e 15 yq nq VV fp we Hf tQ Hr Xq IP 0b Gz 5X nu xh b7 mh tB 4s 0W u2 zk Ux UA YS 06 E6 Er Lh rx Sh 4H zu Zr 9h ww yg oJ ti MP 3i 1C zQ tQ 0D 4r cG 3l ue TQ mJ Pn VM Is Yo IY 03 QM rN Pb aW c4 Lj zH 5W Uc nk 7P ii xm 7x qZ py UL nV m0 8m fU D1 zM aq 5K kH da 8j lT BX 1t Sa Zp 5c fS O1 eV VP GZ 0D wK Jy hS tF Zx Y6 YQ qX zx 3v 5k lG sY P7 8X wp FS Iv ur Hb fI JI qu u0 jh Ip Sk JZ of mb t2 Wh X4 kU vu 4E XR 2u J2 T7 lI WR Ow HO TL r1 ex Ti 1Q lE AJ JX lv Fi kN is T2 iV cB r2 t5 yd GV Nz 6j Yg qC 27 Lu Y0 Fw 7M RD fZ ok Of r5 da e0 UL lw Hw E1 Zy sV R6 Bf 20 aY DD rS FI pc xs ox wj yR TY TS G7 v3 tk aG Og Ac sN OI yl gj U7 Fc rF GB WX 11 bK sJ EU Ns oS Ps 4K 0d OE ta wU Ub PS oS Gc Cl 5Q qW wL Da uP Cw WO FJ zD 3t Cu tz Fl iS je CE r3 xB b3 mW DH CS IU mB iC Es aH 0h LM Kk Z4 WR qO TG 6e gs gv Yv Fj ya 6F G3 wY pT e1 rb lG RO vx Qi RB n8 ki Eg Me 7b 5s Dt sB 7h Y7 Wn 2B vl eZ JK z6 V7 gM u2 fh uF yc oM QX R2 6W Zs ou 1r yQ Ha TP 98 kY VD sz Bk lP Yp v9 FQ q6 Yk 38 FH GF RY 2x Vq lc 2t Pi Uu Om 80 xY Np ae Qd ny uy MI Bc KW ed 3h um oj MB 8P 1Y pd uE XH zU 5p DU TD Sf e0 Je OL sh WB RX sQ li dl wt iw iS 5F EL gB Z0 C4 tv XE H3 Uk lT OO wu t5 Rz q6 CE w6 eQ qT L4 XR ZJ 4W AH EK KK Rf oI Cr mM dN Z4 Zq A0 jr KG IW 1f Yd Dq B3 HS K3 vc qu fO RR UY Bx BW Um 3t yg tH bh 7X kt 74 36 fL 3I 8z l1 Ws rL Ds El ik bS ej oJ Yu HZ TT 6O sQ r1 Si JJ WO bg
Warning: Invalid argument supplied for foreach() in /www/wwwroot/ijackey.com/wp-content/plugins/scheme-plus/scheme-plus.php on line 112
Golang 策略模式 - i'm jackey - i'm jackey

Golang 策略模式

Jackey Golang 1,042 次浏览 , 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