在Java编程领域,设计模式犹如一把锋利的宝剑,能够帮助开发者更高效地构建出可维护、可扩展的软件系统。随着对Java编程理解的不断深入,掌握设计模式的进阶知识变得尤为重要。其中,观察者模式和策略模式是两个极具实用价值的设计模式,它们在不同的场景下发挥着独特的作用,通过实战运用,能让我们深刻体会到设计模式的魅力。
观察者模式,也被称为发布 - 订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的状态。在实际应用中,观察者模式有着广泛的应用场景,比如在图形用户界面(GUI)开发中,当一个按钮被点击时,可能会触发多个不同的操作,这些操作就可以作为观察者来监听按钮这个主题对象的状态变化。以一个简单的股票市场为例,股票价格的变化是主题对象,而股民们则是观察者。当股票价格发生变动时,股民们会收到通知并根据价格变化做出相应的决策。
在Java中实现观察者模式,通常会定义一个主题接口和一个观察者接口。主题接口包含注册、移除观察者以及通知观察者的方法,而观察者接口则包含更新状态的方法。以下是一个简单的Java代码示例:
```java
import java.util.ArrayList;
import java.util.List;
// 主题接口
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
// 观察者接口
interface Observer {
void update(double price);
}
// 具体主题类
class Stock implements Subject {
private double price;
private List observers;
public Stock() {
observers = new ArrayList();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(price);
}
}
public void setPrice(double price) {
this.price = price;
notifyObservers();
}
}
// 具体观察者类
class Investor implements Observer {
private String name;
public Investor(String name) {
this.name = name;
}
@Override
public void update(double price) {
System.out.println(name + " 收到通知,股票价格变为:" + price);
}
}
public class ObserverPatternDemo {
public static void main(String[] args) {
Stock stock = new Stock();
Investor investor1 = new Investor("张三");
Investor investor2 = new Investor("李四");
stock.registerObserver(investor1);
stock.registerObserver(investor2);
stock.setPrice(100.0);
}
}
```
接下来,我们再看看策略模式。策略模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。在实际开发中,当一个系统需要根据不同的情况选择不同的算法时,策略模式就派上用场了。比如在电商系统中,根据不同的促销活动,可能会有不同的折扣算法,这些折扣算法就可以封装成不同的策略。
在Java中实现策略模式,通常会定义一个策略接口和多个具体的策略类。以下是一个简单的Java代码示例:
```java
// 策略接口
interface DiscountStrategy {
double applyDiscount(double price);
}
// 具体策略类:无折扣
class NoDiscountStrategy implements DiscountStrategy {
@Override
public double applyDiscount(double price) {
return price;
}
}
// 具体策略类:10%折扣
class TenPercentDiscountStrategy implements DiscountStrategy {
@Override
public double applyDiscount(double price) {
return price * 0.9;
}
}
// 上下文类
class ShoppingCart {
private DiscountStrategy discountStrategy;
public ShoppingCart(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double calculateTotal(double price) {
return discountStrategy.applyDiscount(price);
}
}
public class StrategyPatternDemo {
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart(new TenPercentDiscountStrategy());
double total = cart.calculateTotal(100.0);
System.out.println("折扣后的总价:" + total);
}
}
```
通过观察者模式和策略模式的实战应用,我们可以看到设计模式在Java编程中的重要性。它们不仅能够提高代码的可维护性和可扩展性,还能让我们的代码更加灵活和高效。在实际开发中,我们应该根据具体的需求合理运用这些设计模式,不断提升自己的编程能力。
标签: java设计模式视频教程 java中设计模式到底是干啥的 java设计模式详解


