外观模式(Facade Pattern)
1.策略模式(Strategy Pattern)2.桥接模式(Bridge Pattern)3.代理模式(Proxy Pattern)4.中介者模式(Mediator Pattern)5.过滤器模式(Filter Pattern)6.适配器模式(Adapter Pattern)7.责任链模式(Chain Of Responsibility Pattern)8.装饰器模式(Decorator Pattern)9.建造者模式(Builder Pattern)10.观察者模式(Observer Pattern)11.工厂模式(Factory Pattern)12.单例模式(Singleton Pattern)13.组合模式(Composite Pattern)14.模板模式(Template Pattern)15.原型模式(Prototype Pattern)
16.外观模式(Facade Pattern)
17.享元模式(Flyweight Pattern)18.命令模式(Command Pattern)19.解释器模式(Interpreter Pattern)20.迭代器模式(Iterator Pattern)外观模式(Facade Pattern)
一、定义
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
二、优缺点
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点: 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
三、具体实现
3.1 原型图
- Facade 外观角色
- Subsystem classes 子系统角色
- client 客户端角色

3.2 实现
1、创建一个接口。
/**
* @author zhongtao
* @date 2023/5/23 21:23
*/
public interface Shape {
void draw();
}
2、创建实现接口的实体类。
/**
* @author zhongtao
* @date 2023/5/23 21:24
*/
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle::draw()");
}
}
/**
* @author zhongtao
* @date 2023/5/23 21:23
*/
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle::draw()");
}
}
/**
* @author zhongtao
* @date 2023/5/23 21:23
*/
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square::draw()");
}
}
3、创建一个外观类。
/**
* @author zhongtao
* @date 2023/5/23 21:24
*/
public class ShapeMaker {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeMaker() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle() {
circle.draw();
}
public void drawRectangle() {
rectangle.draw();
}
public void drawSquare() {
square.draw();
}
}
4、使用该外观类画出各种类型的形状。
/**
* @author zhongtao
* @date 2023/5/23 21:24
*/
public class FacadePatternDemo {
public static void main(String[] args) {
ShapeMaker shapeMaker = new ShapeMaker();
shapeMaker.drawCircle();
shapeMaker.drawRectangle();
shapeMaker.drawSquare();
}
}
5、执行程序,输出结果:
Circle::draw()
Rectangle::draw()
Square::draw()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?