zoukankan      html  css  js  c++  java
  • 门面模式【结构模式】

    门面模式

    Provide a unified interface to a set of interfaces in a subsystem.
    Facade defines a higher-level interface that makes the subsystem easier to use.
    为子系统中的一组接口提供一个统一的访问接口。
    门面定义了一个更高级的接口,使得子系统更容易使用。
    
    public class Facade {
        /**
         * 门面模式:
         * Provide a unified interface to a set of interfaces in a subsystem.
         * Facade defines a higher-level interface that makes the subsystem easier to use.
         * 为子系统中的一组接口提供一个统一的访问接口。
         * 门面定义了一个更高级的接口,使得子系统更容易使用。
         */
        @Test
        public void all() {
            final LetterFacade letterFacade = LetterFacadeImpl.builder().build();
            letterFacade.send("zxd", "hello facade pattern");
        }
    
    }
    
    /**
     * 1)子系统复杂且不易使用的接口
     */
    interface IWriteLetter {
        void fillEnvelope(String address);
    
        void writeContent(String content);
    
        void letterIntoEnvelope();
    
        void sendLetter();
    }
    
    /**
     * 2)子系统的接口实现
     */
    @Builder
    @Slf4j
    class WriteLetterImpl implements IWriteLetter {
        @Default
        private final StringBuilder letter = new StringBuilder();
    
        @Override
        public void fillEnvelope(String address) {
            letter.append("收件人:").append(address).append("
    ");
        }
    
        @Override
        public void writeContent(String content) {
            letter.append("正文:").append(content).append("
    ");
        }
    
        @Override
        public void letterIntoEnvelope() {
            letter.append("邮局:").append("from ZXD").append("
    ");
        }
    
        @Override
        public void sendLetter() {
            log.info("send mail 
     {}", letter.toString());
        }
    }
    
    /**
     * 3)基于子系统特性封装的门面接口,供外部访问
     */
    interface LetterFacade {
        void send(String address, String content);
    }
    
    /**
     * 4)门面接口具体实现,封装了底层子系统的复杂性
     */
    @Builder
    class LetterFacadeImpl implements LetterFacade {
        @Default
        private final IWriteLetter writeLetter = WriteLetterImpl.builder().build();
    
        /**
         * 核心方法,封装了底层一系列的接口调用
         */
        @Override
        public void send(String address, String content) {
            writeLetter.fillEnvelope(address);
            writeLetter.writeContent(content);
            writeLetter.letterIntoEnvelope();
            writeLetter.sendLetter();
        }
    }
    
  • 相关阅读:
    linux下rm -r误删NTFS文件恢复方法
    svn在linux下的使用(svn命令行)ubuntu 删除 新增 添加 提交 状态查询 恢复
    软件设计师考试历年试题汇总
    强大全面的C++框架和库推荐!
    maven install的时候把源码一起放到仓库
    eclipse手动添加本地jar包到本地maven仓库
    JAVA_SWT 事件的四种写法
    java匿名内部类new(){}
    利用VS2010开发一个跳转页面aspx
    Oracle数据库导入dmp文件报错处理方法
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10164142.html
Copyright © 2011-2022 走看看