本文主要介绍了设计模式中的代理模式和策略模式,通过代码示例展示了这两种模式的使用。
设计模式是软件开发中的一种通用解决方案,它总结了在特定场景下解决问题的有效方法。代理模式和策略模式是其中两种常用的设计模式。
代理模式(Proxy Pattern)
在代理模式中,代理类作为真实对象的代表,它可以增加额外的功能或控制对真实对象的访问。在提供的代码示例中,`ProxyGive` 类是 `RealGive` 类的代理。`ProxyGive` 实现了 `Give` 接口,并持有 `RealGive` 的实例。当调用 `giveMoney()` 方法时,代理类会在执行实际的 `giveMoney()` 操作之前和之后添加额外的行为,如“准备威逼工具”和“销毁证据”。
```java
interface Give{
public void giveMoney();
}
class RealGive implements Give{
public void giveMoney(){
System.out.println("还我钱!>>>>");
}
}
class ProxyGive implements Give{//代理
private Give give;
public ProxyGive(Give give){
this.give=give;
}
public void before(){
System.out.println("准备威逼工具");
}
public void giveMoney(){
this.before();
this.give.giveMoney();
this.after();
}
public void after(){
System.out.print("销毁证据" );
}
}
```
在这个例子中,`ProxyGive` 在调用实际的 `giveMoney()` 方法之前执行了 `before()` 方法,之后执行了 `after()` 方法,扩展了 `RealGive` 的功能。
策略模式(Strategy Pattern)
策略模式允许在运行时选择不同的算法或策略。在提供的代码中,`IStrategy` 接口定义了一个策略,而 `BackDoor`, `GivenGreenLight`, `BlockEnemy` 是具体的策略实现。`Context` 类使用这些策略来执行不同的操作。
```java
public interface IStrategy{
public void operate();
}
public class BackDoor implements IStrategy{
public void operate(){
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
}
}
public class GivenGreenLight implements IStrategy{
public void operate(){
System.out.println("求吴国太开个绿灯,放行!");
}
}
public class BlockEnemy implements IStrategy{
public void operate(){
System.out.println("孙夫人断后,挡住追兵");
}
}
public class Context {
private IStrategy strategy;
public Context(IStrategy strategy){
this.strategy=strategy;
}
public void executeStrategy(){
strategy.operate();
}
}
```
在这个策略模式的例子中,`Context` 类根据传入的策略对象(即 `IStrategy` 的实现)来执行相应的策略。这使得程序可以根据需要动态地切换行为。
总结来说,代理模式用于在不修改原有对象的基础上增强功能或控制访问,而策略模式则是为了在运行时能够灵活地选择和切换不同的算法或策略。这两种模式都是提高代码灵活性和可维护性的重要工具。