多种设计模式混合使用的例子
时间: 2023-08-15 15:09:21 浏览: 68
一个例子是使用了工厂模式、观察者模式和单例模式的一个日志记录器。
首先,使用工厂模式创建一个日志记录器的实例,这个实例可以记录到不同的目标,比如文件、数据库等。
其次,使用观察者模式,当日志记录器记录一条日志时,它可以通知多个观察者,比如发送邮件、保存到云端等。
最后,使用单例模式,确保只有一个日志记录器实例存在,这样可以节省资源。
相关问题
识别设计模式关注点例子
好的,我理解了你的问题。识别设计模式的关注点是一种分析和理解软件设计模式的方法。举个例子,假设我们正在设计一个电子商务网站,我们可能会使用观察者模式来实现购物车功能。在这种情况下,观察者模式的关注点是如何将购物车对象与其他对象解耦,并确保购物车对象可以通知其他对象有关其状态的更改。因此,当我们识别设计模式的关注点时,我们正在寻找模式的目的和设计决策的基础,以便更好地理解和应用它们。
工厂设计模式例子
工厂设计模式是一种创建型设计模式,其主要目的是通过一个工厂方法来创建对象,而无需直接使用 new 操作符。
以下是一个简单的工厂设计模式的例子:
首先,我们定义一个基本的产品类,例如一个形状类:
```java
public interface Shape {
void draw();
}
```
然后,我们定义具体的形状类,例如一个圆形类和一个正方形类:
```java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle.draw");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square.draw");
}
}
```
接下来,我们定义一个工厂类,用于创建这些形状对象:
```java
public class ShapeFactory {
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
```
最后,我们可以使用工厂类来创建具体的形状对象:
```java
ShapeFactory shapeFactory = new ShapeFactory();
// 创建一个圆形对象
Shape circle = shapeFactory.getShape("CIRCLE");
// 调用圆形对象的 draw 方法
circle.draw();
// 创建一个正方形对象
Shape square = shapeFactory.getShape("SQUARE");
// 调用正方形对象的 draw 方法
square.draw();
```
通过上述代码,我们可以看出工厂设计模式的主要优点是解耦。我们可以将对象的创建过程和对象的使用过程分离,从而降低代码的耦合度。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.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)