前一两天在讨论群里,我提出过一个关于接口暴露的问题与群友们进行讨论,后来无甚结果,所以把自己这一问题在这里提出来,希望和大家讨论讨论。
该问题主要是关于对外接口暴露的问题(此接口并非指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更多的是作为抽象类或者是接口的形式出现,这种做法一样达到了对象职责的区分,容易维护,同时也封装了不该外露的接口,而且也可以随时开发给用户使用。在这里我只讲了一个大概的思路,并没有详细讨论如何去做,还需大家一起来参与。
对于这一问题只是本人一家之谈,可能有很多我没有想过的问题,有不同意的朋友欢迎与我讨论。
分享到:
相关推荐
因此,设计一种能够将USB接口转换为RS232接口的设备,对于解决上述问题具有重要意义。 #### USB与RS232接口特点对比 - **RS232接口**:电路简单,信号经差分处理后可靠性较高,适合远距离数据传输,被大量智能...
Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,为软件开发提供了可重用的解决方案。这些模式是经过多年实践和验证的,可以帮助开发者在编写代码时保持灵活性,提高代码的可读性和可...
为解决这些问题,基于中断调用的二次开发接口设计应考虑以下几点: 1. **模块化设计**:将功能模块化,用户仅需调用与所需功能相关的中断,减少不必要的资源占用。 2. **权限管理**:设置访问控制,限制用户对敏感...
【LTE零流量小区排除处理思路】\n\n在日益完善的4G网络建设中,LTE零流量小区的问题逐渐受到关注。这种现象不仅反映了用户分布和行为的实际情况,而且为引导用户发展提供了线索,同时也能暴露出设备潜在的故障。对...
尽管这种架构初期能提供较好的性能和存储性价比,但随着数据量的急剧增加,问题逐渐暴露: 1. ECM系统压力增大:ECM数据库作为联机型关系数据库,随着影像数据量的增长,查询性能下降,导致数据调阅响应时间延长。 ...
为解决这些问题,文章提出了构建一个基于Python语言,结合企业微信第三方API接口的全时域智能化监测系统框架。 首先,业务系统运维痛点在于系统种类多样,涉及的技术领域广泛,对IT技术人员的综合能力要求高,而...
参考资料和学习资料将有助于你解决遇到的问题,深入理解这一技术。在进行毕业设计或课程设计时,这种JavaScript与Activity的交互方式能让你的项目更具创新性和实用性。 总之,通过JavaScript与Activity的交互,...
随着信息化技术的普及,科技档案管理工作得到了显著提升,但同时也暴露出信息处理系统不完善、信息化标准建设不足及工作人员素质不高等问题。文章强调了信息化技术对于提高工作效率、促进科技信息交流的关键作用,并...
面向对象程序设计是 Java 编程的基础,它解决了传统程序设计风格中的缺陷,如数据抽象简单、信息完全暴露、算法复杂、无法很好地描述客观世界等问题。面向对象程序设计的基本思路是首先分析问题并建立相应的对象,...
最后,陈家林分享了解决方案的一些思路,例如,对于敏感的View,可以使用setImportantForAccessibility()或setAccessibilityDelegate()方法让Accessibility失效,防止辅助功能被滥用。 总结来说,Android应用安全...
- **实现服务提供者**:将业务逻辑封装为服务,实现服务接口,并配置Dubbo服务暴露。 - **实现服务消费者**:消费服务,通过Dubbo API调用服务提供者的接口。 - **部署与测试**:将服务部署到运行环境,进行功能...
当开发人员在面对复杂系统设计和代码重构时,设计模式能够提供清晰的思路和可复用的解决方案。这本书不仅是一份学习材料,更是每一位软件工程师的实用工具。 总之,《非常好的关于设计模式的电子书(超清晰)》不...
为了应对这些问题,软件开发领域逐渐转向了组件化的设计思路,其中COM模型作为一种成熟的解决方案脱颖而出。 #### 三、COM模型的关键特性 1. **封装性**:COM组件能够将其内部实现细节隐藏起来,只暴露对外接口,...
### JavaEE技术面试常见问题...以上就是JavaEE技术面试中关于数据结构、算法以及设计模式的一些常见问题及其解答思路。这些知识点对于准备面试的开发者来说非常重要,能够帮助他们更好地理解和应用这些核心概念和技术。
为解决这些问题,我们可以引入服务化理念,将大应用拆分为多个独立的服务,每个服务负责一部分业务功能,实现模块化和解耦。 Dubbo的核心特性包括服务注册与发现、远程调用、负载均衡、容错机制、监控等,这些都为...
在计算机科学的世界里,数据结构和算法是构建软件系统和解决复杂问题的基石。《数据结构、算法与应用(C++语言描述)》一书通过C++语言的实践,深入讲解了这些核心概念,并通过一系列精心设计的习题,帮助读者加深理解...
传统的软件设计方法在面对复杂性和规模不断增大的项目时逐渐暴露出效率低下的问题。针对这一挑战,研究者提出了一种新的解决方案——将WebofScience数据库应用于计算机软件设计之中,旨在提升设计的有效性。 #### ...
它们描述了问题、解决方案以及适用的场景,为开发者提供了设计思路和代码实现的参考框架。 #### 模式分类 设计模式通常分为三大类: 1. **创建型模式**:关注对象的创建机制,确保系统在合适的时候创建正确的对象...
4. 嵌入式系统的虚拟仪器需要解决的技术问题集中在系统平台的构建、接口和驱动程序的设计以及软面板设计等方面。 5. 硬件系统组成 硬件系统包括嵌入式主板、仪器功能板、Flash存储介质(DOC或CF卡)、液晶显示屏、...