zoukankan      html  css  js  c++  java
  • 设计模式之——Facade模式

        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

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

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

  • 相关阅读:
    int (*p)[10] 与*p[10]的区别
    运算顺序
    关于linux开机进入grub问题的解决方法
    对于特殊字符串的处理方法
    学习进度条
    阅读《实例化需求》4-6章有感
    学习进度条
    阅读《实例化需求》1-3章有感
    问题账户需求分析
    2016年秋季个人阅读计划
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7713236.html
Copyright © 2011-2022 走看看