门面模式【结构模式】

门面模式

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();
    }
}
原文地址:https://www.cnblogs.com/zhuxudong/p/10164142.html