6大设计模式(4):接口隔离原则
接口隔離原則:
?
接口分兩種:
實例接口:Java中的類
類接口:interface定義的接口
?
原則的兩種定義:
1.client不應該依賴它不須要的接口
2.類間的依賴關系應該建立在最小的接口上
?
須要對接口進行細化。保持清純性。
接口盡量細化,同一時候接口中的方法盡量少,增強專門性。
?
?
接口隔離原則是對接口進行規范約束,包括4層含義:
1.接口要盡量小
這是原則的核心定義??墒切∫彩怯邢薅鹊?#xff0c;不能違反單一 職責原則。
2.接口要高內聚
什么是高內聚?就是提高類、接口的處理能力。降低對外的交互。
類提供一個方法。你僅僅須要知道調用這種方法就能夠實現一系列的功能,可是詳細是如何實現的就不知道了。詳細到接口隔離原則就是在接口中盡量少的發布public方法。
3.定制服務
單獨為當中的某一模塊抽象成一個接口。
4.接口的設計是有限的
需求總是在變化的。
?
用書中的樣例“星探尋找美女”來進一步理解上述四個含義。
首先得有一個美女的接口和星探的抽象接口:
interface IPrettyGirl {// 長得好看public void goodLooking();// 身材好public void niceFigure();// 有氣質public void greatTemperament(); }abstract class AbstractSearcher {protected IPrettyGirl prettyGirl;public AbstractSearcher(IPrettyGirl prettyGirl) {this.prettyGirl = prettyGirl;}public abstract void show(); }
 ?
實現美女類和星探類:
?
class PrettyGirl implements IPrettyGirl {private String name;public PrettyGirl(String name) {this.name = name;}@Overridepublic void goodLooking() {System.out.println(name + "--->臉蛋非常美麗");}@Overridepublic void niceFigure() {System.out.println(name + "--->身材非常好");}@Overridepublic void greatTemperament() {System.out.println(name + "--->氣質好");}}class Searcher extends AbstractSearcher {public Searcher(IPrettyGirl prettyGirl) {super(prettyGirl);}@Overridepublic void show() {System.out.println("-----美女信息例如以下-----");// 展示面容super.prettyGirl.goodLooking();// 展示身材super.prettyGirl.niceFigure();// 展示氣質super.prettyGirl.greatTemperament();}}
 ?
場景類:
?
public class Client {public static void main(String[] args) {IPrettyGirl girl = new PrettyGirl("圓圓");AbstractSearcher searcher = new Searcher(girl);searcher.show();} }
 ?
可是美女并不一定都是滿足長得美麗、身材好、有氣質這三個條件。僅僅滿足當中一個也能夠算是一個“美女”。僅僅只是不是那么完美罷了。比方說。背影殺手。
?
那么詳細到這個程序我們應該怎么去實現呢?PrettyGirl實現IPrettyGirl接口里的所有方法,所以僅僅能對IPrettyGirl接口進行拆分、細化。拆分成兩個或幾個接口。這個視需求而定。
如果我們將美女分為氣質型美女和外形美的美女,這樣就是兩個接口。外形美女也能夠分成?(臉)長得美麗的美女和身材好的美女。這樣就是拆分成三個接口。各自是:IGoodLookingGirl、INiceFigureGirl、IGreatTemperamentGirl。
?
美女的接口及實現類:
?
interface IGoodLookingGirl {public void goodLooking(); }interface INiceFigureGirl {public void niceFigure(); }interface IGreatTemperamentGirl {public void greatTemperament(); }// 長得好看的美女 class GoodLookingGirl implements IGoodLookingGirl {private String name;public GoodLookingGirl(String name) {this.name = name;}@Overridepublic void goodLooking() {System.out.println(name + "--->臉蛋非常美麗");} }// 身材好的美女 class NiceFigureGirl implements INiceFigureGirl {private String name;public NiceFigureGirl(String name) {this.name = name;}@Overridepublic void niceFigure() {System.out.println(name + "--->身材好");}}// 有氣質的美女 class GreatTemperamentGirl implements IGreatTemperamentGirl {private String name;public GreatTemperamentGirl(String name) {this.name = name;}@Overridepublic void greatTemperament() {System.out.println(name + "--->有氣質");}}// 完美 class PrettyGirl implements IGoodLookingGirl, INiceFigureGirl,IGreatTemperamentGirl {private String name;public PrettyGirl(String name) {this.name = name;}@Overridepublic void greatTemperament() {System.out.println(name + "--->有氣質");}@Overridepublic void niceFigure() {System.out.println(name + "--->身材好");}@Overridepublic void goodLooking() {System.out.println(name + "--->臉蛋非常美麗");}}星探的接口及實現類:
?
abstract class AbstractSearcher {protected PrettyGirl prettyGirl;protected GoodLookingGirl goodLookingGirl;protected GreatTemperamentGirl greatTemperamentGirl;protected NiceFigureGirl niceFigureGirl;public AbstractSearcher(PrettyGirl prettyGirl) {this.prettyGirl = prettyGirl;}public AbstractSearcher(IGoodLookingGirl goodLookingGirl) {this.goodLookingGirl = (GoodLookingGirl) goodLookingGirl;}public AbstractSearcher(IGreatTemperamentGirl greatTemperamentGirl) {this.greatTemperamentGirl = (GreatTemperamentGirl) greatTemperamentGirl;}public AbstractSearcher(INiceFigureGirl niceFigureGirl) {this.niceFigureGirl = (NiceFigureGirl) niceFigureGirl;}public abstract void showPrettyGirl();public abstract void showGoodLookingGirl();public abstract void showNiceFigureGirl();public abstract void showGreatTemperamentGirl(); }class Searcher extends AbstractSearcher {public Searcher(IGoodLookingGirl goodLookingGirl) {super(goodLookingGirl);}public Searcher(INiceFigureGirl niceFigureGirl) {super(niceFigureGirl);}public Searcher(IGreatTemperamentGirl temperamentGirl) {super(temperamentGirl);}public Searcher(PrettyGirl prettyGirl) {super(prettyGirl);}@Overridepublic void showPrettyGirl() {super.prettyGirl.goodLooking();super.prettyGirl.niceFigure();super.prettyGirl.greatTemperament();}@Overridepublic void showGoodLookingGirl() {super.goodLookingGirl.goodLooking();}@Overridepublic void showNiceFigureGirl() {super.niceFigureGirl.niceFigure();}@Overridepublic void showGreatTemperamentGirl() {super.greatTemperamentGirl.greatTemperament();}}
 ?
場景類:
?
?
public class Client {public static void main(String[] args) {IGoodLookingGirl goodLookingGirl = new GoodLookingGirl("冰冰");INiceFigureGirl niceFigureGirl = new NiceFigureGirl("圓圓");IGreatTemperamentGirl greatTemperamentGirl = new GreatTemperamentGirl("芳芳");PrettyGirl prettyGirl = new PrettyGirl("張三");AbstractSearcher goodlookingGirlsearcher = new Searcher(goodLookingGirl);AbstractSearcher niceFigureGirlSearcher = new Searcher(niceFigureGirl);AbstractSearcher greatTemperamentGirlSearcher = new Searcher(greatTemperamentGirl);AbstractSearcher prettyGirlSearcher = new Searcher(prettyGirl);goodlookingGirlsearcher.showGoodLookingGirl();niceFigureGirlSearcher.showNiceFigureGirl();greatTemperamentGirlSearcher.showGreatTemperamentGirl();prettyGirlSearcher.showPrettyGirl();} }
 ?
執行結果:
冰冰--->臉蛋非常美麗
 圓圓--->身材好
 芳芳--->有氣質
 張三--->臉蛋非常美麗
 張三--->身材好
 張三--->有氣質
?
?
?
寫完之后本人就懵了,事實上寫的過程中就已經懵了,越寫越認為理解的有問題。怎么會這么麻煩。
。。
?
?
?
轉載于:https://www.cnblogs.com/mfrbuaa/p/5367209.html
總結
以上是生活随笔為你收集整理的6大设计模式(4):接口隔离原则的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: UGUI 下拉滚动框
- 下一篇: p3p sso
