JAVA 設(shè)計模式2

2. 結(jié)構(gòu)型模型(7種)[1]


7種結(jié)構(gòu)模式
2.1 適配器模式(Adapter)

2.1.1 類的適配模式

有一個Source類,擁有一個方法、待適配,目標(biāo)接口時Targetable,通過Adapter類,將Source的功能擴展到Targetabel里。

code:

public class ClassAdapter {
    
    class Source{
        public void method1(){
            System.out.println("this is original method");
        }
    }
    
    interface Targertable{
        void method1();
        void method2();
    }
    
    class Adapter extends Source implements Targertable{

        @Override
        public void method2() {
            System.out.println("this is targetable method");
            
        }
        
    }
    
    public static void main(String[] args) {
        ClassAdapter ca=new ClassAdapter(); 
        Targertable a =ca.new Adapter();
        a.method1();
        a.method2();
    }

}

2.1.2 對象的適配器模式
Adapter 類不繼承Source類 只持有Source類的實例

public class Adapter implements Targetable {  

  

    private Source source;  

      

    public Wrapper(Source source){  

        super();  

        this.source = source;  

    }  

    @Override  

    public void method2() {  

        System.out.println("this is the targetable method!");  

    }  

  

    @Override  

    public void method1() {  

        source.method1();  

    }  

}
2.1.3 接口的適配模式

當(dāng)不希望實現(xiàn)一個接口所有的方法時,可以創(chuàng)建一個抽象類Wrapper,實現(xiàn)所有的方法,我們寫別的類,繼承抽象類即可。


2.2. 裝飾模式

裝飾模式就是給一個對象增加一些新的功能,而且是動態(tài)的,要求裝飾對象和被裝飾對象實現(xiàn)同一個接口,裝飾對象持有被裝飾對象的實例.

Source類是被裝飾類,Decorator類是一個裝飾類,可以為Source類動態(tài)的添加一些功能

public class Decorator implements Sourceable{

    private Sourceable source;
    
    
    public Decorator(Sourceable source) {
        super();
        this.source = source;
    }


    @Override
    public void method() {
        System.out.println("before decorator");
        source.method();
        System.out.println("after decorator");
    }

}

class DecoratorTest{
    public static void main(String[] args) {
        Sourceable source =new Source();
        Decorator ojb = new Decorator(source);
        ojb.method();
    }
}

interface Sourceable{
    void method();
}
class Source implements Sourceable{

    @Override
    public void method() {
        // TODO Auto-generated method stub
        System.out.println("the original method");
    }
    
}
2.3. 橋接模式

橋接模式就是把事物和其具體實現(xiàn)分開,使他們可以各自獨立的變化。
類似于 JDBC DriverManager

/**
*這樣,就通過對Bridge類的調(diào)用,實現(xiàn)了對接口Sourceable的實現(xiàn)類SourceSub1和SourceSub2的調(diào)用。
*/
public class BridgeTest {

    public static void main(String[] args) {
        Bridge bridge=new MyBridge();
        
        SourceSub1 source1 = new SourceSub1();
        bridge.setSource(source1);
        bridge.method();
        
        SourceSub2 source2 = new SourceSub2();
        bridge.setSource(source2);
        bridge.method();
    }
}

interface Sourceable{
    void method();
}

class SourceSub1 implements Sourceable{

    @Override
    public void method() {
        System.out.println("this is the first sub");
        
    }
    
}
class SourceSub2 implements Sourceable{

    @Override
    public void method() {
    System.out.println("this is the second sub");
        
    }
    
}

abstract class Bridge{
    private Sourceable source;
    
    public void method(){
        source.method();
    }

    public Sourceable getSource() {
        return source;
    }

    public void setSource(Sourceable source) {
        this.source = source;
    }
    
}
class MyBridge extends Bridge{
    @Override
    public void method() {
        getSource().method();
    }
}

  1. 適配器模式、裝飾模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。其中適配器模式是各種模式的起源 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容