設(shè)計模式的六大原則
-
開閉原則
對擴展開放灶泵,對修改關(guān)閉。 -
里氏代換原則
任何出現(xiàn)基類的地方都可以用其子類去替換刨秆。 -
依賴倒轉(zhuǎn)原則
依賴抽象而不依賴具體實現(xiàn)囱井。 -
接口隔離原則
盡量使用多個隔離的接口而不是單個接口來降低耦合。 -
迪米特法則
一個實體應(yīng)該盡量少的與其它實體間有任何關(guān)系六剥,使得類和模塊間相互獨立晚顷。 -
合成復(fù)用原
盡量使用合成/聚合的方式而不是繼承來復(fù)用原有類的特性功能。
結(jié)構(gòu)型模式
適配器模式
把原有類的功能進行封裝疗疟,轉(zhuǎn)換成另一個接口的實現(xiàn)该默。使能通過調(diào)用新接口來調(diào)用原有類的功能
Paste_Image.png
class Original
public class Original{
public void originalMethod(){
//原始功能實現(xiàn)
}
}
interface Target
public interface Target{
void newMethod();
}
Class Adapter
public class Adapter{
private Original original;
public Adapter(Original original){
this.original = original;
}
@Override
public void newMethod(){
original.originalMethod();
}
}
裝飾模式
裝飾類和被裝飾類實現(xiàn)相同的接口,裝飾類通過持有被裝飾類的實例來動態(tài)增強被裝飾類的功能
Paste_Image.png
interface Common
public interface Common{
void commonMethod();
}
Class Source
public class Source implements Common{
@Override
public void commonMethod(){
}
}
class Decorator
public class Decorator implements Common{
private Source source;
public Adapter(Source source){
this.source = source;
}
@Override
public void commonMethod(){
//增強邏輯
......
source.commonMethod();
//增強邏輯
......
}
}
代理模式
代理對象提供一層封裝來控制對被代理對象的訪問
與裝飾模式的實現(xiàn)基本相同策彤,不同點是:裝飾模式關(guān)注的是對被裝飾模式功能的增強栓袖,被裝飾模式一定會執(zhí)行匣摘。代理模式關(guān)注的是對被代理對象的訪問控制,被代理模式不一定會執(zhí)行裹刮。
外觀模式
通過對一系列復(fù)雜有一定關(guān)聯(lián)性的邏輯進行封裝音榜,解除他們之間的依賴性,屏蔽底層復(fù)雜的細節(jié)捧弃,對外提供一個統(tǒng)一的簡單的接口
例如:回家之后就要把家里的燈打開赠叼,空調(diào)打開,熱水器打開违霞。離開家的時候又要把所有的燈嘴办,空調(diào),熱水器都關(guān)了买鸽。
Paste_Image.png
class Light
public class Light{
public void start(){
}
public void stop(){
}
}
class Facader
public class Facader{
Light light;
Conditinor conditionorl
WaterHeader waterHeader;
public Facader(){
light = new Light();
conditionor = new Conditionor();
waterHeader = new WaterHeader();
}
public void start(){
light.start();
conditionor.start();
waterHeader.start();
}
public void stop(){
light.stop();
conditionor.stop();
waterHeader.stop();
}
}
簡單記錄自己對設(shè)計模式相關(guān)的理解涧郊,便于復(fù)習用