引入抽象外观类的外观模式代码实现
时间: 2023-07-30 17:09:37 浏览: 54
引入抽象外观类的外观模式是一种更加灵活的实现方式,它允许客户端通过外观接口访问子系统,同时也允许在不影响客户端的情况下修改子系统的实现。下面是一个简单的引入抽象外观类的外观模式代码实现:
```java
// 抽象外观类
public abstract class ShapeFacade {
public abstract void drawCircle();
public abstract void drawRectangle();
public abstract void drawSquare();
}
// 具体外观类
public class ShapeFacadeImpl extends ShapeFacade {
private Circle circle;
private Rectangle rectangle;
private Square square;
public ShapeFacadeImpl() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle() {
circle.draw();
}
public void drawRectangle() {
rectangle.draw();
}
public void drawSquare() {
square.draw();
}
// 新增的方法
public void drawCircleAndRectangle() {
circle.draw();
rectangle.draw();
}
}
// 圆形类
public class Circle {
public void draw() {
System.out.println("Drawing Circle");
}
}
// 矩形类
public class Rectangle {
public void draw() {
System.out.println("Drawing Rectangle");
}
}
// 正方形类
public class Square {
public void draw() {
System.out.println("Drawing Square");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
ShapeFacade facade = new ShapeFacadeImpl();
facade.drawCircle();
facade.drawRectangle();
facade.drawSquare();
}
}
```
在这个例子中,我们将外观类定义为抽象类,并在其中定义了外观接口。具体的外观类`ShapeFacadeImpl`实现了这个接口,并提供了具体的实现。客户端程序可以通过`ShapeFacade`接口访问子系统,而不必关心具体的实现细节。同时,我们也可以通过修改`ShapeFacadeImpl`类来改变子系统的实现,而不影响客户端的代码。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)