Код IT
← Каталог

Паттерны проектирования — Адаптер (Adapter) и Фасад (Facade) и Заместитель (Proxy)

Фрагмент из «Паттерны проектирования»: Адаптер (Adapter) и Фасад (Facade) и Заместитель (Proxy).

csharp projectencyclopedia7-06-proektirovanie-i-arhitektura-115 embed URL статья в энциклопедии
C# main.cs
// Адаптер: делаем старый API совместимым с новым
public class LegacyFileReader { public string ReadOldFormat() { ... } }
public class FileReaderAdapter : IFileReader { 
    private readonly LegacyFileReader _legacy;
    public string Read() => _legacy.ReadOldFormat().Replace(";", ","); 
}

// Фасад: упрощаем работу с архивом + шифрованием + логированием
public class SecureArchiveFacade {
    public string ReadFile(string path) {
        var archive = new ArchiveExtractor();
        var crypto = new Decryptor();
        var logger = new AuditLogger();
        logger.Log("Extracting...");
        var data = archive.Extract(path);
        logger.Log("Decrypting...");
        return crypto.Decrypt(Данные);
    }
}

// Proxy: ленивая загрузка + кэширование
public class LazyFileProxy : IFileReader {
    private IFileReader _realReader;
    private string _cache;
    public string Read() {
        if (_cache == null) {
            _realReader ??= new RealFileReader();
            _cache = _realReader.Read();
        }
        return _cache;
    }
}
// Адаптер: делаем старый API совместимым с новым
public class LegacyFileReader { public string ReadOldFormat() { ... } }
public class FileReaderAdapter : IFileReader { 
    private readonly LegacyFileReader _legacy;
    public string Read() => _legacy.ReadOldFormat().Replace(";", ","); 
}

// Фасад: упрощаем работу с архивом + шифрованием + логированием
public class SecureArchiveFacade {
    public string ReadFile(string path) {
        var archive = new ArchiveExtractor();
        var crypto = new Decryptor();
        var logger = new AuditLogger();
        logger.Log("Extracting...");
        var data = archive.Extract(path);
        logger.Log("Decrypting...");
        return crypto.Decrypt(Данные);
    }
}

// Proxy: ленивая загрузка + кэширование
public class LazyFileProxy : IFileReader {
    private IFileReader _realReader;
    private string _cache;
    public string Read() {
        if (_cache == null) {
            _realReader ??= new RealFileReader();
            _cache = _realReader.Read();
        }
        return _cache;
    }
}