设计模式

This commit is contained in:
2023-03-04 15:59:06 +08:00
parent 63ca605019
commit 21960e7af9
13 changed files with 193 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
package com.quinn.sjms.explan;
/**
* 具体的解释任务由各个实现类完成具体的解释器分别由TerminalExpression和Non- terminalExpression完成
*/
public abstract class AbstractExpression {
abstract Object interpret();
}

View File

@@ -0,0 +1,4 @@
package com.quinn.sjms.explan;
public class Context {
}

View 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();
}
}

View File

@@ -0,0 +1,12 @@
package com.quinn.sjms.explan;
public class NonTerminalExpression extends AbstractExpression {
public NonTerminalExpression(AbstractExpression ... expressions) {
}
@Override
public Object interpret() {
return null;
}
}

View File

@@ -0,0 +1,8 @@
package com.quinn.sjms.explan;
public class TerminalExpression extends AbstractExpression {
@Override
public Object interpret() {
return null;
}
}

View File

@@ -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;
}
}

View 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();
}

View File

@@ -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 业务逻辑");
}
}

View 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();
}
}

View 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();
}

View 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();
}
}

View 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我需要处理");
}
}

View 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();
}
}