C产品在市场上有哪些独特优势?
- 内容介绍
- 文章标签
- 相关推荐
本文共计903个文字,预计阅读时间需要4分钟。
公司中所有类都需要使用单例模式实现,以节省资源,避免重复创建对象。但静态类也可以实现这一点,且代码更简洁。查阅相关资料,希望阐明白两者差异。
1. 单例模式: - 确保一个类只有一个实例,并提供一个全局访问点。 - 避免创建多个实例,节省资源。 - 通过静态方法获取实例,避免重复创建。
2. 静态类: - 类本身是静态的,不需要实例化即可使用。 - 类中的方法也是静态的,可以直接通过类名调用。 - 可以实现类似单例模式的功能,避免重复创建对象。
主要区别:- 单例模式通过类内部逻辑控制实例的创建,而静态类则直接通过类名访问。- 单例模式可以通过继承和多态实现更灵活的扩展,而静态类则相对固定。- 单例模式更易于理解和维护,而静态类可能需要更多代码来实现相同功能。
公司的类都需要使用单例模式实现,这个可以节省资源,避免重复对象的生成。但是静态类也可以做到这一点,而且写起来更简洁,于是查阅相关资料,希望弄明白两者的差别。
1.单例模式可以在用到的时候初始化,而静态类会在程序开始运行时初始化?
通过自己的实践,我认为这个说法是不对的。我写了下面的例子进行实验。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Class1.get(190));
GC.Collect();
Console.ReadKey();
}
}
public static class Class1 { public static int[] arr = new int[20480000]; static Class1() { for (int i = 1; i < arr.Length; i++) { arr[i] = i; } } public static int get(int i) { return arr[i]; } }
程序进入主函数时,内存是这样的
显然静态类中的arr没有被初始化,继续执行
可以看到这时静态类的arr被初始化了,而且arr值全部为0时,内存并没有变化,难道是微软做了优化?
2.GOF对单件的第一句场景解释就是“如果需要唯一实例”?
额,静态类难道不是唯一实例么?
3.单例模式,解耦?
public interface IHelloWorld { string HelloWorld(); } //然后是接口的两个实现. public class HelloWorldEnglish : IHelloWorld { string IHelloWorld.HelloWorld() { return "Hello World !"; } } public class HelloWorldChinese : IHelloWorld { string IHelloWorld.HelloWorld() { return "您好 世界 !"; } } public class People { private readonly IHelloWorld peopleHelloWorld; public People(IHelloWorld helloWorld) { this.peopleHelloWorld = CreateSingle() //这里你可以使用单例模式创建出来HelloWorldEnglish 或 HelloWorldChinese } public void SayHello() { Console.WriteLine(this.peopleHelloWorld.HelloWorld()); } }
这个代码我看完了愣是没明白解耦和单例啥关系,倒是明白了接口解耦挺好的(手动笑哭),下面大侠观点与我相同,但还是没有解开我的疑团
4.单例可以有继承,实现接口,而静态类不能
这个观点我比较赞同,如果想使用单例,又想松耦合,就用单例模式吧。
静态类比较适合工具类。
参考链接:
bbs.csdn.net/topics/390487790
www.cnblogs.com/zhangzt/p/4350556.html
bbs.csdn.net/topics/390825682
www.xin3721.com/ArticlecSharp/c13696.html
本文共计903个文字,预计阅读时间需要4分钟。
公司中所有类都需要使用单例模式实现,以节省资源,避免重复创建对象。但静态类也可以实现这一点,且代码更简洁。查阅相关资料,希望阐明白两者差异。
1. 单例模式: - 确保一个类只有一个实例,并提供一个全局访问点。 - 避免创建多个实例,节省资源。 - 通过静态方法获取实例,避免重复创建。
2. 静态类: - 类本身是静态的,不需要实例化即可使用。 - 类中的方法也是静态的,可以直接通过类名调用。 - 可以实现类似单例模式的功能,避免重复创建对象。
主要区别:- 单例模式通过类内部逻辑控制实例的创建,而静态类则直接通过类名访问。- 单例模式可以通过继承和多态实现更灵活的扩展,而静态类则相对固定。- 单例模式更易于理解和维护,而静态类可能需要更多代码来实现相同功能。
公司的类都需要使用单例模式实现,这个可以节省资源,避免重复对象的生成。但是静态类也可以做到这一点,而且写起来更简洁,于是查阅相关资料,希望弄明白两者的差别。
1.单例模式可以在用到的时候初始化,而静态类会在程序开始运行时初始化?
通过自己的实践,我认为这个说法是不对的。我写了下面的例子进行实验。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Class1.get(190));
GC.Collect();
Console.ReadKey();
}
}
public static class Class1 { public static int[] arr = new int[20480000]; static Class1() { for (int i = 1; i < arr.Length; i++) { arr[i] = i; } } public static int get(int i) { return arr[i]; } }
程序进入主函数时,内存是这样的
显然静态类中的arr没有被初始化,继续执行
可以看到这时静态类的arr被初始化了,而且arr值全部为0时,内存并没有变化,难道是微软做了优化?
2.GOF对单件的第一句场景解释就是“如果需要唯一实例”?
额,静态类难道不是唯一实例么?
3.单例模式,解耦?
public interface IHelloWorld { string HelloWorld(); } //然后是接口的两个实现. public class HelloWorldEnglish : IHelloWorld { string IHelloWorld.HelloWorld() { return "Hello World !"; } } public class HelloWorldChinese : IHelloWorld { string IHelloWorld.HelloWorld() { return "您好 世界 !"; } } public class People { private readonly IHelloWorld peopleHelloWorld; public People(IHelloWorld helloWorld) { this.peopleHelloWorld = CreateSingle() //这里你可以使用单例模式创建出来HelloWorldEnglish 或 HelloWorldChinese } public void SayHello() { Console.WriteLine(this.peopleHelloWorld.HelloWorld()); } }
这个代码我看完了愣是没明白解耦和单例啥关系,倒是明白了接口解耦挺好的(手动笑哭),下面大侠观点与我相同,但还是没有解开我的疑团
4.单例可以有继承,实现接口,而静态类不能
这个观点我比较赞同,如果想使用单例,又想松耦合,就用单例模式吧。
静态类比较适合工具类。
参考链接:
bbs.csdn.net/topics/390487790
www.cnblogs.com/zhangzt/p/4350556.html
bbs.csdn.net/topics/390825682
www.xin3721.com/ArticlecSharp/c13696.html

