JAVA使用MVC体系结构写一个包含三种设计模式
时间: 2023-07-20 11:11:48 浏览: 51
好的,我可以给你一个简单的例子,该例子使用Java中的MVC体系结构,包含三种设计模式:工厂模式、观察者模式和单例模式。
1. 工厂模式
首先,我们定义一个接口 Product,该接口包含一个方法 produce:
```java
public interface Product {
void produce();
}
```
然后,我们创建两个实现类 ProductA 和 ProductB,它们实现了 Product 接口:
```java
public class ProductA implements Product {
@Override
public void produce() {
System.out.println("Producing ProductA...");
}
}
public class ProductB implements Product {
@Override
public void produce() {
System.out.println("Producing ProductB...");
}
}
```
接下来,我们定义一个工厂类 ProductFactory,该类包含一个静态方法 createProduct,用于创建 Product 对象:
```java
public class ProductFactory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
} else {
return null;
}
}
}
```
2. 观察者模式
在 MVC 模式中,视图可以通过观察者模式来监听模型的变化。首先,我们定义一个 Subject 接口,该接口包含添加和删除观察者的方法,以及通知观察者的方法:
```java
public interface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyObservers();
}
```
然后,我们创建一个具体的主题类 ProductModel,该类实现了 Subject 接口:
```java
public class ProductModel implements Subject {
private List<Observer> observers;
private String productName;
public ProductModel(String productName) {
this.observers = new ArrayList<>();
this.productName = productName;
}
public void setProductName(String productName) {
this.productName = productName;
notifyObservers();
}
public String getProductName() {
return productName;
}
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(this);
}
}
}
```
最后,我们创建一个观察者类 ProductView,该类实现了 Observer 接口:
```java
public class ProductView implements Observer {
private String productName;
@Override
public void update(Subject subject) {
ProductModel productModel = (ProductModel) subject;
this.productName = productModel.getProductName();
System.out.println("Product name updated to " + productName);
}
}
```
3. 单例模式
在 MVC 模式中,控制器通常是单例的,因为整个应用程序只需要一个控制器实例。我们可以使用单例模式来实现这一点。首先,我们创建一个单例类 ProductController:
```java
public class ProductController {
private static ProductController instance = new ProductController();
private ProductController() {}
public static ProductController getInstance() {
return instance;
}
public void updateProduct(ProductModel productModel, String productName) {
productModel.setProductName(productName);
}
}
```
以上就是一个包含三种设计模式的简单的 MVC 例子,该例子使用了工厂模式、观察者模式和单例模式。其中,工厂模式用于创建不同的产品对象,观察者模式用于监听模型的变化,单例模式用于确保控制器的唯一性。