From 9d14afb724a06e210eb64d8f6bea319048a70a28 Mon Sep 17 00:00:00 2001
From: bu_ausb <2036870220@qq.com>
Date: Sat, 28 Oct 2023 21:43:32 +0800
Subject: [PATCH 1/3] i don't known if it is right
---
client-side/.gitignore | 38 +++++++++++++++++++
client-side/pom.xml | 37 ++++++++++++++++++
.../src/main/java/org/example/App.java | 13 +++++++
.../org/example/RegistrationServiceProxy.java | 22 +++++++++++
.../src/test/java/org/example/AppTest.java | 38 +++++++++++++++++++
pom.xml | 1 +
6 files changed, 149 insertions(+)
create mode 100644 client-side/.gitignore
create mode 100644 client-side/pom.xml
create mode 100644 client-side/src/main/java/org/example/App.java
create mode 100644 client-side/src/main/java/org/example/RegistrationServiceProxy.java
create mode 100644 client-side/src/test/java/org/example/AppTest.java
diff --git a/client-side/.gitignore b/client-side/.gitignore
new file mode 100644
index 000000000000..5ff6309b7199
--- /dev/null
+++ b/client-side/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/client-side/pom.xml b/client-side/pom.xml
new file mode 100644
index 000000000000..898d91dbee96
--- /dev/null
+++ b/client-side/pom.xml
@@ -0,0 +1,37 @@
+
+ 4.0.0
+
+ com.iluwatar
+ java-design-patterns
+ 1.26.0-SNAPSHOT
+
+
+ org.example
+ client-side
+ jar
+
+ client-side
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+ org.springframework
+ spring-web
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
diff --git a/client-side/src/main/java/org/example/App.java b/client-side/src/main/java/org/example/App.java
new file mode 100644
index 000000000000..5f21d2e226b4
--- /dev/null
+++ b/client-side/src/main/java/org/example/App.java
@@ -0,0 +1,13 @@
+package org.example;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/client-side/src/main/java/org/example/RegistrationServiceProxy.java b/client-side/src/main/java/org/example/RegistrationServiceProxy.java
new file mode 100644
index 000000000000..f1fe1b318666
--- /dev/null
+++ b/client-side/src/main/java/org/example/RegistrationServiceProxy.java
@@ -0,0 +1,22 @@
+package org.example;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+
+@Component
+public class RegistrationServiceProxy {
+ @Value("${user_registration_url}")
+ String userRegistrationUrl;
+ @Autowired
+ RestTemplate restTemplate;
+ @Autowired
+ HttpRequest request;
+ public void registerUser(String emailAddress,String password){
+ restTemplate.postForEntity(userRegistrationUrl,request,HttpResponse.class);
+ }
+}
diff --git a/client-side/src/test/java/org/example/AppTest.java b/client-side/src/test/java/org/example/AppTest.java
new file mode 100644
index 000000000000..d5f435df0340
--- /dev/null
+++ b/client-side/src/test/java/org/example/AppTest.java
@@ -0,0 +1,38 @@
+package org.example;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/pom.xml b/pom.xml
index a68345bcba94..58166a7130e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -208,6 +208,7 @@
thread-local-storage
optimistic-offline-lock
crtp
+ client-side
From 24ce9ea6d0ea4f83600679334cd519fc54680072 Mon Sep 17 00:00:00 2001
From: bu_ausb <2036870220@qq.com>
Date: Sun, 29 Oct 2023 10:07:07 +0800
Subject: [PATCH 2/3] feature: add client-side pattern (#2685)
---
client-side/src/main/java/org/example/App.java | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/client-side/src/main/java/org/example/App.java b/client-side/src/main/java/org/example/App.java
index 5f21d2e226b4..db3faeac3fd8 100644
--- a/client-side/src/main/java/org/example/App.java
+++ b/client-side/src/main/java/org/example/App.java
@@ -1,13 +1,16 @@
package org.example;
+import org.springframework.beans.factory.annotation.Autowired;
+
/**
* Hello world!
*
*/
-public class App
+public class App
{
public static void main( String[] args )
{
- System.out.println( "Hello World!" );
+ RegistrationServiceProxy registrationServiceProxy = new RegistrationServiceProxy();
+ registrationServiceProxy.registerUser();
}
}
From 2393ad8d281602f90773a9ae5bc7c2819b0d7d48 Mon Sep 17 00:00:00 2001
From: bu_ausb <2036870220@qq.com>
Date: Sun, 29 Oct 2023 10:46:37 +0800
Subject: [PATCH 3/3] feature: Translation to Chinese (#2289) marker pattern
---
client-side/.gitignore | 38 ----------------
client-side/pom.xml | 37 ----------------
.../src/main/java/org/example/App.java | 16 -------
.../org/example/RegistrationServiceProxy.java | 22 ----------
.../src/test/java/org/example/AppTest.java | 38 ----------------
localization/zh/marker/READEME.md | 28 ++++++++++++
localization/zh/marker/etc/MarkerDiagram.png | Bin 0 -> 6461 bytes
localization/zh/marker/etc/MarkerDiagram.ucls | 41 ++++++++++++++++++
localization/zh/marker/etc/marker.urm.puml | 2 +
9 files changed, 71 insertions(+), 151 deletions(-)
delete mode 100644 client-side/.gitignore
delete mode 100644 client-side/pom.xml
delete mode 100644 client-side/src/main/java/org/example/App.java
delete mode 100644 client-side/src/main/java/org/example/RegistrationServiceProxy.java
delete mode 100644 client-side/src/test/java/org/example/AppTest.java
create mode 100644 localization/zh/marker/READEME.md
create mode 100644 localization/zh/marker/etc/MarkerDiagram.png
create mode 100644 localization/zh/marker/etc/MarkerDiagram.ucls
create mode 100644 localization/zh/marker/etc/marker.urm.puml
diff --git a/client-side/.gitignore b/client-side/.gitignore
deleted file mode 100644
index 5ff6309b7199..000000000000
--- a/client-side/.gitignore
+++ /dev/null
@@ -1,38 +0,0 @@
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-
-### IntelliJ IDEA ###
-.idea/modules.xml
-.idea/jarRepositories.xml
-.idea/compiler.xml
-.idea/libraries/
-*.iws
-*.iml
-*.ipr
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
\ No newline at end of file
diff --git a/client-side/pom.xml b/client-side/pom.xml
deleted file mode 100644
index 898d91dbee96..000000000000
--- a/client-side/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
- 4.0.0
-
- com.iluwatar
- java-design-patterns
- 1.26.0-SNAPSHOT
-
-
- org.example
- client-side
- jar
-
- client-side
- http://maven.apache.org
-
-
- UTF-8
-
-
-
-
- junit
- junit
- 3.8.1
- test
-
-
- org.springframework
- spring-web
-
-
- org.springframework.boot
- spring-boot-starter
-
-
-
diff --git a/client-side/src/main/java/org/example/App.java b/client-side/src/main/java/org/example/App.java
deleted file mode 100644
index db3faeac3fd8..000000000000
--- a/client-side/src/main/java/org/example/App.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.example;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Hello world!
- *
- */
-public class App
-{
- public static void main( String[] args )
- {
- RegistrationServiceProxy registrationServiceProxy = new RegistrationServiceProxy();
- registrationServiceProxy.registerUser();
- }
-}
diff --git a/client-side/src/main/java/org/example/RegistrationServiceProxy.java b/client-side/src/main/java/org/example/RegistrationServiceProxy.java
deleted file mode 100644
index f1fe1b318666..000000000000
--- a/client-side/src/main/java/org/example/RegistrationServiceProxy.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.example;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-
-@Component
-public class RegistrationServiceProxy {
- @Value("${user_registration_url}")
- String userRegistrationUrl;
- @Autowired
- RestTemplate restTemplate;
- @Autowired
- HttpRequest request;
- public void registerUser(String emailAddress,String password){
- restTemplate.postForEntity(userRegistrationUrl,request,HttpResponse.class);
- }
-}
diff --git a/client-side/src/test/java/org/example/AppTest.java b/client-side/src/test/java/org/example/AppTest.java
deleted file mode 100644
index d5f435df0340..000000000000
--- a/client-side/src/test/java/org/example/AppTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.example;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest
- extends TestCase
-{
- /**
- * Create the test case
- *
- * @param testName name of the test case
- */
- public AppTest( String testName )
- {
- super( testName );
- }
-
- /**
- * @return the suite of tests being tested
- */
- public static Test suite()
- {
- return new TestSuite( AppTest.class );
- }
-
- /**
- * Rigourous Test :-)
- */
- public void testApp()
- {
- assertTrue( true );
- }
-}
diff --git a/localization/zh/marker/READEME.md b/localization/zh/marker/READEME.md
new file mode 100644
index 000000000000..94c3026d1789
--- /dev/null
+++ b/localization/zh/marker/READEME.md
@@ -0,0 +1,28 @@
+---
+title: Marker Interface
+category: Structural
+language: ch
+tag:
+ - Decoupling
+---
+
+## 目的
+使用空接口作为标记来区分特殊处理的对象。
+
+## 类图
+
+
+## 适用场景
+在以下场景使用Marker Interface pattern
+
+* 您希望将特殊对象与普通对象区分开来(以不同方式处理它们)
+* 您希望标记某些对象可用于某些类型的操作
+
+## 应用案例
+
+* [javase.8.docs.api.java.io.Serializable](https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html)
+* [javase.8.docs.api.java.lang.Cloneable](https://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.html)
+
+## 鸣谢
+
+* [Effective Java](https://www.amazon.com/gp/product/0134685997/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0134685997&linkCode=as2&tag=javadesignpat-20&linkId=4e349f4b3ff8c50123f8147c828e53eb)
diff --git a/localization/zh/marker/etc/MarkerDiagram.png b/localization/zh/marker/etc/MarkerDiagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ed4f9c567809787d9317733a2e4fe40cbe3284c
GIT binary patch
literal 6461
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
WzLyy+Lj79=qN54ic(48-^uGXLahsh0
literal 0
HcmV?d00001
diff --git a/localization/zh/marker/etc/MarkerDiagram.ucls b/localization/zh/marker/etc/MarkerDiagram.ucls
new file mode 100644
index 000000000000..0f8376e40e23
--- /dev/null
+++ b/localization/zh/marker/etc/MarkerDiagram.ucls
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/localization/zh/marker/etc/marker.urm.puml b/localization/zh/marker/etc/marker.urm.puml
new file mode 100644
index 000000000000..02af47ddf261
--- /dev/null
+++ b/localization/zh/marker/etc/marker.urm.puml
@@ -0,0 +1,2 @@
+@startuml
+@enduml
\ No newline at end of file