一、设计模式
1、什么是设计模式
  设计模式是一套被反复使用、多数人知晓、代码设计经验的总结。

2、目的
  设计模式的目的是为了让软件具有更好的代码重用性、可读性、可扩展性、可靠性,同时使程序间出现高内聚、低耦合的特性。

3、七大原则
(1)单一职责原则(Single-Responsibilitiy Principle(SRP))。
  简单的说就是 对于一个类A,其只负责某项职责(功能),并不是指一个类只有一个方法。
  比如某个人,其兼职了几个不同的工作,按照单一职责原则,每个工作应该都由一个专门的人来完成。

(2)接口隔离原则(Interface Segregation Principle(ISR))。
  简单的说就是 对于一个类A,不应该依赖于不需要的接口,即类间的依赖关系需建立在最小的接口上。
  比如,一个接口里面有10个抽象方法,当类A需要使用某个方法时,需要实现该接口,并重写10个方法。此时其余的9个方法,类A并不需要,按照接口隔离原则,可以将这个方法单独的抽出来写成一个接口B,然后让类A去实现接口B,此时类A只需重写一个方法即可。

(3)依赖倒置(倒转)原则(Dependence Inversion Principle(DIP))。
  简单的讲 依赖倒置原则的中心思想是面向接口编程,高层模块不依赖与低层模块,且二者均依赖于抽象,其抽象不依赖于细节,应该细节依赖于抽象。
  其中:
    抽象指的是 接口 或者 抽象类, 细节指的是 具体的实现类。

复制代码
【举例:普通的写法】
class Teacher{
}

class Hospital{
// 高层依赖于低层
public void check(Teacher teacher){ // 采用具体的实现类,只能传入Teacher类的实例
}
}

【举例:面向接口编程】
interface Person{
}

class Teacher implements Person{
}

class Doctor implements Person{
}

class Hospital{
// 高层不依赖于低层,而依赖于抽象
public void check(Person person){ // 采用接口,方便复用,可以传入Teacher类或Doctor类的实例
}
}
复制代码
(4)里氏替换原则(Liskov Substitution Principle(LSP))。
  简单的讲就是 任何父类能出现的地方,子类一定能出现,且子类可以扩展父类的功能,但是不能改变父类原有的功能。即继承时尽量不要重写父类的方法。
  比如一个父类A,子类B,且子类B重写了父类A的某个方法,在一个类C中需要使用父类A的方法时,若此时传入的是子类B,则程序可能会出错。

(5)开闭原则(Open-Close Principle(OCP),核心原则)。
  简单的讲就是 软件对扩展开放(代码提供方),对修改关闭(代码使用方),即对代码功能进行扩展时,不能修改原有代码。使用抽象类与接口对代码进行重构,当扩展代码功能时,实现抽象类或接口并实现相关方法即可。

(6)迪米特法则(Law of Demeter(LOD))。
  又称为最小知道法则(Least Knowledge Principle (LKP))
  简单的说就是 一个实体应尽量少的与其他实体之间发生相互作用(降低耦合),使系统功能模块相互独立。一个对象应该对其他对象有最少的了解,即不管你内部有多复杂,我能调用你的方法就行。
  比如:一个类A的某个方法中出现某个类B,且对类B做了一些无关类A的操作,按照迪米特法则,需要将这些操作封装在类B的一个方法中,然后在类A中调用该方法。

(7)合成复用原则。
  简单的说就是 尽量使用合成或者聚合的方式,少用继承。

4、常用设计模式分类(23种)
(1)三大类:

创建型模式(五种),

结构型模式(七种),

行为型模式(十一种)
(2)创建型模式:(强调对象创建时,如何去更好的设计)
  工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式。

(3)结构型模式:(设计更好的软件结构)
  适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。

(4)行为型模式:(设计更好的方法调用模式)
  策略模式,模板方法模式,观察者模式,迭代器模式,责任链(职责链)模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式。

回到顶部
二、UML图
1、什么是UML图
(1) Unified Modeling Language,统一建模语言,用来对软件密集系统进行可视化建模的一种语言。简单的说就是 帮助软件开发人员记录、交流的一个图形化语言。
(2)UML图本身是一组符号的规定,用于描述软件模型间各元素以及各元素间的联系。

2、UML分类
(1)用例图
(2)静态结构图:类图,对象图,包图,组件图,部署图。
(3)动态行为图:交互图(时序图、协作图)、状态图、活动图。

3、类图(常用)
(1)用于描述类与类之间的关系。UML的核心。
(2)元素:类、接口。
(3)关系:依赖、继承(泛化)、实现、关联、聚合、组合等。
(4)依赖:
  若在某个类A中使用到类B,且若没有类B,类A编译会报错,则称A与B之间有依赖关系。
  线条表示:虚线普通箭头("<",">")。
(5)继承(泛化):
  属于依赖关系的一种特例,如果类A继承了类B,则称A与B间存在泛化关系。
  线条表示:实线空心三角箭头。
(6)实现:
  属于依赖关系的一种特例,如果类A实现了类B,则称A与B间存在实现关系。
  线条表示:虚线空心三角箭头。
(7)关联:
  属于依赖关系的一种特例,如果类A与类B间有联系。比如类B作为类A的成员变量,则称A与B间存在关联关系。
  线条表示:实线(直线),普通箭头("<",">")可选。如果强调方向,则加一个普通箭头。否则只需要一条实线。
(8)聚合:
  属于关联关系的一种特例,如果类A与类B间可以分离且可以独立存在,则称A与B间存在聚合关系。比如:人与衣服,可以分离,则为聚合关系。
  线条表示:实线空心菱形箭头。
(9)组合:
  属于关联关系的一种特例,如果类A与类B间不可以分离,则称A与B间存在组合关系。比如:人与人头,不可分离,则为组合关系。
  线条表示:实线实心菱形箭头。

注:
  eclipse下生成Java类图和时序图,生成UML图,参考地址: https://blog.csdn.net/qq_21383435/article/details/79890884

众利币开发与模式设计相关推荐

  1. mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践

    在上一篇博客文章时间序列数据与MongoDB:第一部分-简介中,我们介绍了时间序列数据的概念,然后介绍了一些可以用于帮助收集时间序列应用程序需求的发现问题.对这些问题的回答有助于指导支持大容量生产应用 ...

  2. zlc源码-众利模式 全新黑金UI客户运营版:仅供学习使用

    本源码是目前众利模式的最新ZLC源码!请勿用作其他非法运营!可以学习使用!用作非法用途一切都与本人无关! 联系QQ:19198367 联系QQ:19198367 特别声明: 此源码仅供学习使用,请勿用 ...

  3. zlc源码-众利模式 全新海红UI客户运营版:仅供学习使用

    本源码是目前众利模式的最新ZLC源码!请勿用作其他非法运营!可以学习使用!用作非法用途一切都与本人无关! 联系QQ:19198367 联系QQ:19198367 特别声明: 此源码仅供学习使用,请勿用 ...

  4. 微信公众号开发(二):利用责任链和模板方法模式设计消息的处理流程

    由于微信服务器发送过来的消息分为文本消息.事件消息.图片消息.声音消息.链接消息.位置消息,处理不同的消息 需要不同的处理方式,但是基本流程差不多,所以我设计了一个处理链,不同的消息由不同的消息处理器 ...

  5. MongoDB 进阶模式设计

    原文链接:http://www.mongoing.com/mongodb-advanced-pattern-design 12月12日上午,TJ在开源中国的年终盛典会上分享了文档模型设计的进阶技巧,就 ...

  6. 如何设计真正基于通证经济落地的商业生态模式设计?

    如何设计真正基于通证经济落地的商业生态模式设计? 作者:廖国东 我一直在寻找一种不存在群体互害的商业模式,而且财富的积累也不是一个零和游戏,所以我从没放弃过探索或创造出一种通赢运行机制:只要合理的利益 ...

  7. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  8. 模式设计概述:代理者模式

    分布式系统模式 分布式相关的模式设计有大概三种模式,分布式系统与集中式系统相比需要完全不同的软件.管道和过滤器模式,微核和代理者模式. 代理者模式 代理者模式体系结构的强制条件是 组件应该能够访问其他 ...

  9. 分享基于Entity Framework的Repository模式设计(附源码)

    关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable? 这篇文章介绍的是使用Entity Framework实现的Rep ...

最新文章

  1. 增加点击量的软件_老板总吐槽销售分析报表又多又丑?你一定没用BI软件
  2. “5W1H”带你来学习JavaScript
  3. ML:MLOps系列讲解之《MLOps Stack Canvas堆栈画布》解读
  4. golang []byte 和 string相互转换
  5. 7个鲜为人知却超实用的PHP函数
  6. iPhone4 FaceTime 联通官方教程
  7. 网站html标签如何优化,网站HTML标签优化教程
  8. chrome插件 实现微博言论监控
  9. mysql json类型存储list_list存储json字符串
  10. java 错误页_《javaweb学习笔记2-jsp错误页设置》
  11. @query传参_前端框架vue中query和params传参
  12. 树线段hdu 4508 美素数(线段树)
  13. python 合并两个txt文件
  14. 论文复现:土卫六(Titan)大气参数计算
  15. java 拒绝访问_JAVA编译中拒绝访问的问题及解决方案
  16. spring mvc 配置使用定时任务
  17. 《2021政府工作报告》词云图一览
  18. 2019互联网BATJ等大厂中秋礼盒大PK
  19. 微端是什么意思?微端对服务器性能配置要求
  20. python爬取微博热搜写入数据库_python爬虫爬取微博热搜

热门文章

  1. 机器人测钢卷直径_机器人热轧钢卷喷号漆
  2. coda html5,Mac Coda 前端开发插件 F2E Tools - YangJunwei
  3. 使用ajax——ajax四部曲
  4. 国产安路FPGA 替代
  5. 【精品】轻松部署ceph分布式存储集群
  6. 【软件构造】面向正确性和健壮性的软件构造小记
  7. 育儿-《让孩子远离焦虑》书中的精髓:家长如何帮助孩子解决他们自身的焦虑问题。
  8. 腾讯云人脸验证使用方法
  9. 《海外华人写兰州国际书法展》亮相美国丹佛
  10. 莱布尼兹是微积分奠基人吗?