well, the previous code was half baked, this should explain what I want to archive...
int main(string[] args)
{
        DatabaseFactory factory;
        
        if(args[0] == "MySQL")
                factory = new MySQLFactory();
        else
                factory = new PostreSQLFactory();

        updatePricelist(factory);
        return 0;
}

abstract class Database {

        //common database stuff
        public abstract void connect(string user, string pw);
        // execSql(); prepare() etc...
}

abstract class DatabaseFactory {

   public abstract Database GetDatabase();
}

final class PostgreSQL:Database {

        // common
   public override void connect(string user, string pw) {

   }
   //PostgreSQL specif
   public void funkyPGstuff() {}
}

final class PostreSQLFactory:DatabaseFactory {

   public override Database GetDatabase() {

      return new PostgreSQL();

   }
}

final class MySQL:Database {

        // common
   public override void connect(string user, string pw) {

   }
   //MySQL specif
   public void funkyMySQLstuff() {}
}

final class MySQLFactory:DatabaseFactory {

   public override Database GetDatabase() {

      return new MySQL();

   }
}
// Update PriceList without knowing the concrete database
void updatePricelist(DatabaseFactory factory) {
        Database db = factory.GetDatabase();
        //db.execSQL("UPDATE ...");
}

Reply via email to