版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/85228311
迪米特法则(最少只是原则):
- 一个软件实体应当尽可能少的与其他实体发生相互作用。
外观模式核心:
- 为子类系统提供统一的入口, 封装子系统的复杂性 ,便于客户端调用 。
使用外观模式模拟注册公司的流程,uml图如下
1),创建工商局类
/**工商局接口类
* @author 晓电脑
*/
public interface GongShangJu {
void register();
}
class ShangHaiGongShangJu implements GongShangJu{
@Override
public void register() {
System.out.println("工商局登记公司名称");
}
}
2),创建质监局
/**质监局
* @author 晓电脑
*/
public interface ZhiJianJu {
void testing();
}
class ShangHaiZhiJianJu implements ZhiJianJu{
@Override
public void testing() {
System.out.println("在质监局登记");
}
}
3),创建银行类
/**银行
* @author 晓电脑
*/
public interface Bank {
void openAccount();
}
class ShangHaiBank implements Bank{
@Override
public void openAccount() {
System.out.println("到银行办理公司账号");
}
}
4),创建税务局
/**税务局
* @author 晓电脑
*/
public interface ShuiWuJu {
void payTaxes();
}
class ShangHaiShuiWuJu implements ShuiWuJu{
@Override
public void payTaxes() {
System.out.println("到税务局办理交税业务");
}
}
5),创建门面类 ,对处理流程进行封装,对外提供统一的入口
/** 处理办理公司的流程
* @author 晓电脑
*/
public class Appearance {
public void process(){
GongShangJu gongShangJu=new ShangHaiGongShangJu();
gongShangJu.register();
ZhiJianJu zhiJianJu=new ShangHaiZhiJianJu();
zhiJianJu.testing();
ShuiWuJu shuiWuJu=new ShangHaiShuiWuJu();
shuiWuJu.payTaxes();
Bank bank=new ShangHaiBank();
bank.openAccount();
}
}
6),模拟客户办理公司客户端
/**模拟开公司 的业务流程
* 外观模式
* @author 晓电脑
*/
public class Client {
public static void main (String[] args) {
Appearance appearance = new Appearance();
appearance.process();
}
}
运行结果
外观模式开发中常见的场景:
- 使用频率很高,哪里都会遇见,各种技术和框架中, 都有外观模式的使用如下
- 1),JDBC封装后的,commons提供的DBUtils类,
- 2),Hibernate提供的工具类
- 3),Spring JDBC工具类 等等
与适配器模式的区别
- 这样的实现方式非常类似适配器模式,然而外观模式与适配器模式不同的是:适配器模式是将一个对象包装起来以改变其接口,而外观是将一群对象 ”包装“起来以简化其接口。它们的意图是不一样的,适配器是将接口转换为不同接口,而外观模式是提供一个统一的接口来简化接口。