设计模式学习笔记三:简单工厂(Simple Factory)
2008-06-06 23:08
706 查看
开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面向接口编程要求针对接口,而不是具体的实现,这样程序可以不用关心具体使用实现也能做到实现的互换。尽管编程是面向接口,但执行是操作需要实例化后的对象,而实例化必须要针对具体的类。如果直接实例化,则破坏了面向接口编程的原则。解决的方法就是通过一个专门实例化的类来获得具体的对象,通常我们将这个类成为“工厂”,将与实例化相关的模式成为“创建型模式”。
1.概述
简单工厂(Simple Factory)的作用是实例化对象,而不需要客户了解这个对象属于那个具体的子类。在GOF的设计模式中并没有简单工厂,而是将其作为工厂方法的一个特例加以解释,简单工厂就是参数化的工厂方法。该模式是通过switch分支(也有用if判断的),来决定最终生成哪一个对象的,而这个switch分支语句,嵌在一个静态方法中,这个改装就是简单工厂。
2.实例
1).大话设计模式中的计算器用简单工厂实现。
结构图:
public class Operation
public class OperationAdd:Operation
public class OprationSub:Operation
public class OperationMul:Operation
public class OperationFactory
public abstract class AbstractDB
public class Sql2005DB : AbstractDB
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.总结
简单工厂的使用场合:简单工厂实例化的类具有相同的接口,种类有限并且基本不需要扩展时,可以使用简单工厂,例如,我们实现不同数据库连接时,常用数据库类可以预知,则可以使用简单工厂。
简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是所实例化的类在编译期间已经被确定,如果增加新类型,则需要修改工厂。一旦增加新产品类,同时要实现抽象类中的所有方法;还有,一旦要修改抽象类中的方法,所有子类都要变动——扩展性差,不符合开闭原则。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
简单工厂要知道所有要生成的类型,当子类过多或者子类层次过多时就不适合使用简单工厂。
1.概述
简单工厂(Simple Factory)的作用是实例化对象,而不需要客户了解这个对象属于那个具体的子类。在GOF的设计模式中并没有简单工厂,而是将其作为工厂方法的一个特例加以解释,简单工厂就是参数化的工厂方法。该模式是通过switch分支(也有用if判断的),来决定最终生成哪一个对象的,而这个switch分支语句,嵌在一个静态方法中,这个改装就是简单工厂。
2.实例
1).大话设计模式中的计算器用简单工厂实现。
结构图:
public class Operation
public class OperationAdd:Operation
public class OprationSub:Operation
public class OperationMul:Operation
public class OperationFactory
public abstract class AbstractDB
public class Sql2005DB : AbstractDB
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.总结
简单工厂的使用场合:简单工厂实例化的类具有相同的接口,种类有限并且基本不需要扩展时,可以使用简单工厂,例如,我们实现不同数据库连接时,常用数据库类可以预知,则可以使用简单工厂。
简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性;缺点是所实例化的类在编译期间已经被确定,如果增加新类型,则需要修改工厂。一旦增加新产品类,同时要实现抽象类中的所有方法;还有,一旦要修改抽象类中的方法,所有子类都要变动——扩展性差,不符合开闭原则。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
简单工厂要知道所有要生成的类型,当子类过多或者子类层次过多时就不适合使用简单工厂。
相关文章推荐
- 【设计模式】学习笔记4:简单工厂模式(Simple Factory)
- 设计模式学习笔记三:简单工厂(Simple Factory)
- 设计模式学习笔记——简单工厂(Simple Factory)
- 设计模式学习之简单工厂(Simple Factory,创建型模式)(1)
- 设计模式笔记4:简单工厂模式(Simple Factory Pattern)
- 设计模式的征途—2.简单工厂(Simple Factory)模式
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
- 设计模式学习笔记(一):简单工厂
- 设计模式学习笔记(1) - 简单工厂模式
- 设计模式(二)-简单工厂(Simple Factory)模式
- 设计模式 简单工厂(simple factory pattern)转载
- java 设计模式 学习笔记(1) - 简单工厂模式
- 设计模式学习笔记二:简单工厂模式
- C#设计模式系列:简单工厂模式(Simple Factory)
- C#学习笔记之简单工厂设计模式
- 设计模式学习笔记(四)之工厂模式(Factory)
- C#设计模式之工厂模式(Factory)--01 简单工厂(Simple Factory)
- 23种设计模式之-----简单工厂(静态工厂)模式(SimpleFactory Pattern)
- 设计模式学习笔记二:简单工厂模式
- 设计模式学习笔记四:工厂方法(Factory Method)