设计模式之——Facade模式

时间:2024-03-12 21:22:40

    Facade模式,又叫做窗口模式,指的是针对于庞大的类之间错综复杂的关系而提出的一种想法,就相当于我们开发web应用程序的时候使用的controller,service,dao层一样,把底部的与数据库交互的类以及对数据进行操作的类给封装起来,对外只提供contorller的数据接口,而这个controller就相当于是一个窗口。所以,我觉得,窗口模式,更多的是一种思维方式,同样的工具类的思维方式也是同这个相似。

    下面就这种思维方式,提供一个具体的实例:设计了一个数字计算器,可以将数字转换成字符串。(这只是随便写的,只是为了展示facade模式的功能,并没有很认真。)

  • Calculator类,就相当于是窗口
package site.wangxin520.gof.facade.damo;

/**
 * 自定义的一个计算器的类,这个类只负责对外提供一个运算方法
 * @author wangXgnaw
 *
 */
public class Calculator {

    private Calculator(){}
    
    /**
     * 
     * @param num
     */
    public static String operate(int num){
        int operator = NumOperator.operator(num);
        String exchange = Exchange.exchange(operator);
        return exchange;
    }
    
}
  • NumOperator数字操作类
package site.wangxin520.gof.facade.damo;

/**
 * 对数字进行操作
 * 
 * @author wangXgnaw
 *
 */
public class NumOperator {

    private NumOperator() {
    }

    /**
     * 对外提供对数字进行操作的方法
     * 
     * @param num
     *            提供一个数字
     * @return int 返回一个新的数字
     */
    public static int operator(int num) {
        num = num * 3;
        num = num + 10086;
        return num;
    }

}
  • Exchange数字转换类
package site.wangxin520.gof.facade.damo;

/**
 * 将数字转换成字符串的操作
 * @author wangXgnaw
 *
 */
public class Exchange {

    private Exchange(){}
    
    private static String[] arr={"亲亲","猪头","么么哒","爱你","哈哈","傻了么","略略略","吻你","好","不要"};
    
    /**
     * 将数字转换成字符串
     * @param num 数字
     * @return String 字符串
     */
    public static String exchange(int num){
        
        StringBuilder sb=new StringBuilder();
        
        String string=num+"";
        
        for (int i = 0; i < string.length(); i++) {
            
            num = Integer.parseInt(string.charAt(i)+"");
            
            sb.append(arr[num]);
            
        }
        
        return sb.toString();
    }
    
}
  • 测试类
package site.wangxin520.gof.facade.damo;

/**
 * 窗口模式的一个测试类
 * @author wangXgnaw
 *
 */
public class Test {
    
    public static void main(String[] args) {

        //只调用了计算器类里面的一个方法,便可以获得想要的字符串,省去了调用其他接口的操作。
        String operate = Calculator.operate(8500);
        System.out.println(operate);
        
    }

}
  • 结果

image

    可以看到,数字被成功转换成了字符串。

    虽然实例很无语,但是这个模式的功能还是比较好的,对于我们测试类的调用,只调用了一个方法,而这个方法里面调用了其他方法我们就不用关心,大大的简便了我们的操作。所以,窗口模式这种思维方法,应当深深的印到我们的脑海中!