默认适配器设计模式

默认适配器设计模式
        a.编写一个类,继承默认适配器
        b.定义一个引用,记住被改写类的实例
        c.定义构造方法,传入被改写类的实例
        d.对于要改写的方法,改写即可
      
      例:   改写com.mysql.jdbc.Connect中的close访法,
                在调用时,不是关闭连接,而是返回池中
      **************************************************************************
      原来的类:
       public class MyDataSource implements DataSource {


                    private static String driverClassName;
                    private static String url;
                    private static String user;
                    private static String password;
                    private static LinkedList<Connection> pool = new LinkedList<Connection>();
                    
                    static{
                            try {
                                    InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
                                    Properties props = new Properties();
                                    props.load(in);
                                    driverClassName = props.getProperty("driverClassName");
                                    url = props.getProperty("url");
                                    user = props.getProperty("user");
                                    password = props.getProperty("password");
                                    Class.forName(driverClassName);
                                    // 初始化10个连接到连接池中
                                    for(int i=0; i<10; i++){
                                            Connection conn = DriverManager.getConnection(url, user, password);
                                            pool.add(conn);
                                    }
                            } catch (Exception e) {
                                    e.printStackTrace();
                            }
                    }
                    
                    // 从池中获取一个连接
                    @Override
                    public synchronized Connection getConnection() throws SQLException {
                            if(pool.size()>0){
                               //  Connection conn = pool.remove();
                                    //  默认适配器模式复写close方法
                                MyConnection mconn = new MyConnection(conn, pool);
                                    return mconn;
                            }else{
                                    throw new RuntimeException("对不起,服务器繁忙");
                            }
                    }


                    @Override
                    此处省略一些接口中需要覆盖的方法


            }
      **************************************************************************
      通过继承默认适配器的包装设计模式改写com.mysql.jdbc.Connect中的close访法
             // 全部调用原有对象的原有方法,没有做任何功能上的改动
            //  此类便是一个默认适配器   再设置一个MyConnection1继承该类,并覆盖close方法
            public class ConnectionWrapper implements Connection {  // 包装类
                  private Connection conn;
                  public ConnectionWrapper(Connection conn){
                          this.conn = conn;
                  }
                  @Override
                  public void clearWarnings() throws SQLException {
                            conn.clearWarnings();
                  }
                  此处省略一系列的覆盖的方法;
             }
             
             // 继承默认适配器类,复写close方法
             public class MyConnection1 extends ConnectionWrapper {
                    private Connection conn;
                    private LinkedList<Connection> pool;             
                    public MyConnection1(Connection conn, LinkedList<Connection> pool) {
                            super(conn);
                            this.pool = pool;
                    }
                    @Override
                    public void close() throws SQLException {
                            pool.add(conn);
                    }          
            }


            在上面的获取连接,将被包装的类换为包装类:MyConnection mconn = new MyConnection(conn, pool);
      
      **************************************************************************
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值