设计模式场景编程主要涉及到如何根据不同的业务需求,选择合适的设计模式来解决特定的问题。下面我将针对几种常见的设计模式,给出它们的应用场景和编程方法。
工厂模式 (Factory Pattern) 应用场景:
当需要创建对象,但不希望指定具体类或者参数时。例如,一个图形绘制应用程序可能需要创建不同类型的图形对象,但用户不需要知道这些对象是如何创建的。
核心逻辑: 使用一个工厂函数简化创建对象的过程,或者增加创建对象的预处理逻辑。
示例代码:
```java
interface Product {
void use();
}
class ConcreteProductA implements Product {
public void use() {
System.out.println("Using Product A");
}
}
class Factory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ConcreteProductA();
}
return null;
}
}
```
观察者模式 (Observer Pattern) 应用场景:
当需要实现发布-订阅模型,即当一个对象发生变化时,它的所有依赖对象都会收到通知并自动更新。例如,一个新闻发布系统可以使用观察者模式来通知所有订阅者有新的新闻发布。
核心逻辑: 定义对象之间的一对多依赖关系,当一个对象(被观察者)发生变化时,它的所有依赖对象(观察者)都会收到通知并自动更新。
示例代码:
```java
interface Observer {
void update(String message);
}
class NewsPublisher {
private List
public void addObserver(Observer observer) {
observers.add(observer);
}
public void publish(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
class NewsSubscriber implements Observer {
private String name;
public NewsSubscriber(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received news: " + message);
}
}
```
策略模式 (Strategy Pattern) 应用场景:
当需要定义一系列可以互相替换的算法,并将每个算法封装在单独的类中时。例如,一个排序算法可以选择不同的排序策略(如快速排序、归并排序等)。
核心逻辑: 定义一系列算法,将每个算法封装起来,并使它们可以互换。策略模式使得算法可以独立于使用它的客户端变化。
示例代码:
```java
interface SortStrategy {
void sort(int[] array);
}
class QuickSort implements SortStrategy {
@Override
public void sort(int[] array) {
// 快速排序实现
}
}
class MergeSort implements SortStrategy {
@Override
public void sort(int[] array) {
// 归并排序实现
}
}
class SortContext {
private SortStrategy strategy;
public void setStrategy(SortStrategy strategy) {
this.strategy = strategy;
}
public void executeStrategy(int[] array) {
strategy.sort(array);
}
}
```
抽象工厂模式 (Abstract Factory Pattern) 应用场景:
当需要创建一系列相互依赖的对象,并且这些对象的行为可能随着版本的变化而变化时。例如,一个游戏引擎可能需要创建不同风格的游戏场景,每个场景由一系列相互关联的对象组成。
核心逻辑: 提供一个接口,用于创建一系列相关或互相依赖的对象,而不需要指定它们具体的类。
示例代码:
```java
abstract class AbstractFactory {
public abstract ProductA createProductA();
public abstract ProductB createProductB();
}
class ConcreteFactoryA extends AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA();
}
public ProductB createProductB() {
return new ConcreteProductB();
}
}
class ConcreteFactoryB extends AbstractFactory {
public ProductA createProductA() {
return new AlternativeProductA();
}
public ProductB createProductB() {
return new AlternativeProductB();
}
}
```
通过