zoukankan      html  css  js  c++  java
  • 外观模式

      外观模式(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);
        }
    }
  • 相关阅读:
    树莓派 无线网卡配置
    树莓派.Net MVC4 Mono4 Jexus
    springcloud超简单的入门3--负载均衡
    springcloud超简单的入门2--Eureka服务治理
    SpringCloud超简单的入门(1)--一些简单的介绍
    Tomcat9控制台中文乱码的解决方案
    win10 调整音量时 左上角弹框 的解决办法
    .NETCore 添加Docker支持,并上传镜像至Docker Hub,最后在CentOs中拉取镜像运行
    假设每台交换机上行有N条线,两跳内,可以最多让多少个交换机互通?
    .netcore微服务-SkyWalking安装部署IIS
  • 原文地址:https://www.cnblogs.com/jiyukai/p/14790273.html
Copyright © 2011-2022 走看看