Skip to content

Commit 90f78c3

Browse files
committed
文件格式修改
1 parent dce1c3e commit 90f78c3

File tree

3 files changed

+46
-46
lines changed

3 files changed

+46
-46
lines changed
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
*ְ����ģʽ��
2-
�����壺Ϊ�˱����������������������������һ�𣬽���������Ĵ�����ͨ��ǰһ�����ס����һ����������ö�����һ����������������ʱ���ɽ������������������ݣ�ֱ���ж�������Ϊֹ��
3-
�����ͣ����ڶ༶�ж�ʱ������ͨ����if elseд���룬�������ᵼ���ж������Υ����һְ��ԭ��Ҫ�����жϻ�ı��ж�����ʱ�޸�Դ��Υ������ԭ�򡣶�ְ����ģʽ�ܽ���������⡣
4-
��������
5-
-- �����ơ���������������ֽ����Ϸ�У�ij�˳��Ƹ������¼ң��¼ҿ������е��ƣ����Ҫ�����ϼҵ����򽫳���������ת���������¼ң����¼��ٽ����жϡ�һ��ѭ����������������˶�Ҫ������ƣ�������ij����߿��Դ���µ��ơ�����������У�����Ϊһ����������һ�����ڴ��ݣ�ÿһλֽ�Ƶ���Ҷ����Դ��������������ģʽ�У�ְ����ģʽ����һ��ר�����ڴ�������������ʽ���ݵ�ģʽ��
6-
-- ij��ҵ�IJɹ������Ƿּ����еģ������ݲɹ����IJ�ͬ�ɲ�ͬ��ε�������Ա�����������ο�������5��Ԫ���£�������5��Ԫ���IJɹ����������³���������5��Ԫ��10��Ԫ��������10��Ԫ���IJɹ��������³���������10��Ԫ��50��Ԫ��������50��Ԫ���IJɹ�����50��Ԫ�����ϵIJɹ�������Ҫ�����»����۾�����
7-
-- ѧУ�涨ѧ�����С�ڻ���� 2 �죬�����ο�����׼��С�ڻ���� 7 �죬ϵ���ο�����׼��С�ڻ���� 10 �죬Ժ��������׼���������������׼��
8-
���ŵ㣺
9-
-- �����˶���֮�����϶ȡ���ģʽʹ��һ����������֪����������һ���������������Լ����Ľṹ�������ߺͽ�����Ҳ����ӵ�жԷ�����ȷ��Ϣ��
10-
-- ��ǿ��ϵͳ�Ŀ���չ�ԡ����Ը�����Ҫ�����µ��������࣬���㿪��ԭ��
11-
-- ��ǿ�˸�����ָ��ְ�������ԡ����������̷����仯�����Զ�̬�ظı����ڵij�Ա���ߵ������ǵĴ���Ҳ�ɶ�̬����������ɾ�����Ρ�
12-
-- ���������˶���֮������ӡ�ÿ������ֻ�豣��һ��ָ�������ߵ����ã����豣���������д����ߵ����ã��������ʹ���ڶ�� if ���� if������else ��䡣
13-
-- ���ηֵ���ÿ����ֻ��Ҫ�����Լ��ô����Ĺ��������ô����Ĵ��ݸ���һ��������ɣ���ȷ��������η�Χ��������ĵ�һְ��ԭ��
14-
��ȱ�㣺
15-
-- ���ܱ�֤ÿ������һ��������������һ������û����ȷ�Ľ����ߣ����Բ��ܱ�֤��һ���ᱻ���������������һֱ��������ĩ�˶��ò���������
16-
-- �ԱȽϳ���ְ����������Ĵ��������漰�����������ϵͳ���ܽ��ܵ�һ��Ӱ�졣
17-
-- ְ���������ĺ�����Ҫ���ͻ�������֤�������˿ͻ��˵ĸ����ԣ����ܻ�����ְ�����Ĵ������ö�����ϵͳ����������ܻ����ѭ�����á�
1+
*职责链模式:
2+
·定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
3+
·解释:对于多级判断时,我们通常用if else写代码,但这样会导致判断类过大违背单一职责原则,要增减判断或改变判断流程时修改源码违背开闭原则。而职责链模式能解决以上问题。
4+
·场景:
5+
-- 在类似“斗地主”这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新的牌。在这个过程中,牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。在设计模式中,职责链模式就是一种专门用于处理这种请求链式传递的模式。
6+
-- 某企业的采购审批是分级进行的,即根据采购金额的不同由不同层次的主管人员来审批,主任可以审批5万元以下(不包括5万元)的采购单,副董事长可以审批5万元至10万元(不包括10万元)的采购单,董事长可以审批10万元至50万元(不包括50万元)的采购单,50万元及以上的采购单就需要开董事会讨论决定。
7+
-- 学校规定学生请假小于或等于 2 天,班主任可以批准;小于或等于 7 天,系主任可以批准;小于或等于 10 天,院长可以批准;其他情况不予批准;
8+
·优点:
9+
-- 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。
10+
-- 增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。
11+
-- 增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。
12+
-- 责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。
13+
-- 责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。
14+
·缺点:
15+
-- 不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。
16+
-- 对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。
17+
-- 职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。

src/Chain of Responsibility(职责链)/demo.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
interface RequestData {
1+
interface RequestData {
22
name: string,
33
increaseNum: number,
44
}
55

66
/**
7-
* 抽象处理者
7+
* 抽象处理者
88
*/
99
abstract class Handler {
1010
protected next: Handler;
@@ -17,28 +17,28 @@ abstract class Handler {
1717
class IdentityValidator extends Handler {
1818
processRequest(request: RequestData) {
1919
if (request.name === 'yuanfeng') {
20-
console.log(`${request.name} 是本公司的员工`);
20+
console.log(`${request.name} 是本公司的员工`);
2121
this.next.processRequest(request);
2222
} else {
23-
console.log('不是本公司员工');
23+
console.log('不是本公司员工');
2424
}
2525
}
2626
}
2727

2828
class Manager extends Handler {
2929
processRequest(request: RequestData) {
3030
if (request.increaseNum < 300) {
31-
console.log('低于300的涨薪,经理直接批准了');
31+
console.log('低于300的涨薪,经理直接批准了');
3232
} else {
33-
console.log(`${request.name}的涨薪要求超过了经理的权限,需要更高级别审批`);
33+
console.log(`${request.name}的涨薪要求超过了经理的权限,需要更高级别审批`);
3434
this.next.processRequest(request);
3535
}
3636
}
3737
}
3838

3939
class Boss extends Handler {
4040
processRequest(request: RequestData) {
41-
console.log('hehe,想涨薪,你可以走了');
41+
console.log('hehe,想涨薪,你可以走了');
4242
}
4343
}
4444

@@ -49,7 +49,7 @@ class Client {
4949
const identityValidator = new IdentityValidator();
5050
const manager = new Manager();
5151
const boss = new Boss();
52-
// 构建职责链
52+
// 构建职责链
5353
identityValidator.setNext(manager);
5454
manager.setNext(boss);
5555

@@ -62,6 +62,6 @@ class Client {
6262
}
6363
Client.main()
6464

65-
// yuanfeng 是本公司的员工
66-
// yuanfeng的涨薪要求超过了经理的权限,需要更高级别审批
67-
// hehe,想涨薪,你可以走了
65+
// yuanfeng 是本公司的员工
66+
// yuanfeng的涨薪要求超过了经理的权限,需要更高级别审批
67+
// hehe,想涨薪,你可以走了

src/Command(命令)/README.txt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
*����ģʽ��
2-
�����壺��һ�������װΪһ������ʹ������������κ�ִ����������ηָ����������֮��ͨ�����������й�ͨ���������㽫���������д��桢���ݡ����á������������
3-
�����ͣ���ԭ��ķ���ת���ɾ���������࣬ת�����̷��Ͽ���ԭ��������ĵ�����ԭ�෽���ĵ���֮����ȫ���ת������������з��㴢�桢���ݡ����á������Ⱥô�����������ģʽ����������ʵ������ģʽ�������������������������
4-
��������
5-
-- ���ؿ��Կ���һЩ�����Ĵ򿪺͹رգ������ƻ��������ȡ��ڹ��򿪹�ʱ�����Dz���֪���������������ڿ���ʲô������Ҳ����˵���������ơ������Ȳ���ֱ�ӹ�ϵ��һ�������ڰ�װ֮������������Ƶ�ƣ�Ҳ�����������������Ȼ������������豸�����������֮��ͨ�����߽������ӣ�������ش򿪣������ͨ�磬������������֮�����عرգ����߶ϵ磬����ֹͣ��������ͬ�Ŀ��ؿ���ͨ����ͬ�ĵ��������Ʋ�ͬ�ĵ��������ǿ��Խ����������һ������ķ����ߣ��û�ͨ����������һ�������ơ����󣬶�����ǡ����ơ���������ս����ߺʹ����ߣ����غ͵��֮�䲢������ֱ����Ϲ�ϵ������ͨ������������һ��ʹ�ò�ͬ�ĵ��߿������Ӳ�ͬ����������ߣ�ֻ�����һ�����ߣ���ͬ�ķ����ߣ����أ����ɶ�Ӧ��ͬ�Ľ����ߣ���������
6-
-- �����������ڱ�дһ���û�������򣬸��û���������������ʮ��button��ť����Ϊ��Ŀ�Ƚϸ��ӣ��������Ǿ�����ij������Ա���������Щ��ť��������һЩ����Ա�����д�����ť��ľ�����Ϊ����Щ��Ϊ������װ�ڶ�����ڴ�����Ŀ�����У����Ǻ������ķֹ������ڻ��ư�ť�ij���Ա��˵������ȫ��֪��ij����ťδ����������ʲô����������ˢ�� �˵����棬Ҳ������������һЩ�Ӳ˵�����ֻ֪����������ť�ᷢ��ijЩ���顣��ô����������ť�Ļ���֮��Ӧ����θ�����onclick�¼��أ����Ǻܿ�����ҵ���������������ģʽ�����ɣ�����˰�ť֮�󣬱�����ijЩ���������Ϊ�Ķ�����������Щ�����������Ľ����ߡ�����Ŀǰ����֪����������ʲô����Ҳ��֪�������߾�������ʲô����ʱ������Ҫ�����������İ������Ա�⿪��ť�͸��������Ϊ����֮�����ϡ�
7-
-- �������ܵ�һ��ʵ�ַ�ʽ
8-
-- ������ҫ����Ƶ�طţ�ʵ�ʾ��Ǵ洢�����¼��������ִ������
9-
-- ����ϵͳ�е���־
10-
���ŵ㣺
11-
-- ����ϵͳ����϶ȡ�����ģʽ�ܽ����ò����Ķ�����ʵ�ָò����Ķ�����
12-
-- ���ӻ�ɾ������dz����㡣��������ģʽ������ɾ�������Ӱ�������࣬�����㡰����ԭ�򡱣�����չ�Ƚ���
13-
����ʵ�ֺ��������ģʽ���������ģʽ��ϣ����������װ���һ���������������
14-
-- ����ʵ�� Undo �� Redo ����������ģʽ�����������ܵı���¼ģʽ��ϣ�ʵ������ij�����ָ���
15-
��ȱ�㣺
16-
-- ���ܲ����������������ࡣ��Ϊ�ƶ�ÿһ�������������Ҫ���һ�����������࣬�⽫����ϵͳ�ĸ����ԡ�
17-
�����䣺
18-
js��������Ϊһ�ȶ��󣬿��Ե������ݡ������ģʽһ����js���ѽ�����ģʽ���������С�
1+
*命令模式:
2+
·定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
3+
·解释:将原类的方法转换成具体的命令类,转换过程符合开闭原则,命令类的调用与原类方法的调用之间完全解耦。转换的命令类具有方便储存、传递、调用、管理等好处,所以命令模式还可以轻松实现命令模式、撤销操作、宏命令等能力。
4+
·场景:
5+
-- 开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制排气扇或者其他电器设备。开关与电器之间通过电线建立连接,如果开关打开,则电线通电,电器工作;反之,开关关闭,电线断电,电器停止工作,相同的开关可以通过不同的电线来控制不同的电器。我们可以将开关理解成一个请求的发送者,用户通过它来发送一个“开灯”请求,而电灯是“开灯”请求的最终接收者和处理者,开关和电灯之间并不存在直接耦合关系,它们通过电线连接在一起,使用不同的电线可以连接不同的请求接收者,只需更换一根电线,相同的发送者(开关)即可对应不同的接收者(电器)。
6+
-- 假设我们正在编写一个用户界面程序,该用户界面上至少有数十个button按钮。因为项目比较复杂,所以我们决定让某个程序员负责绘制这些按钮,而另外一些程序员则负责编写点击按钮后的具体行为,这些行为都被封装在对象里。在大型项目开发中,这是很正常的分工。对于绘制按钮的程序员来说,他完全不知道某个按钮未来将用来做什么,可能用来刷新 菜单界面,也可能用来增加一些子菜单,他只知道点击这个按钮会发生某些事情。那么当完成这个按钮的绘制之后,应该如何给它绑定onclick事件呢?我们很快可以找到在这里运用命令模式的理由:点击了按钮之后,必须向某些负责具体行为的对象发送请求,这些对象就是请求的接收者。但是目前并不知道接收者是什么对象,也不知道接收者究竟会做什么。此时我们需要借助命令对象的帮助,以便解开按钮和负责具体行为对象之间的耦合。
7+
-- 撤销功能的一种实现方式
8+
-- 王者荣耀的视频回放,实际就是存储命令记录,再依次执行命令
9+
-- 操作系统中的日志
10+
·优点:
11+
-- 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。
12+
-- 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。
13+
可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。
14+
-- 方便实现 Undo Redo 操作。命令模式可以与后面介绍的备忘录模式结合,实现命令的撤销与恢复。
15+
·缺点:
16+
-- 可能产生大量具体命令类。因为计对每一个具体操作都需要设计一个具体命令类,这将增加系统的复杂性。
17+
·补充:
18+
js将函数作为一等对象,可以到处传递。与策略模式一样,js早已将命令模式融入语言中。

0 commit comments

Comments
 (0)