Blog ~Version 3.0 设计概要(设计模式篇)

2018-11-23 16:17:41 个人作品 478 0

项目地址

https://github.com/HaleyLeoZhang/blog_v3

为什么要用设计模式

为了实现 高内聚,低耦合 、易维护、易扩展的工业级代码

设计模式

以下将从 定义场景解读 这几个方面来讲解

策略模式

定义

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法
比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法

场景

用户第三方登录

分为两个动作

  • 生成跳转到第三方的链接
  • 回调时,通过 access_token 获取我们用户信息
适用场景

几个类的主要逻辑相同,只在部分逻辑的算法和行为上稍有区别的情况

关注点

策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;

解读

Service 层,统一输入输出(外部关注点,抽取的是同一接口的不同实现)
(app/Services/OAuth2/BaseOAuth2Service.php)

示例,实现 Github 用户信息接入
(app/Services/OAuth2/GithubOAuth2Service.php)

其对应 ApiService 的实现
(app/Services/OAuth2/Github/ApiService.php)

同理,扩展其他Oauth2方式的QQ、Sina用户接入
对外只用实现 get_third_login_url 、get_third_user_info 这俩方法即可
在仓储里面 只用通过外部传入 表明第三方类型的参数,实例化不同的类即可
(app/Repositories/OAuth2/Logic/ActionOAuth2Logic.php)

走读顺序

app/Http/Controllers/Common/OAuth2Controller.php
app/Repositories/OAuth2/OAuth2Repository.php
app/Repositories/OAuth2/Logic/ActionOAuth2Logic.php
app/Services/OAuth2/BaseOAuth2Service.php
app/Services/OAuth2/GithubOAuth2Service.php
app/Services/OAuth2/Github/ApiService.php

装饰器模式

定义

定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户
需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数

场景

加密函数:对称、非对称加解密

适用场景

功能有重叠的部分,但是各自功能可以扩展开来

关注点

这些新加的代码装饰了原有类的 核心职责或主要行为

解读

等待更新

仓储模式

单例模式

注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处