
ООП
- 4 ответа
- 0 вопросов
3
Вклад в тег
class CsvParser:
def parse(self, file_name):
class XlsParser:
def parse(self, file_name);
{ 'csv': CsvParser(), 'xls': XlsParser(), 'xml': XmlParser() }
class ParserProvider:
def provide(file_name):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=dbTest.db", options =>
{
options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
});
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite("Filename=dbTest.db");
}
base.OnConfiguring(optionsBuilder);
}
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
var options = new DbContextOptionsBuilder<MyDbContext>()
.UseSqlite(connection)
.Options;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite("Filename=dbTest.db", options =>
{
options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
});
}
base.OnConfiguring(optionsBuilder);
}
public interface Command
{
void execute();
}
public class FindUserCommand : Command
{
public void execute()
{
/// Здесь у нас код, который ищет пользователя
}
}
public class DeleteUserCommand : Command
{
public void execute()
{
/// А здес у нас код, который удаляет пользователя
}
}
FindUserCommand findUser = new FindUserCommand();
DeleteUserCommand deleteUser = new DeleteUserCommand();
/// Поскольку оба этих класса реализуют абстракцию Command
/// мы можем поместить их экземпляры например в коллекцию
HashSet<Command> commands = new HashSet<Command>();
commands.Add(findUser);
commands.Add(deleteUser);
/// И отдать затем эту коллекцию кому-нибудь, кто вообще
/// ничего не знает про FindUserCommand и DeleteUserCommand
/// а знает только про Command. И не смотря на это, этот кто-то
/// совершенно спокойно может выполнить инкапсулированное
/// внутри команд поведение.
foreach(Command command in commands)
{
command.execute();
}