模版方法模式 和策略模式

模版方法模式结构:由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种:

  • 抽象方法:父类只声明但不实现,由它的子类去实现。
  • 模版方法:父类声明并实现。模版方法调用抽象方法来完成主要的逻辑功能,并且模版方法大多会定义为final类型,不能被子类重写。
  • 钩子方法:父类声明并实现。但子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑。

模版方法模式优点:容易扩展,便于维护,比较灵活

 

策略模式结构:

  • 封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。

  • 抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。

  • 具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。

 

interface IStrategy {  
       public void doSomething();  
   }  
   class ConcreteStrategy1 implements IStrategy {  
       public void doSomething() {  
           System.out.println("具体策略1");  
       }  
   }  
   class ConcreteStrategy2 implements IStrategy {  
       public void doSomething() {  
           System.out.println("具体策略2");  
       }  
   }  
   class Context {  
       private IStrategy strategy;  
         
       public Context(IStrategy strategy){  
           this.strategy = strategy;  
       }  
         
       public void execute(){  
           strategy.doSomething();  
       }  
   }  
     
   public class Client {  
       public static void main(String[] args){  
           Context context;  
           System.out.println("-----执行策略1-----");  
           context = new Context(new ConcreteStrategy1());  
           context.execute();  
     
           System.out.println("-----执行策略2-----");  
           context = new Context(new ConcreteStrategy2());  
           context.execute();  
       }  
   }

 

 

原文地址:https://www.cnblogs.com/mcahkf/p/9227893.html