Структурная модель - мост режим (VI)

Источник адрес проекта: https: //github.com/ggb2312/JavaNotes/tree/master/design-pattern (шаблоны проектирования соответствующий код и примечания)

1. Определения

Отвлечение от его конкретной секции реализации. Так что они могут меняться независимо друг от друга. Установление связей между двумя классами с помощью комбинации, а не наследования.

2. применимый

  • Добавьте больше гибкости между абстрактным и конкретной реализацией
  • Класс есть два (или более) размеров изменяются независимо друг от друга. И два (или более) размеров должны быть расширены независимо друг от друга
  • Не желая использовать наследование, или потому, что количество многослойной системы приводит к унаследованному классу всплеску

3. Диаграмма классов и роль

Диаграмма классов

  • Абстракция роль абстракции, определяет поведение персонажей, сохраняя при этом ссылку на реализацию роли;
  • Implementor достижения роль которого является интерфейс или абстрактный класс , который определяет роль требуемых свойств и поведения;
  • RefinedAbstraction с поправками абстрактной роли, роль эталонной реализации абстрактных ролей измененными;
  • ConcreteImplementor конкретная реализация роли, реализовать интерфейс или абстрактный класс определяет методы или свойства.

4. Соответствующие шаблоны проектирования

Режим Bridging и комбинированный режим

  • Комбинированный режим подчеркивается, что сочетание между частями и целым, следует подчеркнуть, что режим моста в параллельных уровнях, комбинации различных классов

Режим моста и режим адаптера

  • Адаптер изменить режим интерфейса, абстрактного и конкретного режима разделения моста.

Пример 5. Режим

Справочная информация : У китайцев есть много банков, Сельскохозяйственный банк Китая и Промышленный и коммерческий банк Китая на наш счет, текущий счет и счет на регулярной основе.

(1) режим моста - достичь

Имеют интерфейсы учетной записи:

public interface Account {
    /** 打开我们的账号,打开账号,就要返回账号 */
    Account openAccount();
    
    /** 打开我们的账号,查看为什么账户类型,是定期类型还是活期类型 */
    void showAccountType();

}

Регулярный счет:

/** 定期的账号 */
public class DepositAccount implements Account {
    @Override
    public Account openAccount() {
        System.out.println("定期账号");
        return new DepositAccount();
    }

    @Override
    public void showAccountType() {
        System.out.println("这是一个定期账号");
    }
}

Расчетный счет:

/** 活期账号 */
public class SavingAccount implements Account {
    @Override
    public Account openAccount() {
        System.out.println("打开活期账号");
        return new SavingAccount();
    }

    @Override
    public void showAccountType() {
        System.out.println("这是一个活期账号");
    }
}

(2) Режим моста - Абстрактные

Комбинации интерфейса Общий счет в банке:

public abstract class Bank {
    /** 只有子类能拿到这个Account的这个接口 */
    protected Account account;

    /** 组合的时候,可以通过构造器的方式来进行注入也可以通过set方法的方式来进行注入 */
    public Bank(Account account) {
        this.account = account;
    }

    /** 这里声明成和接口里面的方法名一致,只是方便理解,Bank里面的方法要委托给Account接口里面的方法 */
    abstract Account openAccount();

}

Теперь мы видим , что учетная запись является конкретной реализацией, мы должны использовать конкретную реализацию этого интерфейса. Банк является абстрактным классом, а затем введен в эксплуатации абстрактного поведения класса внутри этого интерфейса к учетной записи.
Говоря в режиме переднего мостика относится к абстракции и разделению, здесь реализуется здесь , счета формального класса реализации.

Теперь интерфейс банк имеет два подкласса унаследовать его.

Китай Сельскохозяйственный банк класса:

public class ABCBank extends Bank {
    /**
     * 组合的时候,可以通过构造器的方式来进行注入也可以通过set方法的方式来进行注入
     *
     * @param account
     */
    public ABCBank(Account account) {
        super(account);
    }

    @Override
    Account openAccount() {
        System.out.println("打开中国农业银行账号");
         //将行为委托给account
        account.openAccount();
        return account;
    }
}

Коммерческий банк Китая составляют:

public class ICBCBank extends Bank {
    /**
     * 组合的时候,可以通过构造器的方式来进行注入也可以通过set方法的方式来进行注入
     *
     * @param account
     */
    public ICBCBank(Account account) {
        super(account);
    }

    @Override
    Account openAccount() {
        System.out.println("打开中国工商银行账号");
        //将行为委托给account
        account.openAccount();
        return account;
    }
}

(3) Тест Класс

public class Test {
    public static void main(String[]args){
        Bank icbcBank = new ICBCBank(new DepositAccount());
        Account icbcAccount = icbcBank.openAccount();
        icbcAccount.showAccountType();

        Bank icbcBank2 = new ICBCBank(new SavingAccount());
        Account icbcAccount2 = icbcBank2.openAccount();
        icbcAccount2.showAccountType();

        Bank abcBank = new ABCBank(new SavingAccount());
        Account abcAccount = abcBank.openAccount();
        abcAccount.showAccountType();
    }
}

Результаты тестов:

Результаты испытаний

(4) класс фиг

Аннотация и может быть снята, в сочетании введения в банке, банк в абстрактном, реализуются в ACount. Требуемые функции возложены на реализацию.

Диаграмма классов

6. плюсы и минусы

Преимущества:

  • Разделение абстрактной части и воплощенная часть
  • Улучшение масштабируемости системы
  • В соответствии с принципом открытия и закрытия
  • В соответствии с принципом мультиплексного синтеза

Недостатки:

  • Увеличьте трудность понимания конструкции системы
  • Нам нужно правильно распознать два независимых измерения изменить систему

7. Расширенная источник -JDK1.7 и кадр в режиме моста

7,1 java.sql.Driver, java.sql.DriverManager и java.sql.DriverInfo для
MySQL драйвера, оракул реализовать часть режима драйвера моста.

7,2 DriverManager и DriverInfo (т.е. Driver) реализован режим моста

рекомендация

отwww.cnblogs.com/gj-blog/p/10929510.html