zoukankan      html  css  js  c++  java
  • 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式

    模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现。

    几个要点,针对java:

    1. 抽象父类(防止实例化),公共方法(public),规定好工作流
    2. 抽象父类规定好抽象方法(protected),具体由子类实现,父类将抽象方法加入自己的工作流
    3. 具体子类实现父类的抽象方法
    4. 任意实例化的子类,都会按照父类工作流工作,只是部分(抽象方法实现)不同
    abstract class Handle
        {
            public void handle()
            {
                a();
                b();
                c();
            }
            void a(){}
    		void c(){}
            protected abstract void b();
        }
    
      class Handle1 extends Handle
        {
    		@override
            protected override void b()
            {
                Console.WriteLine("Handle1");
            }
        }
      class Handle2 extends Handle
        {
    		@override
            protected override void b()
            {
                Console.WriteLine("Handle2");
            }
        }
    

    调用:

    Handle handle=new Handle1();
    handle.handle();
    

    任意子类都会按照规定的工作流a()->b()->c()执行,部分(b方法)由具体子类去定义。

    策略模式

    针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

    public interface ICalculator {  
        public int calculate(int a,int b);  
    }  
    public class Plus implements ICalculator {  
        @Override  
        public int calculate(int a,int b) {  
            return a+b;  
        }  
    } 
    public class Minus implements ICalculator {  
        @Override  
        public int calculate(int a,int b) {  
            return a-b;  
        }  
    }
    
    Class Calculator{
    	ICalculator calculator;
    	public Calculator(ICalculator calculator){
    		this.calculator=calculator;
    	}
    	public int calculate(int a,int b){
    	return calculator.calculate(a,b);
    	}
    }
    
    当需要加法计算时:
    Calculator plusCalculator=new Calculator(new Plus());
    int result=plusCalculator.calculate(3,5);
    

    策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

    策略模式和模板模式场景对比:

    策略模式的应用场景
    1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
    2、 需要在不同情况下使用不同的策略(算法),一般会定义一个接口规范,使用不同的策略方式去实现它
    3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
    而模版方法模式的应用场景
    1、多个类区别在于主流程中的某个细节
    2、客户可以自已实现模版里的抽象方法
    3、对客户隐藏具体的实现流程(方法的组合的顺序)

    参考这里
    参考这里



    I am a slow walker, but I never walk backwards.



  • 相关阅读:
    下载地址jquery upload file demo (C#)
    特征卷积基于3D卷积神经网络的人体行为理解(论文笔记)
    应用目录S5PV210的BL1应用
    手机音效手机测试游戏类
    metadata查询Querying Metadata
    arraynodeSorting
    functionclass[LeetCode]Path Sum II
    functionclass[LeetCode]Permutation Sequence
    exceptionfunction[LeetCode]Permutations
    exceptionfunction[LeetCode]Permutations II
  • 原文地址:https://www.cnblogs.com/lknny/p/5759152.html
Copyright © 2011-2022 走看看