在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 为什么要用抽象工厂?用抽象工厂的好处 这里我暂时还想不出有什么好处 我觉得就是利用接口来实现封装其子类,让具体的工作交给它的子类去做。所以说这应该不能算抽象工厂的优点,只能算作接口的优点。 2. 在C#中怎样用抽象工厂? 好,我们来看一下怎么来实现 比如说我们要写一个连接数据库的组件,既支持sqlserver的,又要支持oledb的,这时我们就可以用AbstractFactory设计模式了。 先定义一个接口: public interface IDbHelper { void ExecuteNonQuery();
DataSet ExecuteForDataSet(string sql); } 然后定义两个类(一个是sqlserver的,一个是oledb的)来继承IdbHelper这个接口: internal class SqlDbHelper:IDbHelper { public SqlDbHelper() { } public void ExecuteNonQuery() { } public DataSet ExecuteForDataSet(string sql) { //这里实现sqlserver的方法 return null; } } internal class OleDbHelper:IDbHelper { public OleDbHelper() { } public void ExecuteNonQuery() { } public DataSet ExecuteForDataSet(string sql) { //这里实现oledb的方法 return null; } } 然后,来定义一个工厂类: public class DbHelperFactory { public static IDbHelper CreateDbHelper(int DbType) { switch(DbType) { case 1: return new SqlDbHelper(); case 2: return new OleDbHelper(); default: return null; } } } 最后我们来调用这个工厂类: public class AbstractFactoryTest { public void TestMethod() { IDbHelper sqldb=DbHelperFactory.CreateDbHelper(1); sqldb.ExecuteNonQuery(); } } 这个时候我们就可以很方便的调用数据库组件了,在调用CreateDbHelper方法时,传入参数为1,那么就是调用SqlDbHelper这个类,传入参数为2,那么就是调用OleDbHelper这个类。当然传入的参数你还可以把它变为枚举型,这样就更加方便了。 这样的写法也更利于扩展,比如说以后要添加一个OracleDbHelper时,你只需要再添加一个类,改动一个方法(CreateDbHelper)就可以了。 |
请发表评论