设计模式
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
||||
<groupId>org.codehaus.jackson</groupId>
|
||||
<artifactId>jackson-xc</artifactId>
|
||||
<version>1.9.12</version>
|
||||
|
||||
@@ -14,7 +14,7 @@ public class MainEventTest {
|
||||
timer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
System.out.println("做点事情");
|
||||
}
|
||||
},1000);
|
||||
}
|
||||
|
||||
8
pom.xml
8
pom.xml
@@ -40,6 +40,13 @@
|
||||
<artifactId>quartz</artifactId>
|
||||
<version>2.3.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.20</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</dependencyManagement>
|
||||
@@ -85,6 +92,7 @@
|
||||
<module>common</module>
|
||||
<module>dal</module>
|
||||
<module>bootstrap</module>
|
||||
<module>sjms</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
||||
|
||||
35
sjms/pom.xml
Normal file
35
sjms/pom.xml
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>forever</artifactId>
|
||||
<groupId>com.love.qn</groupId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>sjms</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.love.qn</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.8.12</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
</project>
|
||||
27
sjms/src/main/java/com/quinn/sjms/LiskovDemo.java
Normal file
27
sjms/src/main/java/com/quinn/sjms/LiskovDemo.java
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public abstract class AbstractCreator {
|
||||
//创建A产品家族
|
||||
public abstract AbstractProductA createProductA();
|
||||
//创建B产品家族
|
||||
public abstract AbstractProductB createProductB();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public abstract class AbstractProductA {
|
||||
//每个产品共有的方法
|
||||
public void shareMethod(){
|
||||
}
|
||||
//每个产品相同方法,不同实现
|
||||
public abstract void doSomething();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public abstract class AbstractProductB {
|
||||
//每个产品共有的方法
|
||||
public void shareMethod(){
|
||||
}
|
||||
//每个产品相同方法,不同实现
|
||||
public abstract void doSomething();
|
||||
}
|
||||
|
||||
17
sjms/src/main/java/com/quinn/sjms/abstractpro/Client.java
Normal file
17
sjms/src/main/java/com/quinn/sjms/abstractpro/Client.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
13
sjms/src/main/java/com/quinn/sjms/abstractpro/Creator1.java
Normal file
13
sjms/src/main/java/com/quinn/sjms/abstractpro/Creator1.java
Normal file
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
13
sjms/src/main/java/com/quinn/sjms/abstractpro/Creator2.java
Normal file
13
sjms/src/main/java/com/quinn/sjms/abstractpro/Creator2.java
Normal file
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA1.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA1.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public class ProductA1 extends AbstractProductA{
|
||||
|
||||
@Override
|
||||
public void doSomething() {
|
||||
System.out.println("产品A1的实现方法");
|
||||
}
|
||||
}
|
||||
|
||||
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA2.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductA2.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public class ProductA2 extends AbstractProductA{
|
||||
|
||||
@Override
|
||||
public void doSomething() {
|
||||
System.out.println("产品A2的实现方法");
|
||||
}
|
||||
}
|
||||
|
||||
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB1.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB1.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public class ProductB1 extends AbstractProductB{
|
||||
|
||||
@Override
|
||||
public void doSomething() {
|
||||
System.out.println("产品B1的实现方法");
|
||||
}
|
||||
}
|
||||
|
||||
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB2.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/abstractpro/ProductB2.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.abstractpro;
|
||||
|
||||
public class ProductB2 extends AbstractProductB{
|
||||
|
||||
@Override
|
||||
public void doSomething() {
|
||||
System.out.println("产品B2的实现方法");
|
||||
}
|
||||
}
|
||||
|
||||
11
sjms/src/main/java/com/quinn/sjms/model/Father.java
Normal file
11
sjms/src/main/java/com/quinn/sjms/model/Father.java
Normal file
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.quinn.sjms.model;
|
||||
|
||||
public class InvokeFather {
|
||||
|
||||
public Father invoke (){
|
||||
return new Father();
|
||||
}
|
||||
}
|
||||
10
sjms/src/main/java/com/quinn/sjms/model/InvokeSon.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/model/InvokeSon.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package com.quinn.sjms.model;
|
||||
|
||||
public class InvokeSon extends InvokeFather{
|
||||
|
||||
@Override
|
||||
public Son invoke() {
|
||||
return new Son();
|
||||
}
|
||||
|
||||
}
|
||||
10
sjms/src/main/java/com/quinn/sjms/model/Son.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/model/Son.java
Normal file
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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("按喇叭");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.quinn.sjms.modelfunction;
|
||||
|
||||
public class HanmaH1Car extends HanmaCar{
|
||||
@Override
|
||||
public void job() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
27
sjms/src/main/java/com/quinn/sjms/other/CanClone.java
Normal file
27
sjms/src/main/java/com/quinn/sjms/other/CanClone.java
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
28
sjms/src/main/java/com/quinn/sjms/other/CanHuToolClone.java
Normal file
28
sjms/src/main/java/com/quinn/sjms/other/CanHuToolClone.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package com.quinn.sjms.other;
|
||||
|
||||
import cn.hutool.core.clone.CloneSupport;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CanHuToolClone extends CloneSupport<CanHuToolClone> {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.quinn.sjms.product;
|
||||
|
||||
public class ConcreteCreator extends Creator {
|
||||
@Override
|
||||
public <T extends Product> T createProduct(Class<T> 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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
14
sjms/src/main/java/com/quinn/sjms/product/Creator.java
Normal file
14
sjms/src/main/java/com/quinn/sjms/product/Creator.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package com.quinn.sjms.product;
|
||||
|
||||
/**
|
||||
* 抽象工厂
|
||||
*/
|
||||
public abstract class Creator {
|
||||
|
||||
/*
|
||||
* 创建一个产品对象,其输入参数类型可以自行设置
|
||||
* 通常为String、Enum、Class等,当然也可以为空
|
||||
*/
|
||||
public abstract <T extends Product> T createProduct(Class<T> c);
|
||||
|
||||
}
|
||||
@@ -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()");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.quinn.sjms.product;
|
||||
|
||||
public class CustomProduct2 extends Product{
|
||||
@Override
|
||||
public void method2() {
|
||||
System.out.println("CustomProduct2.method2()");
|
||||
}
|
||||
}
|
||||
13
sjms/src/main/java/com/quinn/sjms/product/Product.java
Normal file
13
sjms/src/main/java/com/quinn/sjms/product/Product.java
Normal file
@@ -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();
|
||||
|
||||
}
|
||||
22
sjms/src/main/java/com/quinn/sjms/proxy/Client.java
Normal file
22
sjms/src/main/java/com/quinn/sjms/proxy/Client.java
Normal file
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
19
sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java
Normal file
19
sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
35
sjms/src/main/java/com/quinn/sjms/proxy/GamePlayer.java
Normal file
35
sjms/src/main/java/com/quinn/sjms/proxy/GamePlayer.java
Normal file
@@ -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 + " 又升了一级!");
|
||||
}
|
||||
}
|
||||
|
||||
25
sjms/src/main/java/com/quinn/sjms/proxy/GamePlayerProxy.java
Normal file
25
sjms/src/main/java/com/quinn/sjms/proxy/GamePlayerProxy.java
Normal file
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
10
sjms/src/main/java/com/quinn/sjms/proxy/IGamePlayer.java
Normal file
10
sjms/src/main/java/com/quinn/sjms/proxy/IGamePlayer.java
Normal file
@@ -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();
|
||||
}
|
||||
17
sjms/src/main/java/com/quinn/sjms/singleton/Singleton.java
Normal file
17
sjms/src/main/java/com/quinn/sjms/singleton/Singleton.java
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import java.util.Map;
|
||||
@Controller
|
||||
public class WXTokenController {
|
||||
|
||||
//9a677cd0b9b2dc4d387dd974db140a11
|
||||
private Logger logger = LoggerFactory.getLogger("WXTokenController");
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user