设计模式
This commit is contained in:
@@ -0,0 +1,10 @@
|
|||||||
|
package com.quinn.sjms.explan;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和Non- terminalExpression完成
|
||||||
|
*/
|
||||||
|
public abstract class AbstractExpression {
|
||||||
|
|
||||||
|
abstract Object interpret();
|
||||||
|
|
||||||
|
}
|
||||||
4
sjms/src/main/java/com/quinn/sjms/explan/Context.java
Normal file
4
sjms/src/main/java/com/quinn/sjms/explan/Context.java
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package com.quinn.sjms.explan;
|
||||||
|
|
||||||
|
public class Context {
|
||||||
|
}
|
||||||
14
sjms/src/main/java/com/quinn/sjms/explan/ExplanClient.java
Normal file
14
sjms/src/main/java/com/quinn/sjms/explan/ExplanClient.java
Normal file
@@ -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<AbstractExpression> stack = null;
|
||||||
|
// add some Expression
|
||||||
|
|
||||||
|
AbstractExpression exp = stack.pop();
|
||||||
|
exp.interpret();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.quinn.sjms.explan;
|
||||||
|
|
||||||
|
public class NonTerminalExpression extends AbstractExpression {
|
||||||
|
|
||||||
|
public NonTerminalExpression(AbstractExpression ... expressions) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object interpret() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.quinn.sjms.explan;
|
||||||
|
|
||||||
|
public class TerminalExpression extends AbstractExpression {
|
||||||
|
@Override
|
||||||
|
public Object interpret() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.quinn.sjms.flyweight;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class FlyWeightFactory {
|
||||||
|
|
||||||
|
private static HashMap<String,Flyweight> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
20
sjms/src/main/java/com/quinn/sjms/flyweight/Flyweight.java
Normal file
20
sjms/src/main/java/com/quinn/sjms/flyweight/Flyweight.java
Normal file
@@ -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();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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 业务逻辑");
|
||||||
|
}
|
||||||
|
}
|
||||||
30
sjms/src/main/java/com/quinn/sjms/status/Context.java
Normal file
30
sjms/src/main/java/com/quinn/sjms/status/Context.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
14
sjms/src/main/java/com/quinn/sjms/status/State.java
Normal file
14
sjms/src/main/java/com/quinn/sjms/status/State.java
Normal file
@@ -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();
|
||||||
|
|
||||||
|
}
|
||||||
15
sjms/src/main/java/com/quinn/sjms/status/StateImpl.java
Normal file
15
sjms/src/main/java/com/quinn/sjms/status/StateImpl.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
15
sjms/src/main/java/com/quinn/sjms/status/StateImpl2.java
Normal file
15
sjms/src/main/java/com/quinn/sjms/status/StateImpl2.java
Normal file
@@ -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我需要处理");
|
||||||
|
}
|
||||||
|
}
|
||||||
12
sjms/src/main/java/com/quinn/sjms/status/StatusClient.java
Normal file
12
sjms/src/main/java/com/quinn/sjms/status/StatusClient.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user