`
wfzhanga
  • 浏览: 68350 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
场景一:当某个类除了它的外部类,不再被其他的类使用时:
我们说这个内部类依附于它的外部类而存在,可能的原因有:
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());}  
    
 } 
分享到:
评论
1 楼 悲剧了 2011-06-28  
代码是否可以多一点

相关推荐

    公司内部QTP培训PPT

    该资源是公司内部培训PPT,一共分四次 在每次的PPT中涉及的实例都是用公司内部系统完成 每次PPT都有VBS脚本实例 主要内容: 4.QTP原理 5.对象库编程 6.描述性编程 7.QTP的参数化-DataTable/excel 8.QTP操作Action 9....

    VMWare VMNet 8的配置使用详解

    本章主要介绍下我们使用VM最常用的两种网络模式,VMNet 0 和 VMNet 8 当我们安装VMware Workstation后,在宿主机(物理电脑)上会多出两个网卡,VMNet1、VMNet8,在虚拟机设置里会多出一个配置 VMNet0。 如下图: ...

    【JavaScript源代码】vue axios拦截器常用之重复请求取消.docx

     取消请求的方法 Axios使用内部提供的CancelToken来取消请求 官网示例1:用CancelToken.source工厂方法创建 cancel token,像这样 const CancelToken = axios.CancelToken; const source = CancelToken.source...

    AIC的Java课程1-6章

    形成定义类和使用类的两种不同的思维方式。  理解构造函数的作用(分配对象空间),理解和定义重载的构造函数。  明白this引用的两种用法。  弄清对象类型与基本类型的区别。  掌握private, ...

    WDLF Eipes 文达岭峰电商行业内部测款系统 v1.0.zip

    常见运用、部署于电子商务企业的内部局域网中,作为服装新品的选款、新设计方案内部意见征集等多种丰富应用场景。 建立和运用WDLF Eipes 系统,旨在充分调动企业内部的力量,通过高效而廉价的互联网手段,让公司以...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    实现一个拷贝文件的工具类要使用字节流还是字符串 Java面试题13.线程的的实现方式?怎么启动线程?怎么区分线程? Java面试题14.线程并发库和线程池的作用 Java面试题15.设计模式和常用的设计模式 Java面试题16....

    移动端web某马机构前端内部面试题,es,js

    v-if和v-show的区别,使用场景区别、组件中的data为什么是函数,new Vue 实例里,data 可以直接是一个对象computed和watch的区别是什么怎么理解vue中的虚拟DOM怎么理解vue的生命周期vue 钩子函数有哪些,有哪些使用的...

    05-大事件和node阶段某马机构前端内部面试题.md

    v-if和v-show的区别,使用场景区别、组件中的data为什么是函数,new Vue 实例里,data 可以直接是一个对象computed和watch的区别是什么怎么理解vue中的虚拟DOM怎么理解vue的生命周期vue 钩子函数有哪些,有哪些使用的...

    计算机二级的基本教程.txt

    Microsoft Office系列软件的应用:包括Word、Excel和PowerPoint等常用办公软件的功能和使用,以及它们在办公场景中的实际应用。 数据库操作:学习数据库的基本概念、SQL语言的使用以及数据库编程和管理的

    Windows fapi帮助文档

    能学到什么:内部的函数包含了从Windows消息、文件处理、网络函数、菜单函数、文本与字体函数、硬件与系统函数、控件与消息函数、维图和图标以及光栅运算函数、绘图函数、打印函数、设备场景函数、进程和线程函数...

    数据分析报告制作秘籍教程

    概要:讲解报告中经常见到的分析场景及各场景中常用的图表。包括:变化,分布,对比,预测。 Course5:结论撰写与报告使用 概要:讲解报告中最为重要的结论撰写部分,以及报告在面对不同使用场景时,需要对报告...

    day020-继承加强和设计模式代码和笔记.rar

    即当前类所在路径及其引用的第三方类库的路径,如第四节中的问题6所述)下的类库 加载到内存中。 开发者可以直接使用系统类加载器。 5. 设计模式:(框架中使用,是程序设计的高级思想) 1. 单例模式...

    收藏!!BAT 程序员们常用的开发工具

    InfoQ 编辑部盘点了大厂内部常用的开发工具,以供读者参考。本文涉及工具大部分为开源项目,大家可以按需选用。InfoQ 官网 阿里篇 一、Java 线上诊断工具 Arthas Arthas 是阿里巴巴 2018 年 9 月开源的一款 Java ...

    微信对接API-java版

    采用springboot框架,maven,package为jar,内部封装了公众平台的常用api,包括授权、签名、分享、消息推送等。同时加了缓存,ticket的定时刷新(每90分钟),内附API使用教程,以及war包、jar包的引用方法。 适用...

    Java开发面试-RabbitMQ专区

    在分布式系统中,消息队列是一种常用的解耦方式,可以将消息的发送和接收方解耦,提高系统的可扩展性和可靠性。因此,在面试中,面试官可能会问到RabbitMQ的基本原理、工作流程和应用场景等问题。其次,对于Java...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【数据库】MySQL常用的四种引擎的介绍 118 【架构】简单描述MVC模式 120 【架构】RPC的介绍 121 什么叫RPC 121 RPC流程 121 【架构】SOA介绍 122 【Redis】redis五种常见的数据类型详解 123 String字符串类型 124 ...

    突破程序员基本功的16课.part2

    2.4.4 内部类中的局部变量 2.5 小结 第3课 常见Java集合的实现细节 3.1 Set和Map 3.1.1 Set和Map的关系 3.1.2 HashMap和HashSet 3.1.3 TreeMap和TreeSet 3.2 Map和List 3.2.1 Map的values()方法 3.2.2 ...

    day018-File类代码以及笔记.rar

    使用场景: 1. 树状结构数据、菜单结构、上下级关系等的数据查询 2. 有相似逻辑运算的结构 3. 适用于层级结构少,数据量小的场景。(最重要)如果层级多,且数据量大用循环。 5. 解决了哪些问题: ...

    ios-自动排列子视图.zip

    场景是这样的,一个页面由多个不同的展示元素组成,考虑到可维护性和扩展性,这些元素可以划分成从上至下排列的多个分组,一个分组就是一个自定义的 subview ,每个 subview 实现各自内部的展示逻辑,并且有以下特点...

Global site tag (gtag.js) - Google Analytics