博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.设计原则和单例模式
阅读量:5955 次
发布时间:2019-06-19

本文共 3169 字,大约阅读时间需要 10 分钟。

1.从设计原则到设计模式

(1)针对接口编程,而不是针对实现编程
客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口
(2)优先使用对象组合,而不是类继承
对象尽量使用接口,而不是一味的继承,因为这样会破坏封装性
(3)封装变化点
将变化的部分进行封装,这样不会对其他的部分有影响
(4)使用重构得到模式
一上来就使用设计模式是对设计模式的最大误用。
2.具体的设计原则
(1)单一职责原则
一个类应该仅有一个引起它变化的原因
(2)开放封闭原则
类模块应该是可扩展的,但是不可修改(对扩展开放,对更改封闭),简单的说就是不修改原来的类或方法,而是增加类或者方法
(3)Liskov 替换原则(里氏替换原则LSP)
子类必须能够替换它们的基类
(4)依赖倒置原则
高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
(5)接口隔离原则
尽量应用专门的接口,而不是单一的总接口
(6)合成/聚合复用原则
整体和部分的关系,而不是使用继承,继承不能使用太深,合成方式较继承方式耦合更松散,
(7)迪米特法则
又叫最小知识原则,,指软件实体应该尽可能少的和其他软件实体发生相互作用。尽量和其他的少引用
3.模式分类
从目的来看:
(1)创建型模式:负责对象创建。
(2)结构型模式:处理类于对象间的组合。
(3)行为型模式:类于对象交互中的职责分配。
从范围来看:
(1)类模式处理类与子类的静态关系。
(2)对象模式处理对象间的动态关系。
4.Singleton单例(单件)模式(创建型模式)
1.什么时候使用单例模式?

保证一个类仅有一个实例,并提供一个该实例的全局访问点。一般用单例模式来记录系统日志Log

2.通用的单例模式使用代码

单线程
///      /// 简单实现    /// 对于线程来说不安全    /// 单线程中已满足要求    /// 优点:     /// 由于实例是在 Instance 属性方法内部创建的,因此类可以使用附加功能    /// 直到对象要求产生一个实例才执行实例化;这种方法称为“惰性实例化”。惰性实例化避免了在应用程序启动时实例化不必要的 singleton。    ///      public sealed class Singleton     {         private static Singleton singletion = null;         private Singleton()         {                       }         public static Singleton Instance         {             get             {                 if (singletion==null)                 {                     singletion = new Singleton();                 }                 return singletion;             }         }     }

 

多线程
///      ///多线程安全    ///线程不是每次都加锁    ///允许实例化延迟到第一次访问对象时发生    ///      public sealed class Singleton     {         private static Singleton singletion = null;         private static readonly object padlock = new object();         private Singleton()         {                       }         public static Singleton Instance         {             get             {                 if (singletion==null)                 {                     lock (padlock)                     {                         if (singletion == null)                         {                             singletion = new Singleton();                         }                     }                 }                 return singletion;             }         }     }

 

.net推荐使用的方式
///      ///静态初始化    ///依赖公共语言运行库负责处理变量初始化    ///公共静态属性为访问实例提供了一个全局访问点    ///对实例化机制的控制权较少(.NET代为实现)     ///静态初始化是在 .NET 中实现 Singleton 的首选方法    ///初始化工作由Nested类的一个静态成员来完成,这样就实现了延迟初始化    ///      public sealed class Singleton     {         private Singleton()         {                       }               public static Singleton Instance         {             get             {                 return Nested.singletion;             }         }         private class Nested         {             internal static readonly Singleton singletion = null;             static Nested()             {                 singletion = new Singleton();             }         }     }

 

 

3.使用注意事项

Singleton模式中的实例构造器可以设置为protected以允许子类派生。

Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样与Singleton模式的初衷违背。
Singletom模式只考虑到了对象创建的管理,没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊的管理。

4.总结

Singleton模式是限制而不是改进类的创建。

理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。
可以很简单的修改一个Singleton,使它有少数几个实例,这样做是允许的而且是有意义的。

转载地址:http://eyexx.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
10个SQL注入工具
查看>>
[李景山php]每天laravel-20160826|EncryptionServiceProvider
查看>>
[李景山php]每天laravel-20161005|Validator.php-5
查看>>
php读取大文件详解【OK】
查看>>
Gnome 快捷键汇总
查看>>
通过注册表修改我的文档等系统文件夹默认位置
查看>>
expdp 详解及实例
查看>>
C++中 栈的简单封装
查看>>
我的友情链接
查看>>
Linux常用命令--iconv
查看>>
varnish的了解与常用配置使用
查看>>
Product user profile information 没有导入
查看>>
DELL T410服务器U盘安装Centos7
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Sqlserver2008日志压缩
查看>>
虚拟机usb无线上网同时主机本地上网或无线无线上网
查看>>
View的事件分发机制
查看>>
Android Ndef Message解析
查看>>
mysqldump backup script
查看>>