diff --git a/sjms/src/main/java/com/quinn/sjms/explan/AbstractExpression.java b/sjms/src/main/java/com/quinn/sjms/explan/AbstractExpression.java new file mode 100644 index 0000000..9307d8c --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/explan/AbstractExpression.java @@ -0,0 +1,10 @@ +package com.quinn.sjms.explan; + +/** + * 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和Non- terminalExpression完成 + */ +public abstract class AbstractExpression { + + abstract Object interpret(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/explan/Context.java b/sjms/src/main/java/com/quinn/sjms/explan/Context.java new file mode 100644 index 0000000..f778b3d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/explan/Context.java @@ -0,0 +1,4 @@ +package com.quinn.sjms.explan; + +public class Context { +} diff --git a/sjms/src/main/java/com/quinn/sjms/explan/ExplanClient.java b/sjms/src/main/java/com/quinn/sjms/explan/ExplanClient.java new file mode 100644 index 0000000..befca44 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/explan/ExplanClient.java @@ -0,0 +1,14 @@ +package com.quinn.sjms.explan; + +import java.util.Stack; + +public class ExplanClient { + public static void main(String[] args) { + Context ctx = new Context(); + Stack stack = null; + // add some Expression + + AbstractExpression exp = stack.pop(); + exp.interpret(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/explan/NonTerminalExpression.java b/sjms/src/main/java/com/quinn/sjms/explan/NonTerminalExpression.java new file mode 100644 index 0000000..f40e09a --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/explan/NonTerminalExpression.java @@ -0,0 +1,12 @@ +package com.quinn.sjms.explan; + +public class NonTerminalExpression extends AbstractExpression { + + public NonTerminalExpression(AbstractExpression ... expressions) { + } + + @Override + public Object interpret() { + return null; + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/explan/TerminalExpression.java b/sjms/src/main/java/com/quinn/sjms/explan/TerminalExpression.java new file mode 100644 index 0000000..5abc95d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/explan/TerminalExpression.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.explan; + +public class TerminalExpression extends AbstractExpression { + @Override + public Object interpret() { + return null; + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/flyweight/FlyWeightFactory.java b/sjms/src/main/java/com/quinn/sjms/flyweight/FlyWeightFactory.java new file mode 100644 index 0000000..a1b1829 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/flyweight/FlyWeightFactory.java @@ -0,0 +1,26 @@ +package com.quinn.sjms.flyweight; + +import java.util.HashMap; + +public class FlyWeightFactory { + + private static HashMap fPool = new HashMap(); + + //享元工厂 + public static Flyweight getFlyweight(String Extrinsic){ + //需要返回的对象 + Flyweight flyweight = null; + //在池中没有该对象 + if(fPool.containsKey(Extrinsic)){ + flyweight = fPool.get(Extrinsic); + }else{ + //根据外部状态创建享元对象 + flyweight = new FlyweightImpl(Extrinsic); + //放置到池中 + fPool.put(Extrinsic, flyweight); + } + return flyweight; + } + + +} diff --git a/sjms/src/main/java/com/quinn/sjms/flyweight/Flyweight.java b/sjms/src/main/java/com/quinn/sjms/flyweight/Flyweight.java new file mode 100644 index 0000000..888af1d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/flyweight/Flyweight.java @@ -0,0 +1,20 @@ +package com.quinn.sjms.flyweight; + +import lombok.Data; + +@Data +public abstract class Flyweight { + + //内部状态 + private String intrinsic; + //外部状态 + protected final String Extrinsic; + + //要求享元角色必须接受外部状态 + public Flyweight(String _Extrinsic){ + this.Extrinsic = _Extrinsic; + } + //定义业务操作 + public abstract void operate(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/flyweight/FlyweightImpl.java b/sjms/src/main/java/com/quinn/sjms/flyweight/FlyweightImpl.java new file mode 100644 index 0000000..8d42166 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/flyweight/FlyweightImpl.java @@ -0,0 +1,13 @@ +package com.quinn.sjms.flyweight; + +public class FlyweightImpl extends Flyweight { + + public FlyweightImpl(String _Extrinsic) { + super(_Extrinsic); + } + + @Override + public void operate() { + System.out.println("Do 业务逻辑"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/status/Context.java b/sjms/src/main/java/com/quinn/sjms/status/Context.java new file mode 100644 index 0000000..254403d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/status/Context.java @@ -0,0 +1,30 @@ +package com.quinn.sjms.status; + +public class Context { + + //定义状态 + public final static State STATE1 = new StateImpl(); + public final static State STATE2 = new StateImpl2(); + + //当前状态 + private State currentState; + //获得当前状态 + public State getCurrentState() { + return currentState; + } + //设置当前状态 + public void setCurrentState(State currentState) { + this.currentState = currentState; + //切换状态 + this.currentState.setContext(this); + } + + public void handle1(){ + this.currentState.handle1(); + } + + public void handle2(){ + this.currentState.handle2(); + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/status/State.java b/sjms/src/main/java/com/quinn/sjms/status/State.java new file mode 100644 index 0000000..e98d437 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/status/State.java @@ -0,0 +1,14 @@ +package com.quinn.sjms.status; + +import lombok.Data; + +@Data +public abstract class State { + + Context context; + + public abstract void handle1(); + + public abstract void handle2(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/status/StateImpl.java b/sjms/src/main/java/com/quinn/sjms/status/StateImpl.java new file mode 100644 index 0000000..c54cd3f --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/status/StateImpl.java @@ -0,0 +1,15 @@ +package com.quinn.sjms.status; + +public class StateImpl extends State { + @Override + public void handle1() { + System.out.println("111我需要处理"); + } + + @Override + public void handle2() { + // 我不处理 + this.context.setCurrentState(Context.STATE2); + this.context.handle2(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/status/StateImpl2.java b/sjms/src/main/java/com/quinn/sjms/status/StateImpl2.java new file mode 100644 index 0000000..ce6030f --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/status/StateImpl2.java @@ -0,0 +1,15 @@ +package com.quinn.sjms.status; + +public class StateImpl2 extends State { + @Override + public void handle1() { + // 我不处理 + this.context.setCurrentState(Context.STATE1); + this.context.handle1(); + } + + @Override + public void handle2() { + System.out.println("222我需要处理"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/status/StatusClient.java b/sjms/src/main/java/com/quinn/sjms/status/StatusClient.java new file mode 100644 index 0000000..34cdfd1 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/status/StatusClient.java @@ -0,0 +1,12 @@ +package com.quinn.sjms.status; + +public class StatusClient { + + public static void main(String[] args) { + Context context = new Context(); + context.setCurrentState(new StateImpl()); + context.handle1(); + context.handle2(); + } + +}