设计模式
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