java关于接口暴露问题的解决思路

yanglilibaobao 2007-04-25 11:06:28
该问题主要是关于对外接口暴露的问题(此接口并非指java中的interface,而是指用户编程时可使用的接口),例如有一个类的大部分方法是不应该暴露给用户的,然而事实上,因为设计问题,任何一个用户都可以创建该类的实例以至于使用它,虽然在实际当中,可能没有用户会去这样做,不过我认为如果能够尽量避免这种情况应该是最好的选择。但是又该如何避免呢?

我想这种问题出现的主要原因体现在设计者在对象职责分配上想尽可能的达到分散职责让程序更容易进行维护,这种目的是非常正确的,不过在实现上可能没有注意到接口暴露的问题,导致出现了我所说的情况。在群中讨论的时候,并没有人认同我的看法,也许我是错的,也许我是对的,不过这无关紧要,重要的是能够通过交流发现问题促进进步。

举个简单的例子:


代码
public class TestA{
public void methodA(){
TestB testB = new TestB();
testB.methodB();
}
}

public class TestB{
public void methodB(){
……
}
}


在上面这个例子中,TestA依赖于TestB,而TestB这个类的方法应该是用户不可见,且不能让用户使用的,如果按照上面的方法,用户就可以使用TestB这个类了。

对于这一问题,我的解决办法是将职责分配到实现类的父类或者接口上,在实现类当中以protected为方法标识,这样做虽然不能完全避免,但是可以尽可能的让客户知道哪些是给他使用哪些是不该使用的。


代码
public class TestA extends TestB{
public void methodA(){
methodB();
}
}
public class TestB{
protected void methodB(){
……
}
}


根据上面这种方式,TestB的方法通过protected进行了隐藏,可以进一步的让用户得知他所拥有的权限,从而就可以很轻易的解决了接口暴露的问题,上面的例子只是为了表达明确,并没有过多的设计,在实际开发当中,TestB更多的是作为抽象类或者是接口的形式出现,这种做法一样达到了对象职责的区分,容易维护,同时也封装了不该外露的接口,而且也可以随时开发给用户使用。在这里我只讲了一个大概的思路,并没有详细讨论如何去做,还需大家一起来参与。


转http://www.javaeye.com/
...全文
735 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
晚风残 2012-08-07
  • 打赏
  • 举报
回复
ding
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
不明LZ在说什么
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
不明LZ在说什么
ycl240 2007-05-01
  • 打赏
  • 举报
回复
我们不是没有好机会,我们是没有好观念!!!
八十年代初,摆个地摊就能发财,可很多人不敢。
九十年代初,买支股票就能挣钱,可很多人不信。
二十一世纪,开个网站就能赚钱,可很多人不试。
加盟网站:http://ycl.cctve.cn/
有些人面对一个来之不易的良好机会总是拿不定把握,于是去问他 人,而新生事物之所以新就是因为90%以上的人还不知道、不认识 ,等90%的人知道了就不再是新生事物。就拿网上赚钱来说,你问10 个人,很可能10个人都摇头,但再过一段时间,这10个人都点头时 ,我想这个市场就已经开始饱和了!
成功只青睐于有胆识的人!难道,一定要等到全国人民告诉你网络真 的可以赚钱你才加入吗?那个时候什么都晚了!
记住!网络,带给我们的不只是聊天和游戏而已!它蕴藏着实现梦想 的无限可能!
挑战新兴行业 ,领先占领网络商机!!!!
轻松在家,每月3000~~5000的收入!!
创业网站:http://ycl.cctve.cn/
或者加我的QQ咨询、了解:
QQ:312178002 手机 13956175341 <耐心解答咨询,无意网赚者勿扰>
bradwoo8621 2007-04-30
  • 打赏
  • 举报
回复
public class A {
public void ma() {
B b = new B();
b.mb();
}
}
class B {
public void mb() {
}
}
or
public class B {
void mb() {
}
}

A和B在同一包下.
andrew_fan 2007-04-27
  • 打赏
  • 举报
回复
楼主可以好好看看OSGi中关于bundle对外公开接口的说明。
我觉得在OSGi中public一个类要复杂些,可是这种做法能有效的防治外部的不可预测的访问。
zhouzidane46 2007-04-25
  • 打赏
  • 举报
回复
这个一定要研究下
MARK

259

社区成员

发帖
与我相关
我的任务
社区描述
其他产品/厂家
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧