java設計模式(結構型)之外觀模式

第0章:簡介

外觀模式定義:爲子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用

外觀模式本質:封裝交互,簡化調用

參考:研磨設計模式(書籍),大話設計模式(書籍)

模式圖:

待補充


第1章:實踐

第0節:全部功能外觀模式

(1)接口1(Intf1.java)

package com.mcc.core.designPattern.structure.facade.simpleFacade;

/**
 * 接口1
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:43
 */
public interface Intf1 {
    public void someMethod();
}

(2)接口1實現類(Intf1Impl.java)

package com.mcc.core.designPattern.structure.facade.simpleFacade;

/**
 * 接口1實現類
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:44
 */
public class Intf1Impl implements Intf1 {
    @Override
    public void someMethod() {
        System.out.println("接口1實現類");
    }
}

(3)接口2.java

package com.mcc.core.designPattern.structure.facade.simpleFacade;

/**
 * 接口2
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:44
 */
public interface Intf2 {
    public void someMethod();
}

(4)接口2實現類(Intf2Impl.java)

package com.mcc.core.designPattern.structure.facade.simpleFacade;

/**
 * 接口2實現類
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:45
 */
public class Intf2Impl implements Intf2 {
    @Override
    public void someMethod() {
        System.out.println("接口2實現類");
    }
}

(5)外觀類(Facade.java)

package com.mcc.core.designPattern.structure.facade.simpleFacade;

/**
 * 外觀類
 *
 * 外觀模式的定義:爲子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用
 * 外觀模式的本質:封裝交互,簡化調用
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:46
 */
public class Facade {


    /**
     * 外觀入口,這裏可以用單例模式實現
     */
   public void entrance(){
       Intf1 intf1 = new Intf1Impl();
       intf1.someMethod();
       Intf2 intf2 = new Intf2Impl();
       intf2.someMethod();
   }
}

(6)客戶端測試(Client.java)

package com.mcc.core.designPattern.structure.facade.simpleFacade;

/**
 * 客戶端測試
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:56
 */
public class Client {
    public static void main(String args[]){
       //通過外觀調用
        new Facade().entrance();
    }
}

第1節:部分功能外觀模式(控制訪問)

(1)接口1(Intf1.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 接口1
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午8:59
 */
public interface Intf1 {
    public void method1A();
    public void method1B();
}

(2)接口1實現類(Intf1Impl.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 接口1實現類
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午9:00
 */
public class Intf1Impl implements Intf1 {
    @Override
    public void method1A() {
        System.out.println("接口1實現類方法1A,系統內部使用");
    }

    @Override
    public void method1B() {
        System.out.println("接口1實現類方法1B,系統外部使用");
    }
}

(3)接口2(Intf2.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 接口2
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午9:03
 */
public interface Intf2 {
    public void method2A();
    public void method2B();
}

(4)接口2實現類(Intf2Impl.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 接口2實現類
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午9:04
 */
public class Intf2Impl implements Intf2 {
    @Override
    public void method2A() {
        System.out.println("接口2實現類方法2A,系統內部使用");
    }

    @Override
    public void method2B() {
        System.out.println("接口2實現類方法2B,系統外部使用");
    }
}

(5)外觀接口(FacadeIntf.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 外觀接口,外部訪問
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午9:11
 */
public interface FacadeIntf {
    public void method1B();
    public void method2B();
}

(6)外觀實現類(FacadeImpl.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 外觀實現類
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午9:12
 */
public class FacadeImpl implements FacadeIntf {
    @Override
    public void method1B() {
        new Intf1Impl().method1B();
    }

    @Override
    public void method2B() {
        new Intf2Impl().method2B();
    }
}

(7)客戶端測試(Client.java)

package com.mcc.core.designPattern.structure.facade.complexFacade;

/**
 * 客戶端測試
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-11  下午9:13
 */
public class Client {
    public static void main(String args[]){
        //調用外觀接口方法
        FacadeIntf facadeIntf = new FacadeImpl();
        facadeIntf.method1B();
        facadeIntf.method2B();
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章