• 外观模式


      外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问,并且屏蔽了系统复杂性的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。

      这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用

      场景:邮寄信件的过程,每个需要寄信的人,都需要顺序完成四个步骤,显得很费劲

      1、写信

      2、填写地址

      3、放进信封

      4、送信

      示例:邮寄信件的过程定义接口和具体实现

    /**
     * 邮寄信件
     * @author test11
     */
    public interface SendProcess {
    
        /**
         * 写信
         * @param content
         */
        public void write(String content);
    
        /**
         * 填写地址
         * @param address
         */
        public void writeAddress(String address);
    
        /**
         * 放进信箱
         */
        public void putIntoBox();
    
        /**
         * 邮寄信件
         */
        public void send();
    }
    /**
     * 邮寄信件的实现
     * @author test11
     */
    public class SendImpl implements  SendProcess{
    
        @Override
        public void write(String content) {
            System.out.println("信内容:" + content);
        }
    
        @Override
        public void writeAddress(String address) {
            System.out.println("地址是:" + address);
        }
    
        @Override
        public void putIntoBox() {
            System.out.println("放进信箱");
        }
    
        @Override
        public void send() {
            System.out.println("邮寄信件");
        }
    
    }

      寄信人将信交到收信人手上必不可少的步骤

    /**
     * 多人写信,寄信实现类
     * @author test11
     */
    public class Demo {
    
        public static void main(String[] args) {
            /**
             * 邮寄信件的过程,每个需要寄信的人,都需要顺序完成四个步骤,显得很费劲
             * 写信
             * 填写地址
             * 放进信封
             * 送信
             * 后来出现了邮局或者邮寄服务,只要把你写信的内容和地址告知
             * 剩下的装进信封和送信的过程由他们代劳,邮局或邮寄服务即是外观模式的体现
             * 相当于增加了一个门面,寄信者直接调用门面的方法就可以了,不用了解具体的实现方法
             * 以及相关的业务顺序
             */
            SendProcess sender1 = new SendImpl();
            sender1.write("靓仔");
            sender1.writeAddress("广东深圳");
            sender1.putIntoBox();
            sender1.send();
    
            System.out.println();
    
            SendProcess sender2 = new SendImpl();
            sender2.write("美女");
            sender2.writeAddress("浙江杭州");
            sender2.putIntoBox();
            sender2.send();
        }
    }

      如上的实现,N个寄信人得做重复的N次一模一样的操作,都得自己走完写信,填写地址,放进信封,送信的四个步骤。会出现特别多冗余的代码。

      后来出现了邮局或者邮寄服务,只要把你写信的内容和地址告知,剩下的装进信封和送信的过程由他们代劳,邮局或邮寄服务即是外观模式的体现。

      相当于增加了一个门面,寄信者直接调用门面的方法就可以了,不用了解具体的实现方法,以及相关的业务顺序。

      新增一个邮局类,邮局代劳装信封和送信的步骤,客户只需要给邮局类传递信的内容和收信地址即可

    /**
     * 邮局,即外观模式中的门面,直接提供给寄信者调用,即传信件内容和邮寄地址
     * 寄信者无需再关心寄信的步骤
     * @author test11
     */
    public class PostOffice {
    
        SendProcess sendImpl = new SendImpl();
    
        public void sendLetter(String context,String address){
            //写信
            sendImpl.write(context);
    
            //写地址
            sendImpl.writeAddress(address);
    
            //放进信封
            sendImpl.putIntoBox();
    
            //代送信
            sendImpl.send();
        }
    }
    /**
     * 测试外观模式
     * @author test11
     */
    public class Demo {
    
        public static void main(String[] args) {
            String context_lz = "靓仔";
            String address_sz = "广东深圳";
            PostOffice p1 = new PostOffice();
            p1.sendLetter(context_lz,address_sz);
    
            System.out.println();
    
            String context_ln = "靓女";
            String address_hz = "浙江杭州";
            PostOffice p2 = new PostOffice();
            p1.sendLetter(context_ln,address_hz);
        }
    }
  • 相关阅读:
    R语言实战
    Python Google Translate API
    Windows使用技巧
    test_CSDN_markdown_format
    Linux: bash script
    test_markdown
    线性基学习笔记+模板总结
    Educational Codeforces Round 69 D Yet Another Subarray Problem
    图片托管
    二维线段树模板,建树,维护最大最小值
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14790273.html
Copyright © 2020-2023  润新知