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

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

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

  • 相关阅读:
    使用SQL Server Management Studio 创建数据库备份作业
    ClickOnce 获取客户端发布版本号
    在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
    找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
    常用操作类
    数据库命名规范
    expression动态构成
    C# 获得当前方法 和 方法调用链 的 方法
    EF架构封装类
    基于微软企业库的分层代码框架
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7713236.html
Copyright © 2020-2023  润新知