码迷,mamicode.com
首页 > 其他好文 > 详细

桥接模式

时间:2019-01-06 18:22:20      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:src   pat   public   pac   tac   .sh   uml   sign   deposit   

1.定义:将抽象部分与它的具体实现部分分离,使它们都可以独立地变化;
      通过组合的方式建立两个类之间联系,而不是继承。

2.类型:结构型

3.适用场景:抽象和具体实现之间增加更多的灵活性;
        一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展;
        不希望使用继承,或因为多层继承导致系统类的个数剧增。

4.优点:分离抽象部分及其具体实现部分;提高了系统的可扩展性;
      符合开闭原则;符合合成复用原则。

5.缺点:增加了系统的理解与设计难度;需要正确地识别出系统中两个独立变化的维度。

6.相关设计模式:组合模式、适配器模式。

7.实例目录package

技术分享图片

8.实例UML类图

技术分享图片

9.代码

1 package com.geely.design.pattern.structural.bridge;
2 
3 public abstract class Bank {
4     protected Account account;
5     public Bank(Account account){
6         this.account = account;
7     }
8     abstract Account openAccount();
9 }
 1 package com.geely.design.pattern.structural.bridge;
 2 
 3 public class ABCBank extends Bank {
 4     public ABCBank(Account account) {
 5         super(account);
 6     }
 7 
 8     @Override
 9     Account openAccount() {
10         System.out.println("打开中国农业银行账号");
11         account.openAccount();
12         return account;
13     }
14 }
 1 package com.geely.design.pattern.structural.bridge;
 2 
 3 public class ICBCBank extends Bank {
 4     public ICBCBank(Account account) {
 5         super(account);
 6     }
 7 
 8     @Override
 9     Account openAccount() {
10         System.out.println("打开中国工商银行账号");
11         account.openAccount();
12         return account;
13     }
14 }
1 package com.geely.design.pattern.structural.bridge;
2 
3 public interface Account {
4     Account openAccount();
5     void showAccountType();
6 }
 1 package com.geely.design.pattern.structural.bridge;
 2 
 3 public class DepositAccount implements Account {
 4     @Override
 5     public Account openAccount() {
 6         System.out.println("打开定期账号");
 7         return new DepositAccount();
 8     }
 9 
10     @Override
11     public void showAccountType() {
12         System.out.println("这是一个定期账号");
13     }
14 }
 1 package com.geely.design.pattern.structural.bridge;
 2 
 3 public class SavingAccount implements Account {
 4     @Override
 5     public Account openAccount() {
 6         System.out.println("打开活期账号");
 7         return new SavingAccount();
 8     }
 9 
10     @Override
11     public void showAccountType() {
12         System.out.println("这是一个活期账号");
13     }
14 }
 1 package com.geely.design.pattern.structural.bridge;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         Bank icbcBank = new ICBCBank(new DepositAccount());
 6         Account icbcAccount = icbcBank.openAccount();
 7         icbcAccount.showAccountType();
 8 
 9         Bank icbcBank2 = new ICBCBank(new SavingAccount());
10         Account icbcAccount2 = icbcBank2.openAccount();
11         icbcAccount2.showAccountType();
12 
13         Bank abcBank = new ABCBank(new SavingAccount());
14         Account abcAccount = abcBank.openAccount();
15         abcAccount.showAccountType();
16     }
17 }

 

桥接模式

标签:src   pat   public   pac   tac   .sh   uml   sign   deposit   

原文地址:https://www.cnblogs.com/linbq1911/p/10229281.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!