docs SPI : (#938)

Few corrections to the blog : MatchStrategy  -- analyze the design based on SPI
diff --git a/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI.md b/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI.md
index 99e48cd..cc6a57a 100644
--- a/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI.md
+++ b/blog/SPI-SourceCode-Analysis-MatchStrategy-SPI.md
@@ -11,15 +11,17 @@
 - `PredictJudge`-predicate
 - `MatchStrategy`-matching strategy
 
-Relatively speaking, the `MatchStrategy` is the part that needs the least extension points. For the combined judgement of multiple conditions, the common selection rules are: All conditions are matched, at least one is matched, at least the first is met, or most of conditions  satisfied.  As well  need to handle various types of parameters, for example: `IP`, `header`, `uri`, etc.  How to make the `MatchStrategy` to be simple to use and extensible?
+Relatively speaking, the `MatchStrategy` is the part that needs the least extension points. For the combined judgement of multiple conditions, the common selection rules are: All conditions are matched, at least one is matched, at least the first is met, or most of conditions  satisfied.  As we will  need to handle various types of parameters, for example: `IP`, `header`, `uri`, etc. 
+
+How to make the `MatchStrategy` to be simple to use and extensible?
 
 ## MatchStrategy
 
-The implementation of `MatchStrategy` is in ***shenyu-plugin-base*** module. It has based on the SPI creation mechanism, and used factory pattern and strategy design pattern. The class diagram of `MatchStrategy` `is` showed as follows.
+The implementation of `MatchStrategy` is in ***shenyu-plugin-base*** module. It is based on the SPI creation mechanism, and has used factory pattern and strategy design pattern. The class diagram of `MatchStrategy` `is` showed as follows.
 
 ![MatchStrategy-class-diagram](/img/activities/code-analysis-matchstrategy-spi/MatchStrategy-class-diagram.PNG)
 
-Base on the interface `MatchStrategy` to design the implementation classes, and the  abstract class `AbstractMatchStrategy` supplies common method, while the factory class `MatchStrategyFactory` provides creation  functions.
+Based on the interface `MatchStrategy` we design the implementation classes, and the  abstract class `AbstractMatchStrategy` supplies common method, while the factory class `MatchStrategyFactory` provides creation  functions.
 
 ## MatchStrategy Interface
 
@@ -33,7 +35,7 @@
 }
 ```
 
-The annotation `@SPI` means that this is an `SPI` interface. Where `ServerWebExchange` is `org.springframework.web.server.ServerWebExchange`, represents the request-response  interactive content of of HTTP. Following is the code of `ConditionData`, the more detail about this class can refer to [code analysis](http://shenyu.apache.org/blog/PredicateJudge-SPI) of `PredicteJudge`
+The annotation `@SPI` means that this is an `SPI` interface. Where `ServerWebExchange` is `org.springframework.web.server.ServerWebExchange`, represents the request-response  interactive content of HTTP. Following is the code of `ConditionData`, the more detail about this class can refer to [code analysis](https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI/) of `PredicteJudge`
 
 ```java
 public class ConditionData {
@@ -48,7 +50,7 @@
 
 ## AbstractMatchStrategy
 
-Second, let's look at the abstract class `AbstractMatchStrategy`,it has defined a `buildRealData`  method,in this method wrapped various parameters to a unified interface  through the functionality of `ParameterDataFactory`,  which is the factory class of `ParameterData`. There supports a variety  types of  parameters , such as `Ip`, `Cookie`, `Header`,`uri`, etc.  Modifications of such parameters will not impact the calling of matching rules of `MatchStrategy`.
+Second, let's look at the abstract class `AbstractMatchStrategy`,it has defined a `buildRealData`  method,In this method it wraps various parameters to a unified interface through the functionality of `ParameterDataFactory`,  which is the factory class of `ParameterData`. It supports a variety of types of  parameters , such as `Ip`, `Cookie`, `Header`,`uri`, etc.  Modifications of such parameters will not impact the calling of matching rules of `MatchStrategy`.
 
 ```java
 public abstract class AbstractMatchStrategy {
@@ -61,24 +63,24 @@
 
 ## Implementation class and profile
 
-Then, let's look at the two implementation class based on the above interface in  ***shenyu-plugin-base*** module , that is:
+Now, let's look at the two implementation class based on the above interface in  ***shenyu-plugin-base*** module , that is:
 
 - `AndMatchStrategy`- `AND` -All conditions are matched
 
 - `OrMatchStrategy`-   `OR` -at least one is match
 
-  The profile  is shown as follows, which locates at the `SHENYU_DIRECTORY`directory. When starting up, the top-level SPI classes will read the key-value and  load the classes and cache them.
+  The properties file containing the SPI implementation is shown as follows, which located at the `SHENYU_DIRECTORY`directory. When starting up, the top-level SPI classes will read the key-value and  load the classes and cache them.
 
 ```properties
 and=org.apache.shenyu.plugin.base.condition.strategy.AndMatchStrategy
 or=org.apache.shenyu.plugin.base.condition.strategy.OrMatchStrategy
 ```
 
-These two implementation classes inherit `AbstractMatchStrategy` and implement `MatchStrategy`.
+These two implementation classes inherit `AbstractMatchStrategy` class and implement `MatchStrategy` interface.
 
 ### AndMatchStrategy-  “AND” relation
 
-Because `PredicateJudge` encapsulates the diversity of Predicate , and `ConditionData` and `ParameData` can present variety of parameters, for treating of multiple conditions, using`stream` and `lambda` expression, It can be very simple and efficient to process "AND" logic- all conditions must be matched.
+Since the `PredicateJudge` interface can encapsulate different variety of Predicates , for example  EqualsPredicateJudge, EndsWithPredicateJudge and so on, the `ConditionData` and `ParamData` passed to it can present with variety of parameters, for treating of multiple conditions. So using`stream` and `lambda` expression, it can be very simple and efficient to process "AND" logic (all conditions must be matched).
 
 ```java
 @Join
@@ -145,10 +147,10 @@
     }
 ```
 
-In `filterRule()` it is also calls the  `match()` method of `MatchStrategyFactory`.  Does it look particularly concise or even simple?  In the [code analysis](http://shenyu.apache.org/blog/PredicateJudge-SPI) of  `PredicteJudge` , you can  see more detail about parameter processing in `shenyu-plugin`.
+In `filterRule()` it is also calls the  `match()` method of `MatchStrategyFactory`.  Does it look particularly concise or even simple?  In the [code analysis](https://shenyu.apache.org/blog/SPI-SourceCode-Analysis-PredicateJudge-SPI/) of  `PredicteJudge` , you can  see more detail about parameter processing in `shenyu-plugin`.
 
 ## Summary
 
-Due to the use of  `SPI` mechanism of `Apache Shen`, the parameter selection module has the characteristic of loose coupling and extensibility. In terms of  the combination of multiple conditions, `MatchStrategy` provides a good design.  Although currently only two implementation classes are present, it can be easily develop more complex `MatchStrategy` rules in the future,  such as "`firstOf`"-first condition must matched, or "`mostOf`"- most of the conditions must be matched, etc.
+Due to the use of  `SPI` mechanism of `Apache Shenyu`, the parameter selection module has the characteristic of loose coupling and extensibility. In terms of  the combination of multiple conditions, `MatchStrategy` provides a good design.  Although currently only two implementation classes are present, it can be easily used to develop more complex `MatchStrategy` rules in the future,  such as "`firstOf`"-first condition must matched, or "`mostOf`"- most of the conditions must be matched, etc.
 
 Interested readers can read the source code of `'shenyu-plugin'` to learn more.