抽象工厂设计模式(C#)
抽象工厂设计模式(C#)
什么是抽象工厂设计模式呢?
假如我们新建了一个类如下:
public abstract class class1{
public virtral int aaa(){
}
public virtral int bbb(){
}
......
}
我们知道用abstract声明的类必须使用继承才能使用,例如我们可能在sqlserver下使用,也可能在Oracle下使用,那么我们不得不分别写sqlserver下的继承类和Oracle下的继承类,如下:
public class Oracle :class1{
......
}
public class Sqlserver :class1{
......
}
代码中我们这样实例化
Oracle object1=new object1
Sqlserver objiect2=new object2
问题来了,如果我们只想写一次代码,就能够同时使用sqlserver和oracle两个版本,这时最好的解决方案就是抽象工厂设计模式了,我们可以在class1中写如下静态方法:
public static class1 CreateHelper( string objAssembly, string objectType ){
Assembly assembly = Assembly.Load( objAssembly );
object objAssembly= assembly.CreateInstance( objectType );
if( objAssembly= is sqlserver)
{
return objAssembly= as class1
}
else
{
throw new InvalidOperationException( "不能创建继承class1的类");
}
}
写sqlserver和oracle下的通用代码
class1 myclass=class1.CreateHelper("你的程序集名","sqlserver类名或oracle类名")
有一点必须注意即:在myclass的方法中的代码必须是sqlserver和oracle通用的代码,这样你写的程序也可以同时适合sqlserver和oracle版本了
什么是抽象工厂设计模式呢?
假如我们新建了一个类如下:
public abstract class class1{
public virtral int aaa(){
}
public virtral int bbb(){
}
......
}
我们知道用abstract声明的类必须使用继承才能使用,例如我们可能在sqlserver下使用,也可能在Oracle下使用,那么我们不得不分别写sqlserver下的继承类和Oracle下的继承类,如下:
public class Oracle :class1{
......
}
public class Sqlserver :class1{
......
}
代码中我们这样实例化
Oracle object1=new object1
Sqlserver objiect2=new object2
问题来了,如果我们只想写一次代码,就能够同时使用sqlserver和oracle两个版本,这时最好的解决方案就是抽象工厂设计模式了,我们可以在class1中写如下静态方法:
public static class1 CreateHelper( string objAssembly, string objectType ){
Assembly assembly = Assembly.Load( objAssembly );
object objAssembly= assembly.CreateInstance( objectType );
if( objAssembly= is sqlserver)
{
return objAssembly= as class1
}
else
{
throw new InvalidOperationException( "不能创建继承class1的类");
}
}
写sqlserver和oracle下的通用代码
class1 myclass=class1.CreateHelper("你的程序集名","sqlserver类名或oracle类名")
有一点必须注意即:在myclass的方法中的代码必须是sqlserver和oracle通用的代码,这样你写的程序也可以同时适合sqlserver和oracle版本了