首先,对于private List<String> vehicles = new ArrayList<String>();这句话的解释是我们不仅new一个ArrayList集合,还可以new一个LinkedList集合。而它们都实现了List接口中设计好的方法。
其实,面向接口编程在框架中用的比较多,也就是在做项目的时候我们对外提供的是一些一些接口,主要包括设计的有哪些功能,交给客户去看是否完善。而具体的实现由子类来实现,这部分代码细节不需要提供给客户,即使提供客户也看不懂是不是。这就是所谓的“设计与实现相分离”,以后修改也比较方便。
举个例子,
- package com.bookshop.Service;
- import java.util.List;
- import com.bookshop.Model.Book;
- /**
- * @author jzz
- */
- /** 图书管理业务逻辑接口 */
- public interface BookService {
- /** 浏览所有图书 */
- public List<Book> browseBook();
- /** 浏览某页图书 */
- public List<Book> browseBook(int pageNo,int pageSize);
- /** 统计图书总数 */
- public int countBook();
- /** 装载指定的图书 */
- public Book loadBook(Integer id);
- /** 删除指定的图书 */
- public boolean delBook(Integer id);
- /** 新增或修改图书 */
- public boolean saveOrUpdateBook(Book book);
- }
复制代码- package com.bookshop.ServiceImpl;
- import java.util.List;
- import com.bookshop.Dao.BaseDAO;
- import com.bookshop.Model.Book;
- import com.bookshop.Service.BookService;
- /** 图书管理业务逻辑接口实现 */
- public class BookServiceImpl implements BookService {
- /** 通过依赖注入DAO组件实例 */
- BaseDAO dao;
- /** 新增或修改图书 */
- public boolean saveOrUpdateBook(Book Book){
- boolean status = false;
- try{
- dao.saveOrUpdate(Book);
- status = true;
- }catch(Exception ex){
- ex.printStackTrace();
- }
- return status;
- }
- /** 浏览所有图书 */
- @SuppressWarnings("unchecked")
- public List<Book> browseBook(){
- return dao.listAll("Book");
- }
-
- /** 浏览某页图书 */
- @SuppressWarnings("unchecked")
- public List<Book> browseBook(int pageNo,int pageSize){
- return dao.listAll("Book",pageNo,pageSize);
- }
-
- /** 统计图书总数 */
- public int countBook() {
- return dao.countAll("Book");
- }
-
- /** 删除指定的图书 */
- public boolean delBook(Integer id){
- boolean status = false;
- try{
- dao.delById(Book.class, id);
- status = true;
- }catch(Exception ex){
- ex.printStackTrace();
- }
- return status;
- }
- /** 装载指定的图书 */
- public Book loadBook(Integer id){
- return (Book)dao.loadById(Book.class, id);
- }
- public BaseDAO getDao() {
- return dao;
- }
- public void setDao(BaseDAO dao) {
- this.dao = dao;
- }
- }
复制代码
对于以上的例子,如果我们后期客户需求改了,他想把不同作者但同名的书全删掉,那么你只需在接口中再增加一个按照图书名称删除指定图书的方法,就不用修改上面的按照id删除图书的方法,子类也不会跟着变动。使得程序之间的耦合性降低,便于大型项目的操作。 |