一、工厂方法模式
1、简单工厂
1)简单厂的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的额选择条件动态视力化相关的类,对于客户端来说,去除了与具体产品的依赖。
2)就那运算器的例子来说,如果再给程序加‘开方’等功能时,需要我们一定给工厂类的方法里加‘case’语句的,这就违背了,‘开放-封闭’原则。
3)以运算器的图为例
//简单工厂模式
public class OperationFactory
{
public static OperationcreateOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case"+":
oper = new OperationAdd();
break;
case"-":
oper = new OperatoinSub();
break;
case"*":
oper = new OperationMul();
break;
case"/":
oper = new OperationDiv();
break;
}
return oper;
}
}
客户端代码
staticvoid Main(string[] args)
{
Operation oper;
oper =OperationFactory.createOperate("*");
oper.NumberA = 9;
oper.NumberB = 2;
double result = oper.GetResult();
Console.Write(result);
Console.ReadLine();
//ReadLine此句呢,就是可以再F5下停留
}
2、工厂方法模式
1)工厂方法模式(Factory Method),定义一个用于创建对象接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2)工厂方法模式机构图
3)应用(计算机为例)
//先构建一个工厂接口
interface IFactory
{
Operation CreateOperation();
}
//加减乘除个见一个具体工厂去实现这个接口
class AddFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationAdd();
}
}
class SubFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationSub();
}
}
class MulFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationMul();
}
}
class DivFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationDiv();
}
}
}
客户端代码
static void Main(string[] args)
{
IFactory operFactory = newAddFactory();
oper.NumberB = 2;
double result = oper.GetResult();
Console.WriteLine(result );
Console.Read();
}
二、抽象工厂模式
1)抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类。
2)以不同数据库中的两种表为例
工厂方法模式
在工厂方法的基础上又加了Department表,就行成了抽象模式工厂。(多个)
3)抽象工厂模式的优缺点
最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易.
第二大好处是,它让具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中.
缺点:如果增加项目表Project,就需要增加三个类,Iproject、SqlserverProject、AcessProject,还需要改Ifactory、SqlserverFactory和AcessFactory才可以完全实现。要改三个类,这就太糟糕了。等。