设计模式、系统设计 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

相关推荐
YGGP7 小时前
【结构型模式】代理模式
设计模式
庄小焱12 小时前
设计模式——中介者设计模式(行为型)
设计模式
庄小焱14 小时前
设计模式——备忘录设计模式(行为型)
设计模式
庄小焱14 小时前
设计模式——代理设计模式(结构型)
设计模式
哆啦A梦的口袋呀15 小时前
基于Python学习《Head First设计模式》第三章 装饰者模式
python·学习·设计模式
哆啦A梦的口袋呀15 小时前
基于Python学习《Head First设计模式》第五章 单件模式
python·学习·设计模式
季鸢15 小时前
Java设计模式之备忘录模式详解
java·设计模式·备忘录模式
摘星编程19 小时前
工厂方法模式深度解析:从原理到应用实战
java·设计模式·软件工程·工厂方法模式
何中应20 小时前
【设计模式-4.7】行为型——备忘录模式
java·设计模式·备忘录模式
suixinger_lmh1 天前
功能结构整理
unity·设计模式·c#·源代码管理