1.工厂方法设计模式
- 1.1 工厂方法模式属于创建模式,创建模式主要是对类的实例化进行了抽象
2.最初的编码方式
- 2.1 现在有一个问题:实现一个框架,然后让客户自己选择导出数据的方式,并真正成功执行导出。(如:现在有两个数据导出方式,A:.txt、B:.sql。客户可以在GUI输入A或者B来选择导出的文件)
- 2.2 对于刚开始的学习来说,思路一般是:
public class Example
{
void main()
{
if(printfoption == A)
{
ExportOperateA(data);
ExportResultA(data);
}
else if(printfoption == B)
{
ExportOperateB(data);
ExportResultB(data);
}
}
void ExportOperateA(string data)
{
此处添加导出文件代码
}
void ExportResultA(string data)
{
此处添加导出文件代码的结果
}
......
}
public class Example
{
void main()
{
if(printfoption == A)
{
ExportOperateA(data);
ExportResultA(data);
}
else if(printfoption == B)
{
ExportOperateB(data);
ExportResultB(data);
}
}
}
public interface ExportFileInterface
{
boolean ExportResult(data);
}
//实现类:
public class TxtExport : ExportFileInterface
{
public Boolean ExportResult(string data)
{
Console.WriteLine("data type:" + data + " ---- ExportResult:success");
Console.ReadKey();
return true;
}
}
//我们需要接口对象来调用接口里的方法,于是定义一个方法来创建;但是实际上这个方法
不知道如何去创建这个接口的对象(因为接口不能被实例化),那么解决方法就是将这个方
法写成抽象方法,因为自身无法实现,那么交给子类去实现即可(一定要仔细理解这句话!)
//工厂类:
public abstract class ExportOperate
{
public abstract ExportFileInterface factorymethod();
public boolean export(string data)
{
ExportFileInterface exportFile = factorymethod();
return exportFile.ExportResult(data);
}
}
//(C#)子类继承抽象类实现内部的方法,.txt文件导出操作来实现该抽象类
public class TxtExportOperate : ExportOperate
{
public override ExportFileInterface factorymethod()
{
//创建导出.txt文本对象,在此不写具体代码
return new TxtExport();
}
}
3.总结
- 3.1 工厂方法根据需要还有参数化工厂方法
- 3.2 优缺点:
- 优点: 可以在不知道具体实现的情况下编程、更容易扩展对象的新版本、连接平行的类层次
- 缺点: 具体产品对象和工厂方法的耦合性
- 3.3 本质:延迟到子类来选择实现
- 3.4 与简单工厂区别:非常类似,但是简单工厂是在工厂类里面进行“选择实现”,而工厂方法会把这个工作交给子类去实现
- 3.5 设计原则:依赖倒置原则(依赖抽象,而不是具体的类)
- 3.6 何时使用:
- 3.6.1 如果一个类需要创建某个接口的对象,但又不知道具体的实现,此时可选择工厂方法,把创建对象的工作放到子类去实现
- 3.6.2 如果一个类本身就希望由它的子类来创建所需的对象的时候,此时使用工厂方法模式
4.参考文献