Источник адрес проекта: 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) реализован режим моста