您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——桥接模式

小志的博客 发布时间:2020-12-14 20:35:46 ,浏览量:0

目录
    • 一、桥接模式的定义与类型
    • 二、桥接模式的适用场景
    • 三、桥接模式的优点
    • 四、桥接模式的缺点
    • 五、桥接模式相关的设计模式
    • 六、桥接模式示例

一、桥接模式的定义与类型

1、定义

  • 将抽象部分与它具体实现部分分离,使他们都可以独立的变化
  • 通过组合的方式简历两个类之间联系,而不是继承

2、类型

  • 结构型
二、桥接模式的适用场景
  • 抽象和具体实现之间增加更多的灵活性
  • 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展
  • 不希望使用继承,或因为多继承导致系统类的个数剧增
三、桥接模式的优点
  • 分离抽象部分及其具体实现部分
  • 提高了系统的可扩展性
  • 符合开闭原则
  • 符合合成复用原则
四、桥接模式的缺点
  • 增加了系统的理解与设计难度
  • 需要正确的识别出系统中两个独立变化的维度
五、桥接模式相关的设计模式
  • 桥接模式和组合模式
  • 桥接模式和适配器模式
六、桥接模式示例

示例描述:以银行和账户为例。

1、创建一个账号接口

package com.rf.designPatterns.structural.bridge;
/*** 
* @Description: 创建一个账号接口
* @Author: xz
*/
public interface Account {
    Account OpenAccount();//开通账号
    void showAccountType();//显示账号类型。活期账号、定期账号
}

2、创建定期账号类

package com.rf.designPatterns.structural.bridge;

/**
 * @description: 创建定期账号类
 * @author: xz
 */
public class DepositAaccount implements Account{
    @Override
    public Account OpenAccount() {
        System.out.println("开通定期账号");
        return new DepositAaccount();
    }

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

3、创建活期账号类

package com.rf.designPatterns.structural.bridge;

/**
 * @description: 创建活期账号类
 * @author: xz
 */
public class SavingAccount implements Account{
    @Override
    public Account OpenAccount() {
        System.out.println("开通活期账号");
        return new SavingAccount();
    }

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

4、创建一个抽象的银行类

package com.rf.designPatterns.structural.bridge;

/**
 * @description: 创建一个抽象的银行类
 * @author: xz
 */
public abstract class Bank {

    protected Account account;
    //构造方法
    public Bank(Account account){
        this.account=account;
    }
    //与Account接口中开通账号方法同名的抽象方法
    abstract Account OpenAccount();
}

5、创建中国建设银行类

package com.rf.designPatterns.structural.bridge;

/**
 * @description: 创建中国建设银行类
 * @author: xz
 */
public class ChinaJSBank extends Bank{

    //创建构造器
    public ChinaJSBank(Account account) {
        super(account);
    }

    //重写开通账号方法
    @Override
    Account OpenAccount() {
        System.out.println("开通建行账号");
        return account;
    }
}

6、创建中国农业银行类

package com.rf.designPatterns.structural.bridge;

/**
 * @description: 创建中国农业银行类
 * @author: xz
 */
public class ChinaNYBank extends Bank{

    //创建构造器
    public ChinaNYBank(Account account) {
        super(account);
    }

    //重写开通账号方法
    @Override
    Account OpenAccount() {
        System.out.println("开通中国农业银行账户");
        return account;
    }
}

7、桥接模式测试类

package com.rf.designPatterns.structural.bridge;

/**
 * @description: 桥接模式测试类
 * @author: xz
 */
public class Test {
    public static void main(String[] args) {
        ChinaJSBank chinaJHBank = new ChinaJSBank(new DepositAaccount());
        Account account = chinaJHBank.OpenAccount();
        account.showAccountType();

        ChinaJSBank chinaJHBank1 = new ChinaJSBank(new SavingAccount());
        Account account1 = chinaJHBank1.OpenAccount();
        account1.showAccountType();

        ChinaNYBank chinaNYBank = new ChinaNYBank(new DepositAaccount());
        Account account2 = chinaNYBank.OpenAccount();
        account2.showAccountType();

        ChinaNYBank chinaNYBank1 = new ChinaNYBank(new SavingAccount());
        Account account3= chinaNYBank1.OpenAccount();
        account3.showAccountType();
    }
}

8、输出结果如下:

在这里插入图片描述 9、类图如下:

在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0681s