0%

将功能复杂的版本库拆分为功能单一的版本库并保存所有相关提交信息

阅读全文 »

C# 扩展方法, 通过.的方式执行

阅读全文 »

示例

1
2
string uuid = Guid.NewGuid().ToString();//带-
uuid = Guid.NewGuid().ToString("N");//纯数字

类图

1
2
3
4
class Student
abstract class Student
interface Person
enum Gender { MALE, FEMALE }
1
2
3
4
5
6
7
8
9
10
//方法属性
//+:public
//-:private
//#:protected
class ClassName {
+ attribute1 : Type1
# attribute2 : Type2
- method1() : ReturnType1
+ method2(param1:Type1, param2:Type2) : ReturnType2
}

类之间关系

泛化关系

继承非抽象类
继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示

1
2
3
4
5
6
7
8
//B继承自A
class A {
+ method() : ReturnType
}
class B {
+ method() : ReturnType
}
A <|-- B

实现关系

实现关系表现为继承抽象类

1
2
3
4
5
6
7
8
//B继承自A
interface A {
+ method() : ReturnType
}
class B {
+ method() : ReturnType
}
A <|.. B

聚合关系

与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在

1
2
3
4
5
6
7
8
//B聚合到A上,或者说A由B组成
class A {
+ method() : ReturnType
}
class B {
+ method() : ReturnType
}
A o-- B

组合关系

1
2
3
4
5
6
7
8
//说A由B组成
class A {
+ method() : ReturnType
}
class B {
+ method() : ReturnType
}
A *-- B

关联关系

描述不同类的对象之间的结构关系
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示B知道A,但 A不知道B

1
2
3
4
5
6
7
class A {
+ method() : ReturnType
}
class B {
+ method() : ReturnType
}
A <-- B

依赖关系

一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化
一个对象在运行期间会用到另一个对象的关系
应该保持单向依赖,杜绝双向依赖的产生

1
2
3
4
5
6
7
class A {
+ method() : ReturnType
}
class B {
+ method() : ReturnType
}
A <.. B

Model(模型) - 模型代表一个存取数据的对象
View(视图) - 视图代表模型包含的数据的可视化
Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开

阅读全文 »

设计模式是众多软件开发人员经过相当长的一段时间的试验和错误的总结

目的是使程序 可维护, 可扩展, 可复用, 灵活性好

阅读全文 »

给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子

阅读全文 »

用于减少创建对象的数量,以减少内存占用和提高性能
运用共享技术有效地支持大量细粒度的对象
在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建
用 HashMap(Hashtable) 存储这些对象

string 运用了Flyweight模式

阅读全文 »

用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理

阅读全文 »

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了

阅读全文 »

请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令

阅读全文 »

将抽象部分与实现部分分离,使它们都可以独立的变化
需要多角度去分类实现对象, 而只用继承会造成大量的类增加, 不能满足开放-封闭原则时, 就应该要考虑用桥接模式

适用于一个类存在两个独立变化的维度, 且每个维度都需要进行扩展

阅读全文 »

将一个类的接口转换成客户希望的另外一个接口
主要解决在软件系统中,常常要将一些”现存的对象”放到新的环境中,而新环境要求的接口是现对象不能满足的。
1、系统需要使用现有的类,而此类的接口不符合系统的需要。
2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
3、通过接口转换,将一个类插入另一个类系中

DataAdapter

阅读全文 »

当一个控制对象状态转换的条件表达式过于复杂时, 将状态的判断逻辑转移到表示不同状态的一系列类中
当代码中包含大量与对象状态有关的条件语句时, 使用状态模式

阅读全文 »

定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。

阅读全文 »

使用多个简单的对象一步一步构建成一个复杂的对象
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示

阅读全文 »