• 门面模式【结构模式】


    门面模式

    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();
        }
    }
    
  • 相关阅读:
    第十五讲 实例模式
    第十四讲 实例模式
    将博客搬至CSDN
    CSU 1616: Heaps(区间DP)
    hdu 1281棋盘游戏(二分匹配)
    hdu 1042 N!(大数的阶乘)
    hdu 3371 Connect the Cities (最小生成树Prim)
    hdu 4502吉哥系列故事——临时工计划 (简单DP)
    hdu1230火星A+B (大数题)
    hdu1301 Jungle Roads (Prim)
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10164142.html
Copyright © 2020-2023  润新知