zoukankan      html  css  js  c++  java
  • 常见的设计模式 ----- 桥接模式

    桥接模式

        Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展

        像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。

    下面还是以票务系统为例:

    票务系统接口定义

    1 public interface TicketsSystem {
    2     void buyTicket();
    3 }

    接下来是两个实现类

    汽车票

    1 public class BusTickets implements TicketsSystem{
    2 
    3     public void buyTicket() {
    4         System.out.println("buy a busTickets!");        
    5     }
    6 
    7 }

    火车票

    1 public class TrainTickets implements TicketsSystem{
    2 
    3     public void buyTicket() {
    4         System.out.println("buy a trainTickets!");    
    5     }
    6 
    7 }

    桥的抽象定义

     1 public abstract class TicketsBridge implements TicketsSystem {
     2     private TicketsSystem system;
     3 
     4     public TicketsSystem getSystem() {
     5         return system;
     6     }
     7 
     8     public void setSystem(TicketsSystem system) {
     9         this.system = system;
    10     }
    11 
    12 }

    桥的实例

     1 public class TicketsManager extends TicketsBridge{
     2     
     3     public TicketsManager(TicketsSystem system){
     4         setSystem(system);
     5     }
     6 
     7     @Override
     8     public void buyTicket() {
     9         getSystem().buyTicket();
    10         
    11     }
    12 
    13 }

    测试:

     1 public class BridgeDemoTest {
     2     public static void main(String[] args) {
     3         TicketsManager manager;
     4         BusTickets bus = new BusTickets();
     5         manager = new TicketsManager(bus);
     6         manager.buyTicket();
     7         
     8         TrainTickets train = new TrainTickets();
     9         manager = new TicketsManager(train);
    10         manager.buyTicket();
    11     }
    12 }
  • 相关阅读:
    LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    [转载]弹出一个不带地址栏、工具栏的IE非模态窗口
    winform datagridview 如何设置datagridview隔行变色
    C#调用C++的dll存在的问题
    Seafile开源私有云自定义首页Logo图片
    Alpine Linux 安装 lxml Pillow 失败
    Docker容器 MySQL中文乱码解决方案
    JS 查找数组的父节点及祖先节点
    五分钟读懂UML类图(转)
    Ant Design按需加载
  • 原文地址:https://www.cnblogs.com/keyiei/p/3598240.html
Copyright © 2011-2022 走看看