包装设计模式

一、包装与继承
     *    继承  
         MyReader   //专门用于读取数据的类
                |--- MyTextReader
                        |-- MyBufferTextReader
                |-- MyMediaReader
                        |-- MyBufferMediaReader
                |-- MyDataReader
                        |--MyBufferDataReader

        class  MyBufferReader
        {
                 MyBufferReade r( MyTextReader  text)
                { }
                 MyBufferReader ( MyMediaReader  media)
                { }
        }
        上面这个类扩展性很差。
     *    包装
        下面这个类找到其参数的共同类型,通过多态的形式,可以提高扩展性
         class  MyBufferReader  extends  MyReader
        {
             MyBufferReader ( MyReader r)
            { }
        }
        上面类相应的体系结构如下:
         MyReader  //专门用于读取数据的类。
                |-- MyTextReader
                |-- MyMediaReader
                |-- MyDataReader
                |-- MyBufferReader
        
包装模式比继承要灵活,避免了继承体系臃肿,且降低了类与类间的关系。
包装类因为增强已有对象,具备的功能和已有的是相同,只不过提供了更强功能,所以包装类和被包装类通常都属于一个体系中。

步骤:
1、定义一个类,实现与被增强相同的接口( 实际通常是继承sun公司已为用户写好的包装类,简化用户代码的书写,参阅filter拦截乱码八
2.、在类中定义一个变量,记住被增强对象
3、定义一个构造函数,接收被增强对象
4、覆盖想增强的方法
5、对于不想增强的方法,直接调用目标对象(被增强对象)的方法

实例代码:
    Linkedlist list=new LinkedList();

public Connection getConnection() throws SQLException{
    if(list.size()<=0){
            throw new RuntimeException("数据库线程连接池用完");
        }
        Connection conn=list.removeFirst();        //用一个线程就减少一个
         //增强的关闭线程方法
        MyConnection my=new MyConnection(conn);
        return my;
        //不用线程池时,直接调用Connection.close方法关闭连接,但Connection退回的线程连接并不会退到线程池中,而退到数据库中,所以不能直接用Connection.close(),而要对其方法进行增强。
    }
     //以下是包装设计模式代码 
    class MyConnection implements Connection{
    private Connection conn;
    public MyConnection(Connection conn){
        this.conn=conn;
    }
    public void close(){
        list.add(this.conn);      
    }
    ///
5、对于不想增强的方法,直接调用目标对象(被增强对象)的方法
    public void commit() throws SQLException{
        this.conn.commit();    
    }
    public Statement createStatement() throws SQLException{
        return this.conn.createStatement();
    }
    .。。。。。。。。。。。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值