`
步行者
  • 浏览: 169862 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

CoR 模式 (一种)

阅读更多

 

 

CoR(Chain of Responsibility) 即职责链设计模式:使多个对象都有机会处理请求(Request),从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。

职责链设计模式 大概有三个角色:
(1)请求(
Request):封装请求信息
(2)处理器(
Handler):处理请求(Request),一个具体处理器一般只处理一种请 求,如果它不能处理传递过来的请求,那么它就把该请求传递给职责链中的下一个处理器(后继处理器 successor)。
(3)客户端(
Client):发送请求


定义不再多说,直接看实现。下面是一个传统的CoR实现:

1,代表抽象请求的接口(
Request)

 

public interface Request{
    //......
} 


2,实现
Request接口的实现类,HelpRequest
PrintRequestSaveRequest
    假设有一个文本编辑器,用户界面上有三个按钮 Help,Print 和 Save
   
HelpRequest 代表 当用户点击 Help 按钮时产生的 帮助请求,

    PrintRequest 代表 当用户点击 Print 按钮时产生的 打印请求,
   
SaveRequest 代表 当用户点击 Save 按钮时产生的 保存请求。


//帮助请求
public class HelpRequest implements Request{
    //......
}
//打印请求
public class PrintRequest implements Request{
    //......
}
//保存请求
public class SaveRequest implements Request{
    //......
}
 

3,代表抽象处理器的接口Handler


public interface Handler{
    void handleRequest(Request request);
}

 

4,实现处理器接口的实现类 HelpHandlerPrintHandlerSaveHandler
 
HelpHandler 处理 帮助请求(HelpRequest


public class HelpHandler implements Handler{
    //后继处理器
    private Handler successor;
    public HelpHandler(Handler successor){this.successor = successor;}
    public void handleRequest(Request request) {
        if(request instanceof HelpRequest){
             System.out.println("HelpHandler handle " +request.getClass().getSimpleName());
             // handle request
        }else{
            System.out.println("PrintHandler can't handle "+request.getClass().getSimpleName());
            if(successor != null)
                successor.handleRequest(request);
        }
    }
}

 

    PrintHandler 处理 打印请求(PrintRequest


public class PrintHandler implements Handler{
    //后继处理器
    private Handler successor;
    public PrintHandler(Handler successor){this.successor = successor;}
    public void handleRequest(Request request) {
        if(request instanceof PrintRequest){
            System.out.println("PrintHandler handle "+request.getClass().getSimpleName());
            // handle request
        }else{
            System.out.println("PrintHandler can't handle "+request.getClass().getSimpleName());
           if(successor != null)
                successor.handleRequest(request);
        }
    }
}

 

    SaveHandler处理 保存请求(SaveRequest

 

 

public class SaveHandler implements Handler{
    //后继处理器
    private Handler successor;
    public SaveHandler(Handler successor){this.successor = successor;}
    public void handleRequest(Request request) {
        if(request instanceof SaveRequest){
            System.out.println("SaveHandler handle "+request.getClass().getSimpleName());
            // handle request
        }else{
            System.out.println("SaveHandler can't handle "+request.getClass().getSimpleName());
            if(successor != null)
                successor.handleRequest(request);
        }
    }
}
 

5,客户端 Client


public class Client{
    public static void main(String[] args){
        Handler handler1 = new HelpHandler(null);
        Handler handler2 = new PrintHandler(handler1);
        Handler handler3 = new SaveHandler(handler2);

        handler3.handleRequest(new HelpRequest());
        handler3.handleRequest(new PrintRequest());
        handler3.handleRequest(new SaveRequest());
    }
}

 

运行 Client 类 输出如下:

SaveHandler can't handle HelpRequest
PrintHandler can't handle HelpRequest
HelpHandler handle HelpRequest
SaveHandler can't handle PrintRequest
PrintHandler handle PrintRequest
SaveHandler handle SaveRequest


相关链接 :
http://www.iteye.com/topic/411222 CoR 模式 (另一种)

 

-----------------------------------------------------

 

用抽象类也可以,不过要把 handleRequest 中
(1)这个处理器是否能处理这个请求

(2)处理相应的请求
这两个功能分离出来,定义成抽象方法供子类(具体处理器)实现

 

  1. public abstract class AbstractHandler implements Handler {    
  2.     protected Handler successor;    
  3.     public AbstractHandler(Handler successor) {    
  4.         this.successor = successor;    
  5.     }    
  6.     //定义为final,不能被子类继承  
  7.     public final void handleRequest(Request request) {    
  8.         if (canHandleRequest(request)) {    
  9.             handleRequestMyself(request);  
  10.         } else {    
  11.             if (successor != null)    
  12.                 successor.handleRequest(request);    
  13.         }    
  14.     }    
  15.     //这个处理器能否处理整个请求  
  16.     protected abstract boolean canHandleRequest(Request request);  
  17.     //处理相应的请求  
  18.     protected abstract void handleRequestMyself(Request request);  
  19. }   

 

-----------------------------------------------------

 

PipeLine + Value

lishuaibt 写道
其实纯的责任 链模式我的理解是,一种责任推卸的模式,知道有承担责任的模块接收这个请求,并处理这个请求。这样的情况确实不太多吧。(个人觉得哈)。所谓的 pipeline的概念,在以前的turbine框架(一个非常优秀的MVC框架)中就有使用。其大体模式和概念如下:
    其实PipeLine类似于Servlet里的FilterChain的概念,而valve类似于Filter。就是一个请求流经这个PipeLine中 的每个Valve节点,该节点都对这个请求做一定的处理,而不是纯的责任链模式那样,把责任往下推。是想做了相应的处理后,在把处理后的请求移交给下一个 Valve进行处理。举个例子:在一次请求Servlet的过程中,可能有些处理是所有的请求都需要做的,比如设置CharSet,权限验证,或者URL 的解析等等,这些处理构成了一个请求的Chain,所有的请求都要经过这些处理,才能进行下面的具体的业务处理。这个时候既可以这些共有的处理抽象出来, 做成一个pipeline,这个pipeline有过个valve节点组成。。。。

   差不多就这个意思吧。。。用文字形容确实不太好说。
分享到:
评论
34 楼 步行者 2009-07-02  
艾建锋 写道
if(action.equal("help")
{
    HelpClass.fun();
}
else if(..)
{
    ....
}
else
{
   ...
}


是不是这个意思?


你这个是什么意思???
33 楼 艾建锋 2009-07-02  
if(action.equal("help")
{
    HelpClass.fun();
}
else if(..)
{
    ....
}
else
{
   ...
}


是不是这个意思?
32 楼 rain2005 2009-06-30  
我一直没有模式的概念,就知道不断的重构,抽象。
31 楼 步行者 2009-06-30  
xiaohui5850 写道
实际上这个就是一个方法回调
啥时候成模式了

???
java 不用方法调用,怎么实现模式啊。。。
30 楼 lishuaibt 2009-06-24  
raymond2006k 写道
不必把职责链理解的那么死。
一个Handler 先处理 request 再交给 successor 那不就成了  “不推卸责任”了吗?

而职责链的缺陷是 Handler 与 Successor 耦合了。
而PipeLine(可以算是一种改进的 职责链模式)的好处是, Handler 是独立的互不耦合;怎样装配Handler,按什么顺序都有 PipeLine 来进行,一般是xml 配置文件,保持了很好的灵活性。


同意!其实真正GoF里边介绍的纯的责任链模式我个人觉得适用范围很小!反而这种pipeline的思想用的更多一些吧
29 楼 步行者 2009-06-24  
raymond2006k 写道
不必把职责链理解的那么死。
一个Handler 先处理 request 再交给 successor 那不就成了  “不推卸责任”了吗?

而职责链的缺陷是 Handler 与 Successor 耦合了。
而PipeLine(可以算是一种改进的 职责链模式)的好处是, Handler 是独立的互不耦合;怎样装配Handler,按什么顺序都有 PipeLine 来进行,一般是xml 配置文件,保持了很好的灵活性。


主题帖给出的是 职责链模式 的简单实现方式
简单才能直观嘛

“一个Handler 先处理 request 再交给 successor 那不就成了  “不推卸责任”了吗?”
你这么说证明你没好好看主题帖
handler首先检查自己是否能处理这个request,如果能处理,就处理
不能处理再交给successor

PipeLine和传统职责链 的主要区别 也不是你所说
主要区别 是 PipeLine 中的 Value “可能推卸部分职责”
而 传统职责链 中的 handler “如果不能处理则推卸全部职责”
28 楼 raymond2006k 2009-06-24  
不必把职责链理解的那么死。
一个Handler 先处理 request 再交给 successor 那不就成了  “不推卸责任”了吗?

而职责链的缺陷是 Handler 与 Successor 耦合了。
而PipeLine(可以算是一种改进的 职责链模式)的好处是, Handler 是独立的互不耦合;怎样装配Handler,按什么顺序都有 PipeLine 来进行,一般是xml 配置文件,保持了很好的灵活性。
27 楼 pipilu 2009-06-23  
这个模式不一定只用于同一进程中,也可以是跨进程的:各个模块都向外暴露同样的服务接口,模块可以灵活装配。方便扩展和订制。
26 楼 步行者 2009-06-23  
<p>回复上贴:<br>用抽象类也可以,不过要把 handleRequest 中<br>(1)这个处理器是否能处理这个请求<br>和<br>(2)处理相应的请求<br>这两个功能分离出来,定义成抽象方法供子类(具体处理器)实现<br><br><br></p>
<pre name="code" class="java">public abstract class AbstractHandler implements Handler { 
    protected Handler successor; 
    public AbstractHandler(Handler successor) { 
        this.successor = successor; 
    } 
    //定义为final,不能被子类继承
    public final void handleRequest(Request request) { 
        if (canHandleRequest(request)) { 
        handleRequestMyself(request);
        } else { 
            if (successor != null) 
                successor.handleRequest(request); 
        } 
    } 
    //这个处理器能否处理整个请求
    protected abstract boolean canHandleRequest(Request request);
    //处理相应的请求
    protected abstract void handleRequestMyself(Request request);
} </pre>
 
<p> </p>
25 楼 llade 2009-06-23  
似乎应该做个抽象父类。然后其他几个handler继承这个抽象父类。
public abstract class AbstractHandler implements Handler {
	
	protected Handler successor;

	public AbstractHandler(Handler successor) {
		this.successor = successor;
	}

	public void handleRequest(Request request) {
		if (this.getClass().isInstance(request)) {
			System.out.println("handle "
					+ request.getClass().getSimpleName());
		} else {
			System.out.println("can't handle "
					+ request.getClass().getSimpleName());
			if (successor != null)
				successor.handleRequest(request);
		}
	}
}


BTW:此类模式应用真的不多见了。链式处理过程,无非两种:有顺序的和无顺序的。而且现代点的代码大多是配置型的,最著名的莫过于Servlet的Filter了。
24 楼 步行者 2009-06-22  
呵呵 极端了
我的意思是不要把所有事想的太极端
我说了 现在的 “长” 是为了以后的 ”短”
现在“长”不是错,为了以后能更短
长的东西就一定会重复吗。。
一定要复制粘贴吗。。
23 楼 night_stalker 2009-06-22  
我觉得按你的思路,这代码以后也不会变短,用起来也不会更舒服,改起来还得复制粘贴 ……
22 楼 ray_linn 2009-06-22  
<div class="quote_title">night_stalker 写道</div>
<div class="quote_div">
<p>譬如楼主那个 main 函数, 简直就是一个 handler 的矩阵 …… 唐僧都不带这么说话的。<br><br><span style="color: #333399;">Handler handler</span>1 = new Help<span style="color: #333399;">Handler</span>(null);  <br><span style="color: #333399;">Handler handler</span>2 = new Print<span style="color: #333399;">Handler</span>(<span style="color: #333399;">handler</span>1);  <br><span style="color: #333399;">Handler handler</span>3 = new Save<span style="color: #333399;">Handler</span>(<span style="color: #333399;">handler</span>2);  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new HelpRequest());  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new PrintRequest());  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new SaveRequest());<br><br>重复性高,大量复制粘贴出来的代码,一改就要改一片,维护起来非常痛苦。</p>
<p>重复性的指标有两个: 一个是熵,不过很难算,另一个就是长度,指导实践是最简单容易的了。</p>
<p> </p>
<p>另外 bla 几句:</p>
<p>软件工程就是让烂程序员不会把项目搞得太糟糕的学问。</p>
<p>企业不关心程序怎么写,写程序是否开心愉快。企业的目的是赚钱,什么"伟大的产品" "代码的质量"都是手段而不是目的。</p>
<p>反正中国人力资源丰富,程序员工资超低,与其提高个体生产效率,不如多招几个烂 coder。</p>
<p>看见你鼓捣新东西,就会劝你收手,劝你回头干苦活去。</p>
<p> </p>
<p><span style="color: #efefef;">可能你非常讨厌函式,但是就算 java 消失了,函式编程都依然会存在。</span></p>
</div>
<p> </p>
<p>这个远不如delegate方便。。。。。而且不会做无谓的事情。</p>
21 楼 步行者 2009-06-22  
<div class="quote_title">night_stalker 写道</div>
<div class="quote_div">
<p>譬如楼主那个 main 函数, 简直就是一个 handler 的矩阵 …… 唐僧都不带这么说话的。<br><br><span style="color: #333399;">Handler handler</span>1 = new Help<span style="color: #333399;">Handler</span>(null);  <br><span style="color: #333399;">Handler handler</span>2 = new Print<span style="color: #333399;">Handler</span>(<span style="color: #333399;">handler</span>1);  <br><span style="color: #333399;">Handler handler</span>3 = new Save<span style="color: #333399;">Handler</span>(<span style="color: #333399;">handler</span>2);  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new HelpRequest());  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new PrintRequest());  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new SaveRequest());<br><br>重复性高,大量复制粘贴出来的代码,一改就要改一片,维护起来非常痛苦。</p>
<p>重复性的指标有两个: 一个是熵,不过很难算,另一个就是长度,指导实践是最简单容易的了。</p>
<p> </p>
<p>另外 bla 几句:</p>
<p>软件工程就是让烂程序员不会把项目搞得太糟糕的学问。</p>
<p>企业当然不关心代码怎么写了。企业的目的是赚钱,什么"伟大的产品" "代码的质量"都是手段而不是目的。</p>
<p>反正中国人力资源丰富,程序员工资超低,与其提高个体生产效率,不如多招几个。</p>
<p> </p>
<p><span style="color: #efefef;">可能你非常讨厌函式,但是就算 java 消失了,函式编程都依然会存在。</span></p>
</div>
<p> </p>
<p>上面的代码只是一个 职责链的测试代码,</p>
<p>我不知道重复性的指标有哪几个,那你怎么知道长度决定了 重复性呢</p>
<p>现在的 “长” 是为了以后的 ”短”</p>
<p> </p>
<p>至于 软件工程 是以工程化方式开发软件的方法,</p>
<p>盖一栋大楼 用几个熟练技工就能完成吗。。笑话</p>
<p>我不认为有 "伟大的产品",但 "代码的质量" 却是必要的</p>
<p>企业的目的是为了长远地赚钱。图眼前小利 有何前途</p>
<p> </p>
<p>“反正中国人力资源丰富,程序员工资超低,与其提高个体生产效率,不如多招几个。”</p>
<p>不重视个体生产效率,多招几个就能 提高 生产力吗。。</p>
<p> </p>
<p> </p>
20 楼 night_stalker 2009-06-22  
<p>譬如楼主那个 main 函数, 简直就是一个 handler 的矩阵 …… 唐僧都不带这么说话的。<br><br><span style="color: #333399;">Handler handler</span>1 = new Help<span style="color: #333399;">Handler</span>(null);  <br><span style="color: #333399;">Handler handler</span>2 = new Print<span style="color: #333399;">Handler</span>(<span style="color: #333399;">handler</span>1);  <br><span style="color: #333399;">Handler handler</span>3 = new Save<span style="color: #333399;">Handler</span>(<span style="color: #333399;">handler</span>2);  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new HelpRequest());  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new PrintRequest());  <br><span style="color: #333399;">handler</span>3.<span style="color: #333399;">handle</span>Request(new SaveRequest());<br><br>重复性高,大量复制粘贴出来的代码,一改就要改一片,维护起来非常痛苦。</p>
<p>重复性的指标有两个: 一个是熵,不过很难算,另一个就是长度,指导实践是最简单容易的了。</p>
<p> </p>
<p>另外 bla 几句:</p>
<p>软件工程就是让烂程序员不会把项目搞得太糟糕的学问。</p>
<p>企业不关心程序怎么写,写程序是否开心愉快。企业的目的是赚钱,什么"伟大的产品" "代码的质量"都是手段而不是目的。</p>
<p>反正中国人力资源丰富,程序员工资超低,与其提高个体生产效率,不如多招几个烂 coder。</p>
<p>看见你鼓捣新东西,就会劝你收手,劝你回头干苦活去。</p>
<p> </p>
<p><span style="color: #efefef;">可能你非常讨厌函式,但是就算 java 消失了,函式编程都依然会存在。</span></p>
19 楼 lishuaibt 2009-06-22  
说的也有道理啊。。。个人觉得模式这东西有时候是好东西,有时候也不一定的!

做业务的时候,大量的用一些模式,程序看起来确实比较好看,也有一定的扩展性和可性,但是这要求每一个项目的参与人员都要懂得模式吧。但是事实并非如此呀,不是每个程序员都有比较高的水准啊。其实所谓的扩展性,也是建立在一定的技术层面上的,是吧。

但是做框架,做平台可能就不一样了吧。。。

个人见解!
18 楼 hatedance 2009-06-22  
步行者 写道
functor 函子
A functor is a function that can be manipulated as an object...
看得出来 你对 函数式编程 很感兴趣

设计模式 不是追究 少的代码量,
而是追求松耦合,提高适应变化的能力




看来不同的人有不同的追求。
有很多人在追求代码少。
我则一直在追求可维护性。也许是因为的工作是维护企业系统为主。
再设想开来,做平台的会追求可扩展性。做关键系统的追求安全性,稳定性。etc...
17 楼 步行者 2009-06-22  
functor 函子
A functor is a function that can be manipulated as an object...
看得出来 你对 函数式编程 很感兴趣

设计模式 不是追究 少的代码量,
而是追求松耦合,提高适应变化的能力
16 楼 night_stalker 2009-06-22  
好复杂 …… 如果用 functor 实现,代码量可以少一半,也容易让人理解和使用。
15 楼 步行者 2009-06-22  
这是一种传统的实现方式,从书中取经而来
虽然简单,但是直观
Mina 。。能简述一下 它的思想吗。。


相关推荐

    设计模式例子

    4. **Chain of Responsibility模式**(Chapter 17 CoR):CoR模式允许将多个处理者对象链接在一起,形成一个责任链。请求沿着链传递,直到某个处理者处理它。这种方式使得系统可以动态改变处理顺序,增加了灵活性。 ...

    dotnet 读 WPF 源代码笔记 wpfgfx_cor3.dll 是什么文件.rar

    在.NET框架中,WPF(Windows Presentation Foundation)是微软推出的一种用于构建富客户端应用程序的技术,它结合了图形、布局、数据绑定、多媒体等元素,为开发者提供了强大的UI设计能力。当我们深入研究WPF的源...

    一种新的协同网络增强型中继策略

    ### 一种新的协同网络增强型中继策略:深入解析 #### 概述 协同网络的增强型中继策略,作为现代通信技术中的一个重要分支,旨在通过优化中继节点的功能,提高无线通信网络的性能和可靠性。传统的中继策略,如放大...

    baseline_cor_boore.zip_baseline_基线修正程序

    基线修正是一种常见的数据分析技术,特别是在信号处理、地震学、生物医学信号分析等领域中,用于消除数据中的非特异性趋势,以便更好地识别和分析感兴趣的信号。 描述中提到"进行趋势项修正,对于在数据序列中存在...

    java责任链模式

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条链,并沿着这条链传递请求,直到有一个对象处理该请求。在这个Java实现的责任链模式中,我们可以通过类的组合而非继承来创建一个处理请求的链条,...

    cor:使使用Crystal中的颜色有趣!

    5. **颜色模式**:"cor"库提供了一种切换颜色模式的机制,可以在256色或16色模式间切换,以适应不同的终端环境。 6. **自定义颜色**:除了预定义的颜色外,"cor"还允许你通过RGB值自定义颜色,给开发者提供了更大的...

    Java设计模式之责任链模式(Chain of Responsibility模式)介绍

    责任链模式(Chain of Responsibility,CoR)是一种行为设计模式,它允许将请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。每个处理者对象都包含对下一个处理者的引用,如果当前处理者无法处理...

    CORDIC-Data.rar_CORDIC VHDL_VHDL CORDIC_cordic_cordic MATLAB_cor

    CORDIC(Coordinate Rotation Digital Computer,坐标旋转数字计算机)算法是一种高效的数字信号处理技术,广泛应用于硬件实现中的矢量旋转、复数运算、三角函数计算、取反正切等多个领域。这个压缩包“CORDIC-Data....

    Cordic.rar_CORDIC FPGA_CORDIC verilog_cordic_vast2ir_verilog cor

    CORDIC(Coordinate Rotation Digital Computer)算法,也称为旋转变换算法,是一种在数字信号处理和计算几何中广泛使用的高效算法。该算法最初由Jack E. Volder于1959年提出,主要用于实现在硬件上进行复数运算,如...

    es6-loan-cor:EC6 贷款责任链

    在软件工程中,责任链设计模式是一种行为设计模式,它允许在对象之间分发请求,使得一个类不必指定接收请求的对象。在这个项目"es6-loan-cor"中,它被应用于贷款管理审批系统,以实现一个灵活的、可扩展的审批流程。...

    UML面向对象设计与分析基础教程课件第八章

    UML面向对象设计与分析基础教程课件第八章 ...责任链设计模式是一种可用于计多具体领域的行为模式,该模式用于处理一组对象和一个请求之间的关系,当一个请求可以被多个对象处理时,就可以运用这个模式。

    T-REC-T.38-200003-S!Cor1!PDF-E.pdf

    ASN.1是一种用于定义数据结构和消息格式的标准语言,在通信协议中广泛应用。在这次更正中,一个名为“Data-Field”的新序列被引入,用以替代原有的序列。 #### Data-Field序列详解 Data-Field序列包含以下元素: ...

    cortex M3 入门资料

    Cortex-M3 是由 ARM 公司设计的一种微控制器内核,它属于 ARMv7 架构的一部分,主要应用于嵌入式系统领域。与 ARM 的其他内核相比,Cortex-M3 更加注重成本效率、低功耗以及实时性能。 - **特点**: - 高效的指令...

    4 layer IDE and RE (Cor4)-开源

    四层架构是一种常见的软件设计模式,通常包括以下四个层次: 1. **用户界面层**:这一层是用户与系统交互的接口,负责提供友好的图形用户界面(GUI),使用户能够方便地操作和获取信息。 2. **业务逻辑层**:也...

    ASP.NET MVC + Dapper + Mysql simple demo &amp; Asp.net Cor.zip

    MVC模式鼓励分离关注点,使得开发者可以独立地处理业务逻辑(Controller)、数据模型(Model)和用户界面(View)。在ASP.NET MVC中,Controller接收用户请求,处理业务逻辑,更新Model,并指示View来显示结果。 ...

    基于Intel T2200的基带硬件参考设计.pdf

    “SSTL0MODE”、“SPI0ADDR0LN”、“SC0POLARITY”等参数,分别代表了不同的信号特性和电气特性,如SSTL(Stub Series Terminated Logic)是一种用于内存接口的低电压差分信号技术,SPI(Serial Peripheral ...

    Pro Asp.Net MVC5

    MVC模式是一种用于组织应用程序的方式,其中模型(Model)代表数据和业务逻辑,视图(View)负责展示数据(模型),而控制器(Controller)负责接收用户输入并调用模型和视图。MVC模式分离了应用程序的这三个核心...

    TMC2160-86Step(原理图).pdf

    3. SpreadCycle动力模式:SpreadCycle是一种先进的驱动模式,专门针对电机的动态性能进行优化。在该模式下,驱动器能够更有效地利用电机产生的扭矩,从而实现更快的加速度和更高的运行速度。对于需要频繁启动和停止...

    基于灰度共生矩阵的图像分割方法研究

    本文探讨了一种基于灰度共生矩阵的图像分割方法,该方法特别适用于具有明显纹理特征的山地背景图像,如航拍图。图像分割是图像处理中的关键步骤,它旨在将图像划分为不同的区域,每一块区域具有相似的特性,如颜色、...

Global site tag (gtag.js) - Google Analytics