门面模式
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();
}
}