1. java面向介面的編程什麼意思什麼情況下去用
做大型項目時,有些功能會多次用到,為了程序的可拓展性和可利用性,會選擇介面
2. 什麼是面向介面編程及一個簡單實例
面向介面編程是一個很高級的概念了以前的面向對象編程,以java為例子,主要的操作針對對象來進行,把要處理的問題簡化分解成對象的方式來解決,對對象的使用主要是引用對象提供的方法後來的使用過程中,逐漸有人發現,當程序的內容不斷擴大,程序的編寫和完善需要更多的人員來合作完成的時候,面向對象的方式有些不便就很突出了,主要的就是類的繼承和方法的重寫,查詢起來和引用起來很多不便。所以現在有面向介面編程的理念提出來,介面就是標准,介面就是規范,但是介面沒有實現的方法,這樣避免了很多類的繼承的問題,特別在大型的程序的編寫方面有廣泛的應用。什麼是面向介面編程及一個簡單實例
3. 有誰幫我闡述一下:面向介面編程的思想,及其優點
首先你要知道軟體工程的概念是什麼!簡單的說軟體工程就是讓程序模塊化,把特定的代碼邏輯獨立封裝,只傳入參數和返回參數,外部集中調用。這也就是C、c++、java、c#中的方法、函數、類庫頭文件等體現。
而介面也是基於這個目的產生的。首先說說為什麼要用到介面,我是學java的,所以以java舉例,前面說了把代碼邏輯獨立的封裝確實能增加代碼的重用性,具有更好的性能。
但是同樣的問題也產生了,如果系統結構很復雜,多個開發人員就不能做到有效的協作了。就像用零件拼裝一輛汽車一樣,很多工人一起工作,他們怎麼知道哪2個零件之間結合在一起,怎麼耦合。這和軟體工程很類似,多個開發人員一起開發不同的模塊,他們同樣也會遇到程序結構耦合的問題,這都是在開發時很令人頭疼的問題。
介面就是為解決這個問題誕生的,他把方法和類封裝的更徹底,只顯示入口參數和返回參數,而具體的實現類,和方法實現都可以完全隱藏起來,這樣做就可以制定一個統一的標准,即使因為開發人員人多腦雜,模塊間的代碼風格和思路不同,也完全不影響整個系統的架構,這樣使得系統的復雜性得到有效控制,降低開發的難度和成本。舉個生動的例子就是電腦主板的生產商他無法知道他生產的主板上將要用的CPU是什麼型號的,用的內存是什麼規格的。但是只要制定統一的行業標准,他就可以預留指定的介面,無論你CPU是基於什麼工作原理,也無論你內存多大,只要符合此介面的標准,各個原件就能有效協作組成一台電腦。
4. 什麼是面向介面編程
什麼是介面?
-- 在表面上是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或其他介面所實現(或者也可以說繼承), 由關鍵詞 interface 修飾。
什麼是面向介面編程?
-- 在系統分析或架構設計中,每個層級的程序並不是直接提供程序服務,而是定義一組介面,通過實現介面來提供功能。面向介面編程實際是面向對象編程的一部分。
面向介面編程的優點?
1、介面的定義和實現分開(分開有什麼好處呢?)
首先,項目一般是由團隊共同開發來完成的,在其中,介面的定義一般是由架構師來設定,然後又編程人員來實現完成,架構師根據架構、設計規則來設定介面,把握項目的整體視圖和編寫規范,編程人員實現具體業務邏輯,分工明確,程序清晰。
其次,從實現上看,介面的定義時間很短,但介面的實現周期相對較長,若一個編程人員需要調用其他人員編寫的某個方法時,可以採用多態的方式獲取介面對象,來調用方法,這樣保證團隊共同完成開發。
2、介面可以有多個實現類,便於以後的業務擴展
什麼意思呢?
-- 比如實現類的業務需要擴展功能,此時可以採用重新實現介面的方式,這樣降低了程序的冗餘 和 一個類寫太多行代碼的尷尬。
另外,介面的多實現易於通過配置文件的方式配置介面的實現類(這個是指在spring中管理對象的時候)。
5. (Java)誰能給個「面向介面編程」的例子
很簡單啊,我給你一個java類庫里的介面怎樣啊?是一個經常用到的MouseListener:
/*
* @(#)MouseListener.java 1.17 03/12/19
*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.awt.event;
import java.util.EventListener;
/**
* The listener interface for receiving "interesting" mouse events
* (press, release, click, enter, and exit) on a component.
* (To track mouse moves and mouse drags, use the
* <code>MouseMotionListener</code>.)
* <P>
* The class that is interested in processing a mouse event
* either implements this interface (and all the methods it
* contains) or extends the abstract <code>MouseAdapter</code> class
* (overriding only the methods of interest).
* <P>
* The listener object created from that class is then registered with a
* component using the component's <code>addMouseListener</code>
* method. A mouse event is generated when the mouse is pressed, released
* clicked (pressed and released). A mouse event is also generated when
* the mouse cursor enters or leaves a component. When a mouse event
* occurs, the relevant method in the listener object is invoked, and
* the <code>MouseEvent</code> is passed to it.
*
* @author Carl Quinn
* @version 1.17, 12/19/03
*
* @see MouseAdapter
* @see MouseEvent
* @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
* @see <a href="http://www.awl.com/cp/javaseries/jcl1_2.html">Reference: The Java Class Libraries (update file)</a>
*
* @since 1.1
*/
public interface MouseListener extends EventListener {
/**
* Invoked when the mouse button has been clicked (pressed
* and released) on a component.
*/
public void mouseClicked(MouseEvent e);
/**
* Invoked when a mouse button has been pressed on a component.
*/
public void mousePressed(MouseEvent e);
/**
* Invoked when a mouse button has been released on a component.
*/
public void mouseReleased(MouseEvent e);
/**
* Invoked when the mouse enters a component.
*/
public void mouseEntered(MouseEvent e);
/**
* Invoked when the mouse exits a component.
*/
public void mouseExited(MouseEvent e);
}
介面與類的寫法差不多,這個介面放在MouseListener.java(稱為一個編輯單元)里.
6. 面向介面編程,具體怎麼操作
面向介面編程[zz]
在前面的章節中,我們提到一個介面設計的例子。為什麼我們提倡介面的設計呢?Martin Fowler在他的分析模式一書中指出,分析問題應該站在概念的層次上,而不是站在實現的層次上。什麼叫做概念的層次呢?簡單的說就是分析對象該做什麼,而不是分析對象怎麼做。前者屬於分析的階段,後者屬於設計甚至是實現的階段。在需求工程中有一種稱為CRC卡片的玩藝兒,是用來分析類的職責和關系的,其實那種方法就是從概念層次上進行面向對象設計。因此,如果要從概念層次上進行分析,這就要求你從領域專家的角度來看待程序是如何表示現實世界中的概念的。下面的這句話有些拗口,從實現的角度上來說,概念層次對應於合同,合同的實現形式包括介面和基類。簡單的說吧,在概念層次上進行分析就是設計出介面(或是基類),而不用關心具體的介面實現(實現推遲到子類再實現)。結合上面的論述,我們也可以這樣推斷,介面應該是要符合現實世界的觀念的。
在Martin Fowler的另一篇著作中提到了這樣一個例子,非常好的解釋了介面編程的思路:
interface Person {
public String name();
public void name(String newName);
public Money salary ();
public void salary (Money newSalary);
public Money payAmount ();
public void makeManager ();
}
interface Engineer extends Person{
public void numberOfPatents (int value);
public int numberOfPatents ();
}
interface Salesman extends Person{
public void numberOfSales (int numberOfSales);
public int numberOfSales ();
}
interface Manager extends Person{
public void budget (Money value);
public Money budget ();
}
可以看到,為了表示現實世界中人(這里其實指的是員工的概念)、工程師、銷售員、經理的概念,代碼根據人的自然觀點設計了繼承層次結構,並很好的實現了重用。而且,我們可以認定該介面是相對穩定的。我們再來看看實現部分:
public class PersonImpFlag implements Person, Salesman, Engineer,Manager{
// Implementing Salesman
public static Salesman newSalesman (String name){
PersonImpFlag result;
result = new PersonImpFlag (name);
result.makeSalesman();
return result;
};
public void makeSalesman () {
_jobTitle = 1;
};
public boolean isSalesman () {
return _jobTitle == 1;
};
public void numberOfSales (int value){
requireIsSalesman () ;
_numberOfSales = value;
};
public int numberOfSales () {
requireIsSalesman ();
return _numberOfSales;
};
private void requireIsSalesman () {
if (! isSalesman()) throw new PreconditionViolation ("Not a Salesman") ;
};
private int _numberOfSales;
private int _jobTitle;
}
這是其中一種被稱為內部標示(Internal Flag)的實現方法。這里我們只是舉出一個例子,實際上我們還有非常多的解決方法,但我們並不關心。因為只要介面足夠穩定,內部實現發生再大的變化都是允許的。如果對實現的方式感興趣,可以參考Matrin Fowler的角色建模的文章或是我在閱讀這篇文章的一篇筆記。
通過上面的例子,我們可以了解到,介面和實現分離的最大好處就是能夠在客戶端未知的情況下修改實現代碼。這個特性對於分層技術是非常適用的。一種是用在層和層之間的調用。層和層之間是最忌諱耦合度過高或是改變過於頻繁的。設計優秀的介面能夠解決這個問題。另一種是用在那些不穩定的部分上。如果某些需求的變化性很大,那麼定義介面也是一種解決之道。舉個不恰當的例子,設計良好的介面就像是我們日常使用的萬用插座一樣,不論插頭如何變化,都可以使用。
最後強調一點,良好的介面定義一定是來自於需求的,它絕對不是程序員絞盡腦汁想出來的。