设计模式-外观模式
一、外观模式简介
外观模式(Facade)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
核心:
1、为子系统中的一组接口提供一个一致的界面
2、降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口
3、客户端不与系统耦合,外观类与系统耦合
二、外观模式优缺点比较
优点:
1、减少系统相互依赖
2、提高灵活性
3、提高了安全性
缺点:
1、不符合开闭原则,如果要改东西很麻烦,继承重写都不合适
使用场景:
1、DBUtils类
2、为复杂的模块或子系统提供外界访问的模块
3、预防低水平人员带来的风险
注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口
四、设计实现
步骤1:创建接口
public interface Shape { void draw(); }
步骤2:创建实现接口的实体类
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Callback Rectangle::draw method"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Callback Square::draw method"); } } public class Circle implements Shape{ @Override public void draw() { System.out.println("Callback Circle::draw method"); } }
步骤3:创建外观类
public class ShapeFacade { private Shape r; private Shape c; private Shape s; public ShapeFacade() { this.r = new Rectangle(); this.c = new Circle(); this.s = new Square(); } public void drawRectangle() { r.draw(); } public void drawCircle() { c.draw(); } public void drawSquare() { s.draw(); } }
步骤4:调用者测试
public class FacadeDemo01 { public static void main(String[] args) { ShapeFacade sf = new ShapeFacade(); sf.drawCircle(); sf.drawRectangle(); sf.drawSquare(); } }
步骤5:运行程序,观察结果
汇总:
松散耦合:外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
简单易用:外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观类交互就可以了。
更好的划分访问层次:通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到外观中,这样既方便客户端使用,也很好地隐藏了内部的细节。
郭慕荣博客园
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?