A. 《單一職責准則》與《介面隔離原則》有什麼區別
介面隔離原則表明客戶端不應該被強迫實現一些他們不會使用的介面,應該把胖介面中的方法分組,然後用多個介面代替它,每個介面服務於一個子模塊。
介面隔離原則
不應該強迫客戶端依賴於他們不會使用的介面。
實例
下面是一個違反了介面隔離原則的例子。我們使用Manager類代表一個管理工人的管理者。有兩種類型的工人:普通的和高效的,這兩種工人都需要吃午飯。現在來了一批機器人,它們同樣為公司工作,但是他們不需要吃午飯。一方面Robot類需要實現IWoker介面,因為他們要工作,另一方面,它們又不需要實現IWorker介面,因為它們不需要吃飯。
在這種情況下IWorker就被認為是一個被污染了的介面。
如果我們保持現在的設計,那麼Robot類將被迫實現eat()方法,我們可以寫一個啞類它什麼也不做(比如說它只用一秒鍾的時間吃午飯),但是這會對程序造成不可預料的結果(例如管理者看到的報表中顯示被帶走的午餐多於實際的人數)。
根據介面隔離原則,一個靈活的設計不應該包含被污染的介面。對於我們的例子來說,我們應該把IWorker分離成2個介面。
3. interface IWorker {
4. public void work();
5.
6. public void eat();
7. }
8.
9. class Worker implements IWorker {
10. public void work() {
11. // ....working
12. }
13.
14. public void eat() {
15. // ...... eating in launch break
16. }
17. }
18.
19. class SuperWorker implements IWorker{
20. public void work() {
21. //.... working much more
22. }
23.
24. public void eat() {
25. //.... eating in launch break
26. }
27. }
28.
29. class Manager {
30. IWorker worker;
31.
32. public void setWorker(IWorker w) {
33. worker=w;
34. }
35.
36. public void manage() {
37. worker.work();
38. }
39. }
// interface segregation principle - bad example
interface IWorker {
public void work();
public void eat();
}
class Worker implements IWorker {
public void work() {
// ....working
}
public void eat() {
// ...... eating in launch break
}
}
class SuperWorker implements IWorker{
public void work() {
//.... working much more
}
public void eat() {
//.... eating in launch break
}
}
class Manager {
IWorker worker;
public void setWorker(IWorker w) {
worker=w;
}
public void manage() {
worker.work();
}
}
下面是遵循介面隔離原則的代碼。通過把IWorker分離成兩個介面,Robot類不需要再被強迫實現eat()方法。如果我們需要為Robot類添加其他的功能,例如重新充電,我們可以創建一個新的IRechargeable介面,其中包含一個重新充電的方法recharge。
Java代碼 復制代碼
1. //interface segregation principle - good example
2.
3. interface IWorkable {
4. public void work();
5. }
6.
7. interface IFeedable{
8. public void eat();
9. }
10.
11. class Worker implements IWorkable, IFeedable {
12. public void work() {
13. // ....working
14. }
15.
16. public void eat() {
17. //.... eating in launch break
18. }
19. }
20.
21. class SuperWorker implements IWorkable, IFeedable{
22. public void work() {
23. //.... working much more
24. }
25.
26. public void eat() {
27. //.... eating in launch break
28. }
29. }
30.
31. class Robot implements IWorkable{
32. public void work() {
33. // ....working
34. }
35. }
36.
37. class Manager {
38. IWorkable worker;
39.
40. public void setWorker(IWorkable w) {
41. worker = w;
42. }
43.
44. public void manage() {
45. worker.work();
46. }
47. }
//interface segregation principle - good example
interface IWorkable {
public void work();
}
interface IFeedable{
public void eat();
}
class Worker implements IWorkable, IFeedable {
public void work() {
// ....working
}
public void eat() {
//.... eating in launch break
}
}
class SuperWorker implements IWorkable, IFeedable{
public void work() {
//.... working much more
}
public void eat() {
//.... eating in launch break
}
}
class Robot implements IWorkable{
public void work() {
// ....working
}
}
class Manager {
IWorkable worker;
public void setWorker(IWorkable w) {
worker = w;
}
public void manage() {
worker.work();
}
}
總結
如果已經設計成了胖介面,可以使用適配器模式隔離它。
像其他設計原則一樣,介面隔離原則需要額外的時間和努力,並且會增加代碼的復雜性,但是可以產生更靈活的設計。如果我們過度的使用它將會產生大量的包含單一方法的介面,所以需要根據經驗並且識別出那些將來需要擴展的代碼來使用它。
B. 什麼是介面隔離原則
就是有些埠不用但是你要是不隔離可能會影響別的埠 一般式高電阻 或是接地
C. 介面隔離原則的簡介
一、ISP簡介(ISP--Interface Segregation Principle):
使用多個專門的介面比使用單一的總介面要好。
一個類對另外一個類的依賴性應當是建立在最小的介面上的。
一個介面代表一個角色,不應當將不同的角色都交給一個介面。沒有關系的介面合並在一起,形成一個臃腫的大介面,這是對角色和介面的污染。
「不應該強迫客戶依賴於它們不用的方法。介面屬於客戶,不屬於它所在的類層次結構。」這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫用戶使用它們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。
D. 對象的三個基本要素
對象,常有兩層意思,指行動或思考時作為目標的事物或特指戀愛的對方等含義。
我國學者唐震在《接受與選擇》一書中把對象看成是圍繞著人的、被人用來接受或選擇的特定事物。他提出了對象序列說:
個體的對象世界是指從個體誕生開始就圍繞在個體周圍的世界,它包括支持該個體存在的物質實體和用於該個體發展的各種因素。從個體的生存處境看,個體的對象世界是我們通常所指的廣泛意義上的自然界以及這個自然界的展開形式。這個世界由低級到高級依次展開,它們呈現給個體的是由「原始自然——人化自然——能動自然——虛擬自然」等所構成的序列。
中文名
對象
拼音
ì xìang
詞義
目標
出自
《套不住的手》
快速
導航
哲學名詞信息技術名詞面向對象
詞語概念
基本信息
【詞目】對象
【英譯】character
【注音】ㄉㄨㄟˋ ㄒㄧㄤˋ
【同義詞】工具、器材、東西、目標、標的、目的、方向、宗旨
基本解釋
(1) [target;object]:目標
(2) [wife or husband]:指夫婦中的一方
(3) [character]:描寫或寫實的特定人或物
小說中描寫的主要對象[1]
引證解釋
1. 指行動或思考時作為目標的事物。
趙樹理《套不住的手》:「訓練的對象雖說是初參加生產的人,可是也有例外。」
2. 特指戀愛的對方。
指男、女朋友關系,戀愛雙方的行為的稱呼如「談對象、處對象」。婚後,一般若稱家屬則特指老公或老婆。
冰心《我的學生》:「她的男朋友很多,卻沒聽說過有哪一個特別好的。您說的對,她不會在同學中選對象,她一定會嫁給外交人員。」
劉紹棠《小荷才露尖尖角》:「如花似玉的一個姑娘,親娘又是個說媒拉纖的老手, 花碧蓮 卻一直沒有找到對象。」
3.北方方言亦指物色配偶。
谷峪《強扭的瓜不甜》:「咱長大自個對象去。」[1]
4.計算機語言。
對象就是客觀世界中存在的人、事、物體等實體在計算機邏輯中的映射
E. 介面分離原則的好處
將軟體組件作為一個單獨的過程,目的是將組件作為構造軟體的「零部件」。位置透明,介面固定,自描述,重用方便,安全。使用多個專門的介面比使用單一的總介面要好。
一個類對另外一個類的依賴性應當是建立在最小的介面上的。
一個介面代表一個角色,不應當將不同的角色都交給一個介面。沒有關系的介面合並在一起,形成一個臃腫的大介面,這是對角色和介面的污染。
「不應該強迫客戶依賴於它們不用的方法。介面屬於客戶,不屬於它所在的類層次結構。」這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫用戶使用它們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。介面隔離原則表明客戶端不應該被強迫實現一些他們不會使用的介面,應該把胖介面中的方法分組,然後用多個介面代替它,每個介面服務於一個子模塊。
介面隔離原則
不應該強迫客戶端依賴於他們不會使用的介面。
實例
下面是一個違反了介面隔離原則的例子。我們使用Manager類代表一個管理工人的管理者。有兩種類型的工人:普通的和高效的,這兩種工人都需要吃午飯。現在來了一批機器人,它們同樣為公司工作,但是他們不需要吃午飯。一方面Robot類需要實現IWoker介面,因為他們要工作,另一方面,它們又不需要實現IWorker介面,因為它們不需要吃飯。
在這種情況下IWorker就被認為是一個被污染了的介面。
如果我們保持現在的設計,那麼Robot類將被迫實現eat()方法,我們可以寫一個啞類它什麼也不做(比如說它只用一秒鍾的時間吃午飯),但是這會對程序造成不可預料的結果(例如管理者看到的報表中顯示被帶走的午餐多於實際的人數)。
根據介面隔離原則,一個靈活的設計不應該包含被污染的介面。對於我們的例子來說,我們應該把IWorker分離成2個介面。
F. solid原則是什麼
solid原則包括以下五個:
1、單一職責原則(SRP):表明一個類有且只有一個職責。一個類就像容器一樣,它能添加任意數量的屬性、方法等。
2、開放封閉原則(OCP):一個類應該對擴展開放,對修改關閉。這意味一旦創建了一個類並且應用程序的其他部分開始使用它,就不應該修改它。
3、里氏替換原則(LSP):派生的子類應該是可替換基類的,也就是說任何基類可以出現的地方,子類一定可以出現。值得注意的是,當通過繼承實現多態行為時,如果派生類沒有遵守LSP,可能會讓系統引發異常。
4、介面隔離原則(ISP):表明類不應該被迫依賴他們不使用的方法,也就是說一個介面應該擁有盡可能少的行為,它是精簡的,也是單一的。
5、依賴倒置原則(DIP):表明高層模塊不應該依賴低層模塊,相反,他們應該依賴抽象類或者介面。這意味著不應該在高層模塊中使用具體的低層模塊。
(6)介面隔離原則發明人擴展閱讀:
DIP原則規定了在類之間存在依賴關系的情況下,應使用抽象(如介面)來定義它們,而不是直接引用類。 這減少了由較低級別模塊的變化導致的錯誤,導致較高層的錯誤。 DIP經常在依賴注入中被使用。
當開發者遵循ISP原則時,大類實現了多個更小的介面,根據用途對功能進行分組。依賴關系與那些相關聯用於松耦合,增加健壯性,靈活性以及可復用性。
G. 介面隔離原則適用於哪個設計模式
介面隔離原則表明客戶端不應該被強迫實現一些他們不會使用的介面,應該把胖介面中的方法分組,然後用多個介面代替它,每個介面服務於一個子模塊。
介面隔離原則
不應該強迫客戶端依賴於他們不會使用的介面。
實例
下面是一個違反了介面隔離原則的例子。我們使用Manager類代表一個管理工人的管理者。有兩種類型的工人:普通的和高效的,這兩種工人都需要吃午飯。現在來了一批機器人,它們同樣為公司工作,但是他們不需要吃午飯。一方面Robot類需要實現IWoker介面,因為他們要工作,另一方面,它們又不需要實現IWorker介面,因為它們不需要吃飯。
在這種情況下IWorker就被認為是一個被污染了的介面。
如果我們保持現在的設計,那麼Robot類將被迫實現eat()方法,我們可以寫一個啞類它什麼也不做(比如說它只用一秒鍾的時間吃午飯),但是這會對程序造成不可預料的結果(例如管理者看到的報表中顯示被帶走的午餐多於實際的人數)。
根據介面隔離原則,一個靈活的設計不應該包含被污染的介面。對於我們的例子來說,我們應該把IWorker分離成2個介面。
H. 面向對象設計的6個設計原則最早誰提出的
Booch最先描述了面向對象的軟體開發方法的基礎問題。
面向對象設計的六大基本原則:
1)開閉原則
2)里氏代換原則
3)依賴倒轉原則
4)介面隔離原則
5)迪米特法則
6)合成/聚合復用原則
I. C#中什麼叫介面隔離原則
Bars bar = new Bars();
bar.setId(rs.getLong("id"));
bar.setName(rs.getString("name"));
bar.setType(rs.getInt("type"));
bar.setCreatorId(rs.getLong("creator_id"));
resultList.add(bar);
if (currentNum == skipEnd - 1)
break;
}