diff --git a/common/pom.xml b/common/pom.xml
index face3c3..6c6e82b 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -23,6 +23,7 @@
1.2
+
org.codehaus.jackson
jackson-xc
1.9.12
diff --git a/common/src/main/java/com/qn/test/event/MainEventTest.java b/common/src/main/java/com/qn/test/event/MainEventTest.java
index c606ed6..5695f66 100644
--- a/common/src/main/java/com/qn/test/event/MainEventTest.java
+++ b/common/src/main/java/com/qn/test/event/MainEventTest.java
@@ -14,7 +14,7 @@ public class MainEventTest {
timer.schedule(new TimerTask() {
@Override
public void run() {
-
+ System.out.println("做点事情");
}
},1000);
}
diff --git a/pom.xml b/pom.xml
index c1583f9..c90a45a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,13 @@
quartz
2.3.0
+
+
+ org.projectlombok
+ lombok
+ 1.18.20
+
+
@@ -85,6 +92,7 @@
common
dal
bootstrap
+ sjms
diff --git a/sjms/pom.xml b/sjms/pom.xml
new file mode 100644
index 0000000..b42a492
--- /dev/null
+++ b/sjms/pom.xml
@@ -0,0 +1,35 @@
+
+
+
+ forever
+ com.love.qn
+ 1.0.0
+
+ 4.0.0
+
+ sjms
+
+
+
+ com.love.qn
+ common
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ cn.hutool
+ hutool-all
+ 5.8.12
+
+
+
+
+
+
+
diff --git a/sjms/src/main/java/com/quinn/sjms/LiskovDemo.java b/sjms/src/main/java/com/quinn/sjms/LiskovDemo.java
new file mode 100644
index 0000000..d2c6f79
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/LiskovDemo.java
@@ -0,0 +1,27 @@
+package com.quinn.sjms;
+
+import com.quinn.sjms.model.Father;
+import com.quinn.sjms.model.Son;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class LiskovDemo {
+
+ public static void main(String[] args) {
+ HashMap hMap = new HashMap();
+ Map map = new HashMap();
+ Father f = new Father();
+ f.say(hMap);
+
+ Son s = new Son();
+ s.say(hMap);
+
+ Son s1 = new Son();
+ s1.say(map);
+
+// Father f1 = new Father();
+// f1.say(map);
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractCreator.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractCreator.java
new file mode 100644
index 0000000..2672674
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractCreator.java
@@ -0,0 +1,9 @@
+package com.quinn.sjms.abstractpro;
+
+public abstract class AbstractCreator {
+ //创建A产品家族
+ public abstract AbstractProductA createProductA();
+ //创建B产品家族
+ public abstract AbstractProductB createProductB();
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractProductA.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractProductA.java
new file mode 100644
index 0000000..e829e88
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractProductA.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.abstractpro;
+
+public abstract class AbstractProductA {
+ //每个产品共有的方法
+ public void shareMethod(){
+ }
+ //每个产品相同方法,不同实现
+ public abstract void doSomething();
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractProductB.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractProductB.java
new file mode 100644
index 0000000..cd2790a
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/AbstractProductB.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.abstractpro;
+
+public abstract class AbstractProductB {
+ //每个产品共有的方法
+ public void shareMethod(){
+ }
+ //每个产品相同方法,不同实现
+ public abstract void doSomething();
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/Client.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/Client.java
new file mode 100644
index 0000000..0387825
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/Client.java
@@ -0,0 +1,17 @@
+package com.quinn.sjms.abstractpro;
+
+public class Client {
+ public static void main(String[] args) {
+ //定义出两个工厂
+ AbstractCreator creator1 = new Creator1();
+ AbstractCreator creator2 = new Creator2();
+ //产生A1对象
+ AbstractProductA a1 = creator1.createProductA();
+ //产生A2对象
+ AbstractProductA a2 = creator2.createProductA();
+ //产生B1对象
+ AbstractProductB b1 = creator1.createProductB();
+ //产生B2对象
+ AbstractProductB b2 = creator2.createProductB();
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/Creator1.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/Creator1.java
new file mode 100644
index 0000000..77f781a
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/Creator1.java
@@ -0,0 +1,13 @@
+package com.quinn.sjms.abstractpro;
+
+public class Creator1 extends AbstractCreator{
+ //只生产产品等级为1的A产品
+ public AbstractProductA createProductA() {
+ return new ProductA1();
+ }
+ //只生产产品等级为1的B产品
+ public AbstractProductB createProductB() {
+ return new ProductB1();
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/Creator2.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/Creator2.java
new file mode 100644
index 0000000..d83b02a
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/Creator2.java
@@ -0,0 +1,13 @@
+package com.quinn.sjms.abstractpro;
+
+public class Creator2 extends AbstractCreator{
+ //只生产产品等级为2的A产品
+ public AbstractProductA createProductA() {
+ return new ProductA2();
+ }
+ //只生产产品等级为2的B产品
+ public AbstractProductB createProductB() {
+ return new ProductB2();
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA1.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA1.java
new file mode 100644
index 0000000..b85e3c1
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA1.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.abstractpro;
+
+public class ProductA1 extends AbstractProductA{
+
+ @Override
+ public void doSomething() {
+ System.out.println("产品A1的实现方法");
+ }
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA2.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA2.java
new file mode 100644
index 0000000..fa7a774
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA2.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.abstractpro;
+
+public class ProductA2 extends AbstractProductA{
+
+ @Override
+ public void doSomething() {
+ System.out.println("产品A2的实现方法");
+ }
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB1.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB1.java
new file mode 100644
index 0000000..6d37d08
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB1.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.abstractpro;
+
+public class ProductB1 extends AbstractProductB{
+
+ @Override
+ public void doSomething() {
+ System.out.println("产品B1的实现方法");
+ }
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB2.java b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB2.java
new file mode 100644
index 0000000..a3c4a07
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB2.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.abstractpro;
+
+public class ProductB2 extends AbstractProductB{
+
+ @Override
+ public void doSomething() {
+ System.out.println("产品B2的实现方法");
+ }
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/model/Father.java b/sjms/src/main/java/com/quinn/sjms/model/Father.java
new file mode 100644
index 0000000..f7dca26
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/model/Father.java
@@ -0,0 +1,11 @@
+package com.quinn.sjms.model;
+
+import java.util.HashMap;
+
+public class Father {
+
+ public void say(HashMap hashMap) {
+ System.out.println("Father say");
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/model/InvokeFather.java b/sjms/src/main/java/com/quinn/sjms/model/InvokeFather.java
new file mode 100644
index 0000000..dd79428
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/model/InvokeFather.java
@@ -0,0 +1,8 @@
+package com.quinn.sjms.model;
+
+public class InvokeFather {
+
+ public Father invoke (){
+ return new Father();
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/model/InvokeSon.java b/sjms/src/main/java/com/quinn/sjms/model/InvokeSon.java
new file mode 100644
index 0000000..dda1b13
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/model/InvokeSon.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.model;
+
+public class InvokeSon extends InvokeFather{
+
+ @Override
+ public Son invoke() {
+ return new Son();
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/model/Son.java b/sjms/src/main/java/com/quinn/sjms/model/Son.java
new file mode 100644
index 0000000..5cf309f
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/model/Son.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.model;
+
+import java.util.Map;
+
+public class Son extends Father {
+
+ public void say(Map hashMap) {
+ System.out.println("Son say");
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/modelfunction/HanmaCar.java b/sjms/src/main/java/com/quinn/sjms/modelfunction/HanmaCar.java
new file mode 100644
index 0000000..28da762
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/modelfunction/HanmaCar.java
@@ -0,0 +1,13 @@
+package com.quinn.sjms.modelfunction;
+
+public abstract class HanmaCar {
+ public void run(){
+ System.out.println("开始跑了");
+ }
+
+ public abstract void job();
+
+ public final void didi(){
+ System.out.println("按喇叭");
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/modelfunction/HanmaH1Car.java b/sjms/src/main/java/com/quinn/sjms/modelfunction/HanmaH1Car.java
new file mode 100644
index 0000000..f4e5c7c
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/modelfunction/HanmaH1Car.java
@@ -0,0 +1,9 @@
+package com.quinn.sjms.modelfunction;
+
+public class HanmaH1Car extends HanmaCar{
+ @Override
+ public void job() {
+
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/other/CanClone.java b/sjms/src/main/java/com/quinn/sjms/other/CanClone.java
new file mode 100644
index 0000000..c0bc80a
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/other/CanClone.java
@@ -0,0 +1,27 @@
+package com.quinn.sjms.other;
+
+import lombok.Data;
+
+@Data
+public class CanClone implements Cloneable{
+
+ private String name;
+
+ private String line;
+
+ @Override
+ protected CanClone clone() throws CloneNotSupportedException {
+ return (CanClone) super.clone();
+ }
+
+ public static void main(String[] args) throws CloneNotSupportedException {
+ CanClone canClone = new CanClone();
+ canClone.setName("dad");
+ canClone.setLine("test");
+ CanClone clone = canClone.clone();
+ canClone.setLine("new");
+ System.out.println(canClone);
+ System.out.println(clone);
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/other/CanHuToolClone.java b/sjms/src/main/java/com/quinn/sjms/other/CanHuToolClone.java
new file mode 100644
index 0000000..73c106f
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/other/CanHuToolClone.java
@@ -0,0 +1,28 @@
+package com.quinn.sjms.other;
+
+import cn.hutool.core.clone.CloneSupport;
+import lombok.Data;
+
+@Data
+public class CanHuToolClone extends CloneSupport {
+
+ private String name;
+
+ private String line;
+
+ @Override
+ public CanHuToolClone clone() {
+ return (CanHuToolClone) super.clone();
+ }
+
+ public static void main(String[] args) {
+ CanHuToolClone canClone = new CanHuToolClone();
+ canClone.setName("dad");
+ canClone.setLine("test");
+ CanHuToolClone clone = canClone.clone();
+ canClone.setLine("new");
+ System.out.println(canClone);
+ System.out.println(clone);
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/product/ConcreteCreator.java b/sjms/src/main/java/com/quinn/sjms/product/ConcreteCreator.java
new file mode 100644
index 0000000..77e3c6c
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/product/ConcreteCreator.java
@@ -0,0 +1,28 @@
+package com.quinn.sjms.product;
+
+public class ConcreteCreator extends Creator {
+ @Override
+ public T createProduct(Class c) {
+ Product product=null;
+ try {
+ Class> aClass = Class.forName(c.getName());
+ product = (Product) aClass.newInstance();
+ } catch (Exception e) {
+ //异常处理
+ }
+ return (T)product;
+ }
+
+ public static void main(String[] args) {
+ ConcreteCreator creator = new ConcreteCreator();
+ CustomProduct1 product = creator.createProduct(CustomProduct1.class);
+ product.method2();
+ product.method1();
+
+ CustomProduct2 product2 = creator.createProduct(CustomProduct2.class);
+ product2.method2();
+ product2.method1();
+
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/product/Creator.java b/sjms/src/main/java/com/quinn/sjms/product/Creator.java
new file mode 100644
index 0000000..dbe7c9b
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/product/Creator.java
@@ -0,0 +1,14 @@
+package com.quinn.sjms.product;
+
+/**
+ * 抽象工厂
+ */
+public abstract class Creator {
+
+ /*
+ * 创建一个产品对象,其输入参数类型可以自行设置
+ * 通常为String、Enum、Class等,当然也可以为空
+ */
+ public abstract T createProduct(Class c);
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/product/CustomProduct1.java b/sjms/src/main/java/com/quinn/sjms/product/CustomProduct1.java
new file mode 100644
index 0000000..66d265d
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/product/CustomProduct1.java
@@ -0,0 +1,14 @@
+package com.quinn.sjms.product;
+
+public class CustomProduct1 extends Product{
+
+ @Override
+ public void method1() {
+ System.out.println("CustomProduct1.method1");
+ }
+
+ @Override
+ public void method2() {
+ System.out.println("CustomProduct1.method2()");
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/product/CustomProduct2.java b/sjms/src/main/java/com/quinn/sjms/product/CustomProduct2.java
new file mode 100644
index 0000000..95b26a7
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/product/CustomProduct2.java
@@ -0,0 +1,8 @@
+package com.quinn.sjms.product;
+
+public class CustomProduct2 extends Product{
+ @Override
+ public void method2() {
+ System.out.println("CustomProduct2.method2()");
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/product/Product.java b/sjms/src/main/java/com/quinn/sjms/product/Product.java
new file mode 100644
index 0000000..35b4640
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/product/Product.java
@@ -0,0 +1,13 @@
+package com.quinn.sjms.product;
+
+public abstract class Product {
+
+ //产品类的公共方法
+ public void method1(){
+ System.out.println("Product.method1");
+ //业务逻辑处理
+ }
+ //抽象方法
+ public abstract void method2();
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/Client.java b/sjms/src/main/java/com/quinn/sjms/proxy/Client.java
new file mode 100644
index 0000000..3e7a211
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/proxy/Client.java
@@ -0,0 +1,22 @@
+package com.quinn.sjms.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+public class Client {
+
+ public static void main(String[] args) throws Exception {
+ GamePlayer player = new GamePlayer("张三");
+ InvocationHandler handler = new GamePlayIH(player);
+ //获得类的class loader
+ ClassLoader cl = player.getClass().getClassLoader();
+ //动态产生一个代理者
+ IGamePlayer proxy = (IGamePlayer) Proxy.newProxyInstance(cl,
+ new Class[]{IGamePlayer.class},handler);
+ //登录
+ proxy.login("zhangSan", "password");
+ proxy.killBoss();
+ proxy.upgrade();
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java
new file mode 100644
index 0000000..3daea0b
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java
@@ -0,0 +1,19 @@
+package com.quinn.sjms.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+public class GamePlayIH implements InvocationHandler {
+
+ Object target;
+
+ public GamePlayIH(Object _obj){
+ this.target = _obj;
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ Object invoke = method.invoke(proxy,args);
+ return invoke;
+ }
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayer.java b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayer.java
new file mode 100644
index 0000000..ce83731
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayer.java
@@ -0,0 +1,35 @@
+package com.quinn.sjms.proxy;
+
+import lombok.Data;
+
+@Data
+public class GamePlayer implements IGamePlayer {
+ private String name = "";
+
+ //构造函数限制谁能创建对象,并同时传递姓名
+ public GamePlayer(String _name) throws Exception{
+ this.name = _name;
+ }
+
+ //构造函数限制谁能创建对象,并同时传递姓名
+ public GamePlayer(IGamePlayer _gamePlayer,String _name) throws Exception{
+ if(_gamePlayer == null ){
+ throw new Exception("不能创建真实角色!");
+ }else{
+ this.name = _name;
+ }
+ }
+ //打怪,最期望的就是杀老怪
+ public void killBoss() {
+ System.out.println(this.name + "在打怪!");
+ }
+ //进游戏之前你肯定要登录吧,这是一个必要条件
+ public void login(String user, String password) {
+ System.out.println("登录名为"+user + "的用户" + this.name + "登录成功!");
+ }
+ //升级,升级有很多方法,花钱买是一种,做任务也是一种
+ public void upgrade() {
+ System.out.println(this.name + " 又升了一级!");
+ }
+}
+
diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayerProxy.java b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayerProxy.java
new file mode 100644
index 0000000..4731a8f
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayerProxy.java
@@ -0,0 +1,25 @@
+package com.quinn.sjms.proxy;
+
+public class GamePlayerProxy{
+ private IGamePlayer gamePlayer = null;
+ //通过构造函数传递要对谁进行代练
+// public GamePlayerProxy(String name){
+// try {
+// gamePlayer = new GamePlayer(this,name);
+// } catch (Exception e) {
+// }
+// }
+ //代练杀怪
+ public void killBoss() {
+ this.gamePlayer.killBoss();
+ }
+ //代练登录
+ public void login(String user, String password) {
+ this.gamePlayer.login(user, password);
+ }
+ //代练升级
+ public void upgrade() {
+ this.gamePlayer.upgrade();
+ }
+
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/IGamePlayer.java b/sjms/src/main/java/com/quinn/sjms/proxy/IGamePlayer.java
new file mode 100644
index 0000000..4d30707
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/proxy/IGamePlayer.java
@@ -0,0 +1,10 @@
+package com.quinn.sjms.proxy;
+
+public interface IGamePlayer {
+ //登录游戏
+ public void login(String user,String password);
+ //杀怪,网络游戏的主要特色
+ public void killBoss();
+ //升级
+ public void upgrade();
+}
diff --git a/sjms/src/main/java/com/quinn/sjms/singleton/Singleton.java b/sjms/src/main/java/com/quinn/sjms/singleton/Singleton.java
new file mode 100644
index 0000000..04afad2
--- /dev/null
+++ b/sjms/src/main/java/com/quinn/sjms/singleton/Singleton.java
@@ -0,0 +1,17 @@
+package com.quinn.sjms.singleton;
+
+public class Singleton {
+
+ private static Singleton singleton = null;
+ //限制产生多个对象
+ private Singleton(){
+ }
+ //通过该方法获得实例对象
+ public static Singleton getSingleton(){
+ if(singleton == null){ // 懒汉式 // 饿汉式 全局静态变量已经New 了对象,无需判空
+ singleton = new Singleton();
+ }
+ return singleton;
+ }
+
+}
diff --git a/web/src/main/java/com/qn/controller/WXTokenController.java b/web/src/main/java/com/qn/controller/WXTokenController.java
index b19866f..ae2856f 100644
--- a/web/src/main/java/com/qn/controller/WXTokenController.java
+++ b/web/src/main/java/com/qn/controller/WXTokenController.java
@@ -17,6 +17,7 @@ import java.util.Map;
@Controller
public class WXTokenController {
+ //9a677cd0b9b2dc4d387dd974db140a11
private Logger logger = LoggerFactory.getLogger("WXTokenController");
/**