比如有个玩具类的DAO:ToyDAO,然后有几个具体的实现类比如玩具狗DogImpl和玩具鸭DuckImpl一般情况下是上层调用ToyDAO来操作具体的实现类,而不是直接找做具体实现类请问除了人为约束之外,怎么在程序中控制禁止程序员直接创建具体实现类? 
比如禁止这种DogImpl dog = new DogImpl()

解决方案 »

  1.   

    项目只用三层架构。可以解决这样的问题。用现在比较成熟的框架。如ssh.把所有的bean交给spring 不管理,就不会出现你说的那种情况了。
      

  2.   

    DogImpl 构造函数改为private
      

  3.   

    请问除了人为约束之外,怎么在程序中控制禁止程序员直接创建具体实现类?
    按理说你想别人别那样做,告诉人家不就行了。如果你实在要实现那你就把你那些类封装成dll,这样他们只能掉而不知道原始类是什么结构。
      

  4.   


    然后怎么实例化?是DogImpl自己再一个getInstance() 方法,里面自己new DogImpl()吗?
      

  5.   

    把DogImpl的构造函数改成private或是protect,建议改成protect,包内可以实例化该对象。
      

  6.   

    用webService可以实现你的需求。
      

  7.   

    把它改成protect,在包内创建一个DAOFactory类,有一个String类型的成员变量name,再写一个getInstance()方法,根据name的值来实例化对象,例如当name = dog时,返回一个DogImpl对象。外部的包通过DAOFactory来实例化对象。
      

  8.   

    用框架也可以自己new出来,框架只保证你使用了我给你的方法,框架才能管理该对象。如果你不想让实现类自己new出来,就得像上面大家说的那样,把构造器修改,这是从根源上杜绝了new出来的可能,否则无论你怎么封装,还是可以直接new,毕竟这是java语法允许的。