What is Interface-based framework?
我正在通过有效的Java和读取静态工厂方法来创建对象。其第2章第1项。在第三个优势中,作者提到了
Hiding implementation classes in this fashion can lead to a very compact API. This technique lends itself to interface-based frameworks, where interfaces provide natural return types for static factory methods.
我不明白基于接口的框架是什么?
也许重新表述一下会有所帮助:基于接口的框架是一个框架,它只允许用户/客户机lib访问接口,而实际上只提供实现这些接口的类。这种方法的好处在于给实现者对实现的完全控制权,同时给客户端一个稳定的API,最近我遇到了一个例子,客户端从API方法得到一个
基于接口的框架是用接口及其实现来设计的框架。
集合框架是基于接口的框架的一个很好的例子。
Hiding implementation classes in this fashion can lead to a very compact API
你只需要创建一个界面
1 2 3 4 | interface Animal{ public void eat();//hiding the implementation public Animal getAnimalInstance();//factory method } |
您的实现者将负责实现。
您的API使用者将像我们在集合中那样直接使用接口
1 | List<String> list = new ArrayList<String>(); |
也看到
- 最好在Java中使用接口
当你设计软件,有核心设计原则帮助管理的复杂性,参与复杂的A搜索任务。
一个核心原则是环境问题的一个复杂的subdivide smallers,设法和容易理解。
合同是在界面上。它定义了一个服务类必须符合和如何使用它。外部接口隐藏在一个或几个可能的实现细节的合同。
一个典型的Java应用程序设计接口,将一个模型为核心的合同提供的不同部分的软件。实现的细节是隐和因此允许减少的复杂性。
是说你让更多的混凝土,设计会计应用。所有客户提供同样的服务:让电流基本平衡,寻求信贷或货币,总结过去的作战要求。你可以定义一种接口,这样所有的帐户要符合:
1 2 3 4 5 6 7 8 9 10 11 |
这一定义,例如,它是容易提供一用户界面,允许用户来管理它的帐户。事实上,有差异之间的检查帐户,信用卡帐户。你将要管理的银行帐户现在可以在不同的数据库,或从其他遥远的银行帐户。一个将直接操作,另一个是使用一个网络协议的一些孩子来执行操作。
但从你的观点,所有你需要的是,合同是实现。CAN的工作和你的帐户。知识的具体细节上的帐户是不是你的问题做了手术。
这是一个漂亮的和尼斯,但重要的问题。你如何获得你的帐户吗?这是一个银行帐户信息的折扣是不同的从那些从本地帐户。的代码是不同的。和的方式创建它太。这两个帐户,你需要例如网络地址到服务器的其他银行。另一个可能需要数据库的ID。
每一次你需要有一个帐户,你可以明确recreate它,或获得它所有的实现细节。获得本地帐户或帐户约是非常不同的。
这一部分isolating复杂性的应用程序是一个很好的做法。它是一个较小的,符合subdivide复杂的任务,简单的酮。
给出的例子的一个会计应用,但事实上,我们可以更一般。创建对象和创建对象的查询是一个非常普通的问题在任何软件。因此,我们有良好的普通的方式做它在一maintainable干净时尚。
的代码的复杂性,管理学院获得一个特定的对象的创建,对象的知识隐藏在事实没有什么所谓的A或M是一个工厂。
(这是最好的工厂里发现隐藏的复杂性/对象)和接口(这是隐藏的复杂性,如果每个对象实现的)的Java程序员的工具使用管理软件的复杂性。
主要向用户公开接口的框架(而不是具体的实现)
既然您提到了bloch,我将用collections框架给出一个示例。可以看到
另一个例子(但不关注静态工厂)是JDBCAPI。几乎没有类——