菜狗U3D程序猿的积累——C#中使用的设计模式

204 阅读3分钟

设计模式目录分为创建型模式,结构型模式与行为型模式。

创建型模式:这类模式提供创建对象的机制,能够提升已有代码的灵活性和可复用性。

结构性模式:这类模式介绍如何将对象和类组成较大的结构,并同时保持结构的灵活和高效。

行为型模式:这类模式负责对象间的高效沟通和职责委派。

创建型模式包括工厂方法,抽象工厂,生成器,原型,单例。

结构型模式包括适配器,桥接,组合,装饰,外观,享元,代理

行为型模式包括责任链,命令,迭代器,中介者,备忘录,观察者,状态,策略,模板方法,访问者。

单例模式

单例模式能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。 单例的实现都包含以下两个相同的步骤: 将默认构造函数设为私有,防止其他对象使用单例类的new运算符。

新建一个静态构建方法作为构造函数。该函数会调用私有构造函数来创建对象,并将其保存在一个静态成员变量中。此后所有对与该函数的调用都将返回这一缓存对象。

单例模式适合应用场景

如果程序中的某个类对于所有客户端只有一个可用的实例,可以使用单例模式。

单例模式禁止通过出特殊构建方法以外的任何方式来创建自身的对象,该方法可以创建一个新对象,但如果该对象已经被创建,则返回已有对象。

如果你需要更加严格地控制全局变量,可以使用单例模式。

单例模式与全局变量不同,他保证类只存在一个实例,除了单例类自己以外,无法通过任何方式替换缓存的实例。

请注意,你可以随时调整限制并设定生成单例的数量,只需修改获取实例的方法。

与其他模式的关系

·外观模式类通常可以转换为单例模式类,因为大部分情况下一个外观对象就足够了。

·如果你能将对象的所有共享状态简化为一个享元对象,那么享元模式就和单例类似了。但这两个模式有两个根本性的不同。

1.只会有一个单例实体,但是享元模式可以有多个实体,各实体的内在状态也可以不同。

2.单例对象可以是变得。享元对象是不可变的。

·抽象工厂模式、生成器模式和原型模式都可以用单例来实现。

using System;

namespace Singleton
{
class Singleton
{
 private Singleton(){}
 private static Singleton Instance;
 public static Singleton GetInstance()
 {
  if(Instance == null)
  {
  	Instance = new Singleton();
  }
  return Instance;
 }
 public static void SomeBusinessLogic()
 {
 
 }
}
}
 

OutPut

Singleton works, both variables contain the same instance.

还有需要线程安全的单例书写,这里就不摘抄了。

记录一下单例模式,在Unity中有的框架就是单例模式的Manage of Managers 不知道是不是这个写法。后面将模式全部学习完,然后剖析一下这个框架的书写方法以及在小型项目中的应用。 最后补上学习链接 refactoringguru.cn/design-patt…