<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[使用工厂模式实现多数据库WinForm手机号码查询器（附源码）]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Fri, 10 Sep 2010 08:45:38 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	<p><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px">关于工厂模式</strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">先讲一下简单工厂模式、工厂方法模式、抽象工厂模式的东西：</span></p><ul style="padding: 0px; margin: 0px 0px 0px 2em">&nbsp;&nbsp;&nbsp;&nbsp;<li style="padding: 0px; margin: 0px 0px 1em; list-style-type: disc"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">简单工厂模式（Simple&nbsp;&nbsp;Factory&nbsp;&nbsp;Pattern）：工厂类中包含了必要的逻辑判断，根据客户端的选择条件动态实例化相关类，也就是说产品的创建逻辑集中于一个工厂类，客户端只需要传递不同的参数给工厂，这时情况是：一个工厂创建一个产品，所有的具体工厂继承自一个抽象工厂；对于客户端来说，不存在与具体产品的依赖；</span></li>&nbsp;&nbsp;&nbsp;&nbsp;<li style="padding: 0px; margin: 0px 0px 1em; list-style-type: disc"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">工厂方法模式（Factory&nbsp;&nbsp;Method&nbsp;&nbsp;Pattern）：提前定义用于创建对象的接口，让子类决定实例化具体的某一个类，即在工厂和产品中间增加接口，工厂不再负责产品的创建，由接口针对不同条件返回具体的类实例，由具体类实例去实现；</span></li>&nbsp;&nbsp;&nbsp;&nbsp;<li style="padding: 0px; margin: 0px 0px 1em; list-style-type: disc"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">抽象工厂模式（Abstract&nbsp;&nbsp;Factory&nbsp;&nbsp;Pattern）：提供一个创建一系统或相互依赖对象的接口，不需要指定具体类。抽象工厂正如其名字所说，它抽象的是工厂接口，因此它面向的是多个平等等级结构，其建立对象的原则是以功能相似的对象为单位划分需要建立的对象。</span></li></ul><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">简单工厂并不属于23种基本设计模式中，它是抽象工厂模式的一个特例；抽象工厂与工厂方法区别在于它们抽象的对象不同：工厂方法针对产品进行抽象，而抽象工厂抽象针对工厂。因此可以认为工厂方法是抽象工厂的一种极端情况，工厂方法模式用来创建一个产品的等级结构，它一般只有一个方法，创建一种产品；而抽象工厂是用来创建多个产品的等级结构，一般有多个方法，创建一系列产品。</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px">手机号码查询设计</strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">此程序主要功能就是根据手机号码段查询相应的号码归属地。数据来自网络，数据表结构如下</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040300595069.png" border="0" /></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">数据记录超过17万条</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301001067.png" border="0" /></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">这里我使用了Sqlite数据库，将此数据库文件转换为Sqlite数据库文件。</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">主程序界面设计如下：</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301024620.png" border="0" /></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px">业务逻辑分析</strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">主程序调用业务逻辑层BLL，BLL使用抽象工厂DALFactory方法，DALFactory创建DAO实例对象，接口层IDAL定义数据操作接口方法，由数据访问层通过各自的公用数据操作类库进行读写数据库，实现对实体类Model的访问。</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301064869.png" border="0" /></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">解决方案文件列表如图</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301121964.png" border="0" /></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">其中DBUtility为公共数据访问类库。三个数据访问层SQLServerDAL、SqliteDAL和OleDAL分别对应Sql&nbsp;&nbsp;Server、Sqlite、Access数据库。这里我正在使用的是SqliteDAL。</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px">（由于Wordpress数据库设计限制，此处略去详细实现部分，请下载源码自行研究）</p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">以其中的查询结果的GetListByNum方法的UML类图如下</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301074562.jpg" border="0" /></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px">运行结果</strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">主程序运行效果如下图</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301325765.png" border="0" /></strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">查看详细信息</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px"><img style="border-width: 0px; padding: 0px; margin: 0px" src="http://pic002.cnblogs.com/img/walkingp/201004/2010040301333470.png" border="0" /></strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span"><strong style="padding: 0px; margin: 0px">总结</strong></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">此类基于多数据库操作的应用程序是很常见的，通过使用工厂方法模式进行架构，以业务逻辑分层、抽象实现数据访问的思想进行开发，显然在程序的可扩展性、层次性具有较大的优势。</span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">另一点值得说的是，Sqlite数据库的确在一些应用场合中具有较大的优势，关于Sqlite数据库的介绍请参见此文<a style="padding: 0px; margin: 0px; color: black; text-decoration: underline" href="http://zh.wikipedia.org/wiki/SQLite" target="_blank">http://zh.wikipedia.org/wiki/SQLite</a></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"> </p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">编译后程序下载（只含Sqlite数据库）：<a style="padding: 0px; margin: 0px; color: black; text-decoration: underline" href="http://files.cnblogs.com/walkingp/CuteMobileSearch_bin.zip">http://files.cnblogs.com/walkingp/CuteMobileSearch_bin.zip</a></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">源码下载地址(含SqlServer及Sqlite数据库)：<a style="padding: 0px; margin: 0px; color: #ff3333; text-decoration: underline" href="http://files.cnblogs.com/walkingp/CuteMobileSearch_src.zip">http://files.cnblogs.com/walkingp/CuteMobileSearch_src.zip</a></span></p><p style="padding: 0px; margin: 5px auto; text-indent: 0px"><span style="font-size: 14px; line-height: 21px; font-family: 微软雅黑,verdana,'ms song',宋体,Arial,Helvetica,sans-serif; color: #000000" class="Apple-style-span">单独Access数据库下载：<a style="padding: 0px; margin: 0px; color: black; text-decoration: underline" href="http://files.cnblogs.com/walkingp/CuteMobileSearch_AccessDB.zip">http://files.cnblogs.com/walkingp/CuteMobileSearch_AccessDB.zip</a></span></p>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] 使用工厂模式实现多数据库WinForm手机号码查询器（附源码）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>