https://github.com/HaleyLeoZhang/blog_v3
为了实现 高内聚,低耦合 、易维护、易扩展的工业级代码
以下将从 定义
、场景
、解读
这几个方面来讲解
主要目的是为了实现面向对象中的 多态
,即 一个接口实现多种逻辑
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法
比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法
用户第三方登录
分为两个动作
几个类的主要逻辑相同,只在部分逻辑的算法和行为上稍有区别的情况
策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;
在 Service
层,统一输入输出(外部关注点,抽取的是同一接口的不同实现)
app/Services/OAuth2/BaseOAuth2Service.php
见 图 001
图 001
示例,实现 Github
用户信息接入
app/Services/OAuth2/GithubOAuth2Service.php
见 图 002
图 002
其对应 ApiService
的实现
app/Services/OAuth2/Github/ApiService.php
见 图 003
图 003
同理,扩展其他Oauth2方式的QQ、Sina用户接入
对外只用实现 get_third_login_url 、get_third_user_info 这俩方法即可
在仓储里面 只用通过外部传入 表明第三方类型的参数,实例化不同的类即可
app/Bussiness/OAuth2/Logic/ActionOAuth2Logic.php
见 图 004
图 004
app/Http/Controllers/Common/OAuth2Controller.php
app/Bussiness/OAuth2/OAuth2Bussiness.php
app/Bussiness/OAuth2/Logic/ActionOAuth2Logic.php
app/Services/OAuth2/BaseOAuth2Service.php
app/Services/OAuth2/GithubOAuth2Service.php
app/Services/OAuth2/Github/ApiService.php
先说说
普通工厂
模式
可以根据类型创建不同的策略对象
以此实现面向对象中的 多继承
如何与之结合
使用 策略
模式,我们统一定义了不同场景下需要统一实现的业务功能接口
也就是说,现在我们实现的 Github
、Sina
、QQ
第三方登录服务的流程是统一的
一旦确定用户是哪个服务,我们直接调对应服务就行了
所以我们在获取用户服务功能类的时候
返回不同的类就可以了(见app/Bussiness/OAuth2/Logic/ActionOAuth2Logic.php
)
这就是 简单工厂
= 普通工厂
+ 策略
定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户
需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数
加密函数:对称、非对称加解密
功能有重叠的部分,但是各自功能可以扩展开来
这些新加的代码装饰了原有类的 核心职责或主要行为
等待更新
评论列表点此评论