图源:虫洞栈-重学设计模式
理解:
1.将每种支付方式抽象--->Pay:里面有tranfer(),有可验证安全的对象(payMode),调用对象payMode.security()即可验证安全与否
2.就是一个类依赖另一个类中的方法,两种支付方式 都依赖 各种验证安全的手段,--->抽象:支付方式 依赖 验证安全 ---->支付方式:能被extend或implement,所以可以各自实现不同的支付方式,这样才是好的抽象;验证安全,有各种验证安全的方法,所以抽象出来的东西,要能被extend或implement,这样才能适配不同的情况。
3.最后变成了:一个高度抽象的“原型1”中,包含(依赖)另一个高度高度抽象的“原型2”,这样可以implement出不同的原型1对象,向其中传入implement 出来的 不同的 原型2对象,达到笛卡尔乘积(只记得这个了,忘了怎么表达,就是每一种情况都可以有的意思)的效果。
4.就是可以微信+脸部验证/指纹验证 可以支付宝+脸部验证/指纹验证,各种情况都可以。
5.再理解:通过将一种 多情况的service 进行抽象(抽象为安全验证),然后用第二个类 依赖 前面这个高度抽象的接口/抽象类 的对象(就是 抽象出来的支付,依赖 前面抽象的安全验证 类型的对象),后面就可以通过传入不同实现的对象(如脸部验证、指纹验证),调用对象提供的不同service,实现不同的组合。
6.最后的理解:将Wx、Zfb支付 需要的 各种安全验证(从一坨屎山中),抽离出来(解耦合),再进行抽象(父类、虚函数、接口),加入到屎山中形成依赖。以后就方便拓展、修改。
7.最最后的理解:从一个域中,抽离依赖 或 共性 或 重复的部分 或 独立的部分 或 耦合度低的部分,进行抽象,再注入抽象出的东西(后面传入此抽象具象化的东西,也会都是没问题的),解耦合-->高级依赖。
8.最后再具象一下:我需要食物,将食物 抽象成-->维生素、水等各种需要的东西,就变成了 我需要 包含维生素、水等需要物 的食物。