设计模式、系统设计 record part01

技术路线:

工程师==》设计师==》分析师==》架构师

管理路线:

项目经理==》技术经理


工程师:

编程技术、测试技术

设计师:

工程师+设计技术

分析师:

设计师+分析技术

架构师:

分析师+架构技术


项目经理:

时间管理、风险管理、计划管理、过程管理、成本管理、人际沟通

技术经理:

项目经理+领导能力


具备技术素质:

cpp 复制代码
高级技术人才

具备管理素质:

cpp 复制代码
高级管理人才

同时具备技术、管理素质:

cpp 复制代码
高级综合人才

参考书推荐:

head first design patterns(设计模式)

大话设计模式(Java溢彩加强版)

图解设计模式(中国工薪出版集团、人民邮电出版社)



前辈们代码设计经验,解决特定问题的一系列套路


好的、坏的设计特征

Robert C.Martin


向对的设计原则:


单一职责-Single Responsibility Principle:


职责《== 原因,应该有且仅有一个原因,引发类的变更

功能 约等于 方法

仅有一个原因,引发类的变更,

根据这个案例,如果只设计了一个类(员工类),那么,诱发类的变更就有很多原因,

比如要修改收银员的数据就要动这个员工类,要修改接待员的数据也要动这个员工类,要修改厨师的数据也要动这个员工类,所以出现了修改这个员工类会有n个原因,这就违反了SRP,

所以改进的方法是,为每一个工种设置一个类,这样,当要去动某个类的时候,只有一个与其对应的原因,

比如要修改餐服员的数据,只要去动餐服员的类就行,而不需要去管其他工种的类。

这里可以使用粒度这个词来描述职责,

多职责的粒度就是粗的,

单一职责的粒度就是细的。

DAO(Data Access Object)

把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间,
Entity层,顾名思义就是实体层,放置一个个实体,及其相应的set、get方法。

如果想要对数据库进行一些操作(比如说读取)的话,就要先写entity层
Service被称作业务逻辑层。

顾名思义,它处理逻辑上的业务,而不去考虑具体的实现
Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容
Util是utiliy的缩写,是一个多功能、基于工具的包。

如字符串处理、日期处理等,(建立数据库之间的连接),是通用的、与业务无关的,可以独立出来,可供其他项目使用


开闭-Open Closed Principle:


开闭的关键是抽象,

开闭是面向对象设计的终极目标,

开放是,对程序中需求频繁变化部分进行抽象。


里氏替代-Liskov Substitution Principles:


依赖倒置-Dependence Inversion Priciple:

依赖正置: 面向实现。模块之间的依赖,依赖的是实现类

依赖倒置: 面向抽象。模块之间的依赖,依赖抽象

在java中,抽象指的是接口或抽象类,细节就是具体的实现类。

依赖倒转的中心思想是面向接口编程(这句话的意思就是,把具体的 n 个实现抽象成 1 个接口,1:n 【 n 个实现类】到 1:1【 1 个接口】)

以抽象的基础搭建的架构比以细节为基础的架构要稳定的多,

抽象不应该依赖细节,细节应该依赖抽象

接口或抽象类,不涉及任何具体的操作,把展现细节的任务交给接口(或抽象类)的实现类去完成

september2024the26Thursday

依赖正置,一个类a去引用其他的类(类b、类c),

依赖倒置,针对类b、类c,抽象出来一个接口,类b、类c都继承(implement)这个接口,然后类a去引用这个接口,这就是倒置,

换句话说,打个比方,正置的时候,类a直接去和类b、类c吵架,倒置的时候,类a骂的是类b、类c的爸爸(接口),所以是倒过来的,是指爹骂(不是直接骂儿子,骂的是爹【引用类b、类c的爹】,让儿子自己去体会【类b、类c去 implement 继承它们的爹】)儿子,

正置的时候,类a要去挨个引用其他类,

倒置的时候,类a只引用一个接口,n多的其他类去自动继承接口,这样类a不用关心继承接口的有多少个其他类,只要这些类都继承类a引用的那个接口,类a就能使用这些个类。


接口分离-Interface Segregation Principle:


可以看到,上图中,将打电话、发短信、拍照三个方法集成到一起了,这时候,apple手机有能力使用它的三个功能,而老年机实际上并不需要拍照功能,但开发的时候是将三个功能集成到一起了,这时候,老年机用户就被迫依赖了一个并不需要的拍照方法,

解决办法:

把打电话、发短信、拍照做成3个接口,iPhone就调用3个接口,老年机就调用除了拍照以外的打电话、发电信这两个接口,

不要强迫老年机用户依赖他们并不需要的摄像头拍照方法,


迪米特-Law of Demeter:



一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,需要变动的模块的扩展会相对容易。

再举一个例子:

军队里面有元帅、军官和士兵,元帅认识军官,军官认识自己管辖的士兵。

要发动攻击,元帅不必直接对士兵下命令,只需要下命令给军官,再由军官将指令转发给所辖士兵即可。


合成复用-Composite Reuse Priciple:



上面这个例子说的是,继承父类时能拿到父类的方法method1、method2,但是拿不到父类的其他子类的方法,因此是不能重用父类的子类的代码,

举个栗子:

我在csdn'程序员胖虎'的博客里找到几个图,看起来比较好理解,如下:
继承

给继承加元素.

合成

给合成加元素,

合成的扩展性更好些。

找了一圈,'程序员胖虎'的这个似乎更贴切些,咱们先用着,有时间我再研究研究,又更好的再来更新。

再来一个例子:

来自csdn'这很张扬'的博客,下图是一个合成复用的图

下面是一个继承复用的图

再举一个例子:

一个父类,如下:

父类里有两个方法,method1、method2,

子类1,如下:

复写了父类的method2,变成了它自己的方法method2

子类2,如下:

第3个子类,如下:

复写了父类的method1、method2,变成了自己的method1、method3,

最后,用一个测试类进行测试,如下:

测试类,结果如下:

最后这个例子不太好,给人感觉莫名其妙的,不妙不妙,我再想想,等有更好的例子再来更新。

September2024the26thWednesday

相关推荐
神的孩子都在歌唱3 小时前
行为设计模式 -模板方法模式- JAVA
java·设计模式·模板方法模式
向宇it4 小时前
【unity进阶知识1】最详细的单例模式的设计和应用,继承和不继承MonoBehaviour的单例模式,及泛型单例基类的编写
游戏·unity·单例模式·设计模式·游戏引擎·框架
coffee_baby8 小时前
《 Spring Boot实战:优雅构建责任链模式投诉处理业务》
spring boot·python·设计模式·责任链模式
多喝热水-多读书11 小时前
Qt C++设计模式->外观模式
c++·qt·设计模式·外观模式
码龄3年 审核中11 小时前
设计模式、系统设计 record part02
java·设计模式
国中之林11 小时前
【qt】QQ仿真项目1
开发语言·c++·qt·学习·设计模式·ui设计
niech_cn13 小时前
超详细超实用!!!AI编程之cursor编写设计模式开闭原则实例(四)
设计模式·ai编程·开闭原则
yuanbenshidiaos13 小时前
java设计模式
java·开发语言·算法·设计模式
bobostudio199520 小时前
TypeScript 设计模式之【状态模式】
前端·javascript·设计模式·typescript·状态模式
程序猿进阶21 小时前
New major version of npm available! 8.3.1 -> 10.8.3 报错
java·开发语言·前端·设计模式·npm·node.js·并发编程