• 设计模式之——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

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

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

  • 相关阅读:
    MVVM绑定 填坑,必须在与 DependencyObject 相同的线程上创建 DependencySource
    备份一个迭代查找TreeViewItem的辅助函数
    备份一个集合分组的算法
    备份一个有的时候,可能需要把其它exe或者dll包含在主程序中....
    wpf 代码判断当前是否在设计模式,兼容没有UI线程的限制
    wpf 打开输入法、禁用输入法
    xunit vs2019扩展
    .net core使用nacos作为配置中心
    使用skywalking跟踪你的请求
    帮你做codereview:使用docker安装sonarqube并扫描你的.net core元源码
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7713236.html
Copyright © 2020-2023  润新知