感谢 TurboAI对本博客的的大力赞助。 创作不易,如果您觉得有帮助,请支持LIncol29!
设计模式七大原则
- 单一职责原则 (Single Responsibility Principle)
- 开放-关闭原则 (Open-Closed Principle)
- 里氏替换原则 (Liskov Substitution Principle)
- 依赖倒转原则 (Dependence Inversion Principle)
- 接口隔离原则 (Interface Segregation Principle)
- 迪米特法则(Law Of Demeter)
- 组合/聚合复用原则 (Composite/Aggregate Reuse Principle)
单例模式
单例模式:保证进程中,类型只有一个实例
- 构造函数私有化,防止他人实例化
- 提供一个公开、静态的获取实例的方法
- 返回共用一个静态字段
类前面加sealed 密封类 字段前面加Volatile
单例模式写法
懒汉式
- 双IF语句判断加锁
private static SingletonPattern _singletonPattern = null; //创建静态变量
private static readonly object _lock = new object(); //创建锁对象
public static SingletonPattern getInstance() //提供公开、静态的对外的方法
{
if (_singletonPattern == null)
{
lock ( _lock )
{
if (_singletonPattern == null)
{
_singletonPattern = new SingletonPattern();
}
}
}
return _singletonPattern;
}
饿汉式
- 静态构造函数:由CLR保证,在第一次使用这个类型之前,自动被调用且只调用一次
static SingletonPatternSecond()
{
_singletonPatternSecond = new SingletonPatternSecond();
}
- 静态字段:由CLR保证,在第一次使用这个类型之前,自动初始化并且只初始化一次
private static SingletonPatternSecond _singletonPatternSecond = new SingletonPatternSecond();
单例有什么用?用在哪个场景
同一个实例,不能解决多线程并发问题!会有线程冲突,覆盖数据
单例就是程序只需要这个对象实例化一次
实际应用场景:
- 唯一序列号
- 数据库连接池:数据库连接—非托管资源—申请/释放消耗性能。池化资源—内置10个连接—使用来拿,用完放回去避免重复申请和销毁—控制连接数量
- 线程池
- 流水号生成器
- 配置文件读取
- IOC容器实例
观察者模式
观察者模式写法
接口
抽取出一个IOberserver接口
对象继承于IOberserver接口,实现方法
将对象放入IOberserver集合中。将集合中的对象foreach调用
事件
发送者相当于主窗体,接受者相当于从窗体