在程序中的数据访问层中,经常会遇到返回实体类的情况,而不同的实体类大多具有相似的代码,情况也大致相同:有的是返回实体类的一条记录,有的是返回实体类的集合。这样如果仅按照最简单的写法的话,程序中会出现许多相似的代码,给人一种不舒服的感觉,如果发现一个程序中有许多重复类似的代码,那么就是程序中的坏味道,我们就应该想办法,对这些代码的实质进行抽象,进行优化,那么接下来要总结的接口泛型就是这么一个例子,另外用到了策略模式+单例模式。有些地方还需要继续优化,不过先把今天实现的功能总结一下。
先来看看UML结构图:
1、解释一下单例模式:BasicDataReaderToEntityStrategy
单例模式有一个自身的组合,需要一个私有化的实例化入口,具备一个全局访问的方法,另外需要明白的是,单例模式的线程安全问题,我的理解是整个程序中再任何时刻只能允许单例的原始对象自身有的动作,如,修改里面的数据等,因此给它自己上一把或者两把锁是必要的了。有关单例模式的5种写法以及各自的特点,可以参考这里:http://blog.youkuaiyun.com/lmdcszh/article/details/7168623
我再把这里用到的BasicDataReaderToEntityStrategy的相关代码贴出来供大家参考或者讨论。
Imports Model
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports System.Data.SqlClient
'单例模式
Public NotInheritable Class BasicDataReaderToEntityStrategy
Implements IDataReaderToEntityStrategy(Of BasicData)
'自身组合
Shared singleInstance As BasicDataReaderToEntityStrategy = Nothing
'定义一个静态的系统锁
Shared ReadOnly padLock As New Object
'私有化构造函数
Private Sub New()
End Sub
'全局静态属性,唯一实例化入口,双重锁
Public Shared ReadOnly Property GetInstance() As BasicDataReaderToEntityStr