内部类使用的四种常用场景

场景一:当某个类除了它的外部类,不再被其他的类使用时:
我们说这个内部类依附于它的外部类而存在,可能的原因有:
1、不可能为其他的类使用;
2、出于某种原因,不能被其他类引用,可能会引起错误,等等。
这个场景是我们使用内部类比较多的一个场景。下面我们以一个大家熟悉的例子来说明:
在我们的企业级Java项目开发过程中,数据库连接池是一个我们经常要用到的概念。虽然在很多时候,我们都是用的第三方的数据库连接池,不需要我们亲自来做这个数据库连接池。但是,作为我们Java内部类使用的第一个场景,这个数据库连接池是一个很好的例子。为了简单起见,以下我们就来简单的模拟一下数据库连接池,在我们的例子中,我们只实现数据库连接池的一些简单的功能。
如下:
   public class ConnectPool implements Pool  
   {  
           private PoolConn[] poolConns;     //存在Connection的数组   
           private int min;                             //连接池的最小连接数  
           private int max;                           //连接池的最大连接数  
           private int maxUseCount;            //一个连接的最大使用次数  
           private long maxTimeout;            //一个连接的最大空闲时间   
           private int maxConns;                 //同一时间的Connection最大使用个数   
           private Timer timer;                    //定时器              

           public boolean init()  
           {  
                  try  
                 {  
                         ……  
                         this.poolConns = new PoolConn[this.min];  
                         for(int i=0;i<this.min;i++)  
                         {  
                                PoolConn poolConn = new PoolConn();  
                                poolConn.conn = ConnectionManager.getConnection();  
                                poolConn.isUse = false;  
                                poolConn.lastAccess = new Date().getTime();  
                                   poolConn.useCount = 0;  
                                  this.poolConns[i] = poolConn;  
   			}  
   			//……  
   			return true;  
                  }  
                  catch(Exception e)  
                  {  
                         return false;  
   }  
   }  
   //……  
   private class PoolConn  
   {  
          public Connection conn;  
          public boolean isUse;  
   	  public long lastAccess;  
          public int useCount;  
   }  
   }  
 
场景二:解决一些非面向对象的语句块 : 写道
这些语句块包括if…else if…else语句,case语句,等等。这些语句都不是面向对象的,给我们造成了系统的扩展上的麻烦。我们可以看看,在模式中,有多少模式是用来解决由if语句带来的扩展性的问题。
Java编程中还有一个困扰我们的问题,那就是try…catch…问题,特别是在JDBC编程过程中。
 
场景之三:一些多算法场合 写道
假如我们有这样一个需求:我们的一个方法用来对数组排序并且依次打印各元素,对数组排序方法有很多种,用哪种方法排序交给用户自己确定。
对于这样一个需求,我们很容易解决。我们决定给哪些排序算法定义一个接口,具体的算法实现由用户自己完成,只要求他实现我们的接口就行。
 
场景之四:适当使用内部类,使得代码更加灵活和富有扩展性 写道
适当的使用内部类,可以使得你的代码更加灵活和富有扩展性。当然,在这里头起作用的还是一些模式的运行,但如果不配以内部类的使用,这些方法的使用效果就差远了。
 
 package polyFactory;   
    
 public interface Shape {  
 public void draw();  
 public void erase();  
    
 }   
 public class Square implements Shape {  
    
 public void draw() {  
         // TODO Auto-generated method stub  
        System.out.println("the square is drawing...");  
 }  
    
 public void erase() {  
         // TODO Auto-generated method stub  
        System.out.println("the square is erasing...");  
 }  
 private static class Factory extends ShapeFactory  
 {  
        protected Shape create()  
         {  
                return new Square();  
         }  
 }  
 static {ShapeFactory.addFactory("Square",new Factory());}  
    
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值