把书读薄 | 《设计模式之美》学习导读 & 面向对象(下)

简介: 设计模式某些概念比较抽象,认真看完有时似懂非懂,往往没过多久就忘了,在实际设计与编码中,也不知道如何下手,所以需要落地,想办法加深理解,阅读开源项目,应用到项目中等等。 本文是 学习导读(3讲)和面向对象(11讲) 的浓缩总结,二手知识加工难免有所纰漏,感兴趣有时间的可自行查阅原文,谢谢。

⑩ 如何对一个功能做面向对象分析


面向对象主要分析对象是 "需求",因此,面向对象可以粗略地看成 "需求分析",给到的需求一般都是不明确的,首先要做的都是将笼统的需求细化到足够清晰、可执行。我们需要通过沟通、挖掘、分析、假设、梳理搞清楚具体的需求有哪些,哪些现在要做的,哪些是未来可能要做的,哪些是不用考虑做的,将抽象问题具象化,最终产生清晰的、可落地的需求定义。


接口鉴权功能分析例子演进(从最简单的方案想起,得出可行解,然后再优化引出更优解):


  • 用户名+密码认证,给允许访问服务的调用方派发一个(AppID和Key),每次请求带上,微服务接收到请求,解析出AppID和Key,与存储在微服务端的数据比对,一致说明认证成功,允许接口调用请求,否则,拒绝接口调用请求。


  • 明文传输 容易被拦截,对密码加密(如SHA),一样会被截获,不发分子可以携带拦截的加密key和AppID访问我们的接口(重放攻击);


  • OAuth验证思路,调用方将请求接口URL、AppID、key拼接在一起,然后加密算法,生成一个token,调用接口时带上。服务端根据AppID从数据库取出对应key,通过同样的token生成算法,生成token,然后与传进来的比对;


  • token固定,拦截到了还是可以进行重放攻击,可以对 token生成算法进行优化,引入随机变量,让生成的Token都不一样,比如加上时间戳参数加密。将token、AppID和时间戳传到后台,后台验证时间戳是否在一定时间内(如一分钟),小于一分钟,说明token没过期,走一遍token生成,跟传入的token比对;


需求分析过程是一个不断迭代优化的过程,不要试图一下子就给出完美的解决方案,而是先给出一个粗糙的、基础的方案,有一个迭代的基础,再慢慢优化,这样一个思考过程能让我们摆脱无从下手的窘境。


⑪ 如何做面向对象设计


  • 划分职责进而识别出有哪些类;


  • 定义类及属性和方法;


  • 定义类与类间的交互关系;


  • 将类封装起来并提供执行入口;


⑫ 类与类间的相互关系


UML统一建模语言中定义了六种,我的记忆口诀:鸡湿衣冠剧组 (也可以自己编),继承、实现都基本知道,后面四个只是 语义层次 的区别,两个类的相关程度:依赖 < 关联 < 聚合 < 组合


  • 继承/泛化 (Generalization)


子类指向父类,或子接口指向父接口,用空心三角箭头实线表示;


  • 实现 (Realization)


类实现接口,重写相关方法,用 空心三角箭头虚线 表示;


  • 依赖 (Dependency)


具体表现:局部变量、函数参数、返回值,用 实心三角箭头虚线 表示,从使用类指向依赖类,示例如下:


网络异常,图片无法展示
|


  • 关联 (Association)


具体表现:成员变量,用 实心三角箭头实线 表示,箭头指向被关联类,可以双向,一对多或多对多,示例如下:


网络异常,图片无法展示
|


  • 聚合 (Aggregation)


具体表现:成员变量,不过关联是处于 同一层次 的,而聚合则是 整体和局部,比如社团与小弟,社团没了,小弟还能去别的地方搞事,用 空心菱形箭头实线 表示。


  • 组合 (Composition)


和聚合类似,只是程度更强烈,共生死,组合类负责被组合类的生命周期,比如社团和大佬,社团没了,大佬也就不复存在了,用 实心菱形箭头实线 表示。


根绝上述关系列一个简单的UML类图:


网络异常,图片无法展示
|



相关文章
|
3月前
|
设计模式 数据库连接 PHP
PHP编程中的面向对象与设计模式
在PHP编程世界中,掌握面向对象编程(OOP)和设计模式是提升代码质量和开发效率的关键。本文将深入浅出地介绍如何在PHP中应用OOP原则和设计模式,以及这些实践如何影响项目架构和维护性。通过实际案例,我们将探索如何利用这些概念来构建更健壮、可扩展的应用程序。
|
5月前
|
设计模式 存储 算法
设计模式学习心得之五种创建者模式(2)
设计模式学习心得之五种创建者模式(2)
45 2
|
5月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
40 2
|
5月前
|
设计模式 安全 Java
设计模式学习心得之五种创建者模式(1)
设计模式学习心得之五种创建者模式(1)
38 0
|
5月前
|
设计模式 数据可视化 程序员
设计模式学习心得之前置知识 UML图看法与六大原则(上)
设计模式学习心得之前置知识 UML图看法与六大原则(上)
44 0
|
6月前
|
设计模式 安全 Java
【JAVA学习之路 | 基础篇】单例设计模式
【JAVA学习之路 | 基础篇】单例设计模式
|
6月前
|
设计模式 算法 架构师
【搞懂设计模式】设计模式与面向对象原则
【搞懂设计模式】设计模式与面向对象原则
63 1
|
5月前
|
设计模式 存储 Java
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
JavaSE——面向对象高级二(2/4)-final关键字、常量、抽象类(认识抽象类、抽象类的好处、应用场景-模板方法设计模式)
26 0
|
6月前
|
设计模式 安全 Java
【设计模式学习】单例模式和工厂模式
【设计模式学习】单例模式和工厂模式
|
6月前
|
设计模式 算法 程序员
Python从入门到精通:2.1.3深入学习面向对象编程——设计模式的学习与实践
Python从入门到精通:2.1.3深入学习面向对象编程——设计模式的学习与实践