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();
    }
}



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