- 浏览: 130280 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hulibo:
太简单了 没参考价值
网上商城的数据库设计 -
lfc:
[img][/img][url][/url][flash= ...
Petshop 4.0 详细解释 -
早上好朋友:
引用
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
早上好朋友:
[flash=200,200][/flash][url][/u ...
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
银杏树:
参考一下。
网上商城的数据库设计
开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面向接口编程要求针对接口,而不是具体的实现,这样程序可以不用关心具体使用实现也能做到实现的互换。尽管编程是面向接口,但执行是操作需要实例化后的对象,而实例化必须要针对具体的类。如果直接实例化,则破坏了面向接口编程的原则。解决的方法就是通过一个专门实例化的类来获得具体的对象,通常我们将这个类成为“工厂”,将与实例化相关的模式成为“创建型模式”。
1.概述
简单工厂(Simple Factory)的作用是实例化对象,而不需要客户了解这个对象属于那个具体的子类。在GOF的设计模式中并没有简单工厂,而是将其作为工厂方法的一个特例加以解释,简单工厂就是参数化的工厂方法。该模式是通过switch分支(也有用if判断的),来决定最终生成哪一个对象的,而这个switch分支语句,嵌在一个静态方法中,这个改装就是简单工厂。
2.实例
1).大话设计模式中的计算器用简单工厂实现。
结构图:
代码:
Operation基类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class Operation
{
private double _numbleA=0;
private double _numbleB=0;
public double NumbleA
{
get { return _numbleA; }
set { _numbleA = value; }
}
public double NumbleB
{
get { return _numbleB; }
set { _numbleB = value; }
}
public virtual double GetResult()
{
double Result = 0;
return Result;
}
}
加法类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class OperationAdd:Operation
{
public override double GetResult()
{
double Result = 0;
Result = NumbleA + NumbleB;
return Result;
}
}
减法类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class OprationSub:Operation
{
public override double GetResult()
{
double Result = 0;
Result = NumbleA + NumbleB;
return Result;
}
}
乘法类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class OperationMul:Operation
{
public override double GetResult()
{
double Result = 0;
Result = NumbleA + NumbleB;
return Result;
}
}
运算工厂类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class OperationFactory
{
public static Operation CreateOperate(string Operate)
{
Operation oper = null;
switch (Operate)
{
case "+":
oper=new OperationAdd();
break;
case "-":
oper = new OprationSub();
break;
case "*":
oper = new OperationMul();
break;
}
return oper;
}
}
2).典型应用——获取数据连接对象
结构图:
具体代码实现:
数据库操作基类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public abstract class AbstractDB
{
protected string connString;
public string ConnString
{
get { return connString; }
set { connString = value; }
}
public void New(string cs)
{
connString = cs;
}
public abstract void Open();
public abstract void Close();
public abstract DataTable ExecSql(string strSql);
public abstract void ExecSqlNoquery(string strSql);
public abstract string TrateDateFiled(string strDateValue);
}
Sql2005实现类:
其他实现类相同,不再重复。哈哈,比较偷懒。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public class Sql2005DB : AbstractDB
{
private SqlConnection Mconn;
public Sql2005DB(string cs)
{
base.New(cs);
Mconn = new SqlConnection();
}
public override void Open()
{
if (Mconn == null)
{
Mconn=new SqlConnection();
}
}
public override void Close()
{
if (Mconn != null && Mconn.State != ConnectionState.Closed)
{
Mconn.Close();
}
}
public override DataTable ExecSql(string strSql)
{
DataTable dt=new DataTable();
SqlCommand sqlCom = new SqlCommand(strSql);
SqlDataAdapter da = new SqlDataAdapter(sqlCom);
sqlCom.Connection = Mconn;
da.Fill(dt);
return dt;
}
public override void ExecSqlNoquery(string strSql)
{
SqlCommand sqlCom = new SqlCommand(strSql);
sqlCom.Connection = Mconn;
sqlCom.ExecuteNonQuery();
}
public override string TrateDateFiled(string strDateValue)
{
return "_ToDate(" + strDateValue + ")";
}
}
数据库工厂:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public class DBFactory
{
public static AbstractDB CreateDB(string strType,string strConnString)
{
AbstractDB mysql=null;
switch (strType)
{
case "OleDB":
mysql = new OleDB(strConnString);
break;
case "Sql@005":
mysql = new Sql2005DB(strConnString);
break;
case "":
mysql = new OracleDB(strConnString);
break;
}
return mysql;
}
}
3.总结
简单工厂的使用场合:简单工厂实例化的类具有相同的接口,种类有限并且基本不需要扩展时,可以使用简单工厂,例如,我们实现不同数据库连接时,常用数据库类可以预知,则可以使用简单工厂。
简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是所实例化的类在编译期间已经被确定,如果增加新类型,则需要修改工厂。一旦增加新产品类,同时要实现抽象类中的所有方法;还有,一旦要修改抽象类中的方法,所有子类都要变动——扩展性差,不符合开闭原则。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
简单工厂要知道所有要生成的类型,当子类过多或者子类层次过多时就不适合使用简单工厂。
发表评论
-
webservice的几种调用方法
2009-10-10 17:35 1294一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1121工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1408ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 931using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 873匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1482项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1702using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 932using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1104RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1050前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 758动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40531. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1102动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记五:抽象工厂(Abstract Factory)
2009-05-12 14:58 14691.概述 意图: 提供一个创建一系列相关 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1153动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记四:工厂方法(Factory Method)
2009-05-12 14:51 9171.概述 在软件系统中,经常面临着“某个对象”的创建工作 ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 1014动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 883意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础六之委托与事件
2009-05-12 14:48 1223委托 委托作为函 ... -
设计模式学习笔记二:面向对象基础五之集合和泛型
2009-05-12 14:47 987数组 数组的优点:数组在内存中连续存储,可以快速而容易的 ...
相关推荐
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...
:check_mark:简单工厂模式( Simple Factor Pattern ) :memo: , :check_mark:工厂方法模式( Factory Method Pattern ) :memo: , :check_mark:抽象工厂模式( Abstract Factroy Pattern ) :memo: , :check_...
在Java中,设计模式主要分为三大类:创建型、结构型和行为型。下面将详细讨论在给定文件中提及的两种模式——单例模式和工厂模式。 ### 单例模式 单例模式确保一个类只有一个实例,并提供全局访问点。这种模式在...
创建型设计模式主要用于对象的创建,包括简单工厂模式、抽象工厂模式和工厂方法模式。简单工厂模式通过一个静态方法创建对象,使得客户端代码与具体类的创建分离,增强了系统的可扩展性。例如,我们可以通过传入参数...
- **Simple Factory(简单工厂模式)**:通过提供一个创建产品实例的方法,使得客户无需指定产品的具体类,从而降低了客户端与产品类间的耦合。 - **Abstract Factory(抽象工厂模式)**:为创建一系列相关或相互...
本篇文章是对一份设计模式学习资料的深入解读,这份资料包含了19种经典的设计模式,并提供了C#示例代码,适用于学习和复习。下面将逐一介绍这些设计模式及其核心概念。 #### 1. 简单工厂模式 (Simple Factory ...
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
### 设计模式学习笔记知识点概览 #### 一、引言 设计模式是软件工程领域中一种非常重要的概念,它代表了一种最佳实践的方式,帮助开发者解决特定问题时能够更加高效、灵活。良葛格的《Design Pattern学习笔记》不仅...
### Spring学习笔记1 #### 一、Spring框架简介与IOC概念 **Spring**是一个开源的Java平台框架,它提供了一种全面的编程模型,并通过一系列的功能模块支持企业级应用程序开发。Spring的核心特性包括依赖注入...
10. **设计模式**:在J2EE开发中常见的设计模式,如MVC(Model-View-Controller)、Singleton、Factory等。 11. **性能优化和测试**:涉及J2EE应用的性能监控、调优策略,以及单元测试和集成测试的工具和方法。 12...
综上所述,通过本篇笔记的学习,读者可以全面掌握RabbitMQ的基本使用方法以及一些高级特性,这对于实际项目中的消息处理需求提供了强有力的支持。无论是简单的消息传输还是复杂的分布式系统架构设计,RabbitMQ都能...