From c754833cef71ea55f3f3255e5d334fdb4ebc3923 Mon Sep 17 00:00:00 2001 From: limqhz Date: Tue, 28 Feb 2023 18:49:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootstrap/pom.xml | 4 +- common/pom.xml | 2 +- dal/pom.xml | 4 +- pom.xml | 3 +- sjms/pom.xml | 2 +- .../java/com/quinn/sjms/adapter/Adaptee.java | 9 ++++ .../java/com/quinn/sjms/adapter/Adapter.java | 8 ++++ .../com/quinn/sjms/adapter/AdapterClient.java | 15 ++++++ .../java/com/quinn/sjms/adapter/Target.java | 7 +++ .../com/quinn/sjms/adapter/TargetImpl.java | 8 ++++ .../java/com/quinn/sjms/chain/Handler.java | 34 ++++++++++++++ .../com/quinn/sjms/decorator/Component.java | 7 +++ .../sjms/decorator/ConcreteComponent.java | 8 ++++ .../com/quinn/sjms/decorator/Decorator.java | 15 ++++++ .../quinn/sjms/decorator/DecoratorClient.java | 11 +++++ .../quinn/sjms/decorator/DecoratorImpl.java | 17 +++++++ .../quinn/sjms/decorator/DecoratorImpl2.java | 17 +++++++ .../com/quinn/sjms/iterator/IProject.java | 11 +++++ .../com/quinn/sjms/iterator/IProjectImpl.java | 35 ++++++++++++++ .../quinn/sjms/iterator/IProjectIterator.java | 6 +++ .../quinn/sjms/iterator/IteratorClient.java | 17 +++++++ .../quinn/sjms/iterator/ProjectIterator.java | 24 ++++++++++ .../java/com/quinn/sjms/makeup/Component.java | 8 ++++ .../java/com/quinn/sjms/makeup/Composite.java | 27 +++++++++++ .../main/java/com/quinn/sjms/makeup/Leaf.java | 12 +++++ .../com/quinn/sjms/makeup/MakeUpClient.java | 31 ++++++++++++ .../sjms/mediator/AbstractColleague.java | 8 ++++ .../quinn/sjms/mediator/AbstractMediator.java | 17 +++++++ .../com/quinn/sjms/mediator/Mediator.java | 47 +++++++++++++++++++ .../quinn/sjms/mediator/MediatorClient.java | 22 +++++++++ .../com/quinn/sjms/mediator/Purchase.java | 16 +++++++ .../java/com/quinn/sjms/mediator/Sale.java | 27 +++++++++++ .../java/com/quinn/sjms/mediator/Stock.java | 29 ++++++++++++ .../com/quinn/sjms/order/BigReceiver.java | 8 ++++ .../java/com/quinn/sjms/order/ByeCommand.java | 17 +++++++ .../java/com/quinn/sjms/order/Command.java | 7 +++ .../com/quinn/sjms/order/HelloCommand.java | 17 +++++++ .../java/com/quinn/sjms/order/Invoker.java | 15 ++++++ .../com/quinn/sjms/order/OrderClient.java | 13 +++++ .../java/com/quinn/sjms/order/Receiver.java | 6 +++ .../java/com/quinn/sjms/prototype/Thing.java | 19 ++++++++ .../java/com/quinn/sjms/proxy/Client.java | 19 ++++++++ .../com/quinn/sjms/proxy/DynamicProxy.java | 20 ++++++++ .../java/com/quinn/sjms/proxy/GamePlayIH.java | 5 +- .../com/quinn/sjms/tactics/Calculator.java | 27 +++++++++++ .../java/com/quinn/sjms/tactics/Context.java | 14 ++++++ .../java/com/quinn/sjms/tactics/Strategy.java | 7 +++ .../com/quinn/sjms/tactics/StrategyImpl.java | 8 ++++ .../com/quinn/sjms/tactics/TacticsClient.java | 13 +++++ web/pom.xml | 5 +- 50 files changed, 717 insertions(+), 11 deletions(-) create mode 100644 sjms/src/main/java/com/quinn/sjms/adapter/Adaptee.java create mode 100644 sjms/src/main/java/com/quinn/sjms/adapter/Adapter.java create mode 100644 sjms/src/main/java/com/quinn/sjms/adapter/AdapterClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/adapter/Target.java create mode 100644 sjms/src/main/java/com/quinn/sjms/adapter/TargetImpl.java create mode 100644 sjms/src/main/java/com/quinn/sjms/chain/Handler.java create mode 100644 sjms/src/main/java/com/quinn/sjms/decorator/Component.java create mode 100644 sjms/src/main/java/com/quinn/sjms/decorator/ConcreteComponent.java create mode 100644 sjms/src/main/java/com/quinn/sjms/decorator/Decorator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/decorator/DecoratorClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl.java create mode 100644 sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl2.java create mode 100644 sjms/src/main/java/com/quinn/sjms/iterator/IProject.java create mode 100644 sjms/src/main/java/com/quinn/sjms/iterator/IProjectImpl.java create mode 100644 sjms/src/main/java/com/quinn/sjms/iterator/IProjectIterator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/iterator/IteratorClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/iterator/ProjectIterator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/makeup/Component.java create mode 100644 sjms/src/main/java/com/quinn/sjms/makeup/Composite.java create mode 100644 sjms/src/main/java/com/quinn/sjms/makeup/Leaf.java create mode 100644 sjms/src/main/java/com/quinn/sjms/makeup/MakeUpClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/AbstractColleague.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/AbstractMediator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/Mediator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/MediatorClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/Purchase.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/Sale.java create mode 100644 sjms/src/main/java/com/quinn/sjms/mediator/Stock.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/BigReceiver.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/ByeCommand.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/Command.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/HelloCommand.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/Invoker.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/OrderClient.java create mode 100644 sjms/src/main/java/com/quinn/sjms/order/Receiver.java create mode 100644 sjms/src/main/java/com/quinn/sjms/prototype/Thing.java create mode 100644 sjms/src/main/java/com/quinn/sjms/proxy/DynamicProxy.java create mode 100644 sjms/src/main/java/com/quinn/sjms/tactics/Calculator.java create mode 100644 sjms/src/main/java/com/quinn/sjms/tactics/Context.java create mode 100644 sjms/src/main/java/com/quinn/sjms/tactics/Strategy.java create mode 100644 sjms/src/main/java/com/quinn/sjms/tactics/StrategyImpl.java create mode 100644 sjms/src/main/java/com/quinn/sjms/tactics/TacticsClient.java diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml index c563ea1..7399282 100644 --- a/bootstrap/pom.xml +++ b/bootstrap/pom.xml @@ -3,7 +3,7 @@ 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"> - forever + type-demo com.love.qn 1.0.0 @@ -54,4 +54,4 @@ - \ No newline at end of file + diff --git a/common/pom.xml b/common/pom.xml index 6c6e82b..84d4dd5 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -3,7 +3,7 @@ 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"> - forever + type-demo com.love.qn 1.0.0 ../pom.xml diff --git a/dal/pom.xml b/dal/pom.xml index e9ffd77..54082dd 100644 --- a/dal/pom.xml +++ b/dal/pom.xml @@ -3,7 +3,7 @@ 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"> - forever + type-demo com.love.qn 1.0.0 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index c90a45a..27bdde7 100644 --- a/pom.xml +++ b/pom.xml @@ -7,8 +7,9 @@ spring-boot-starter-parent 2.3.3.RELEASE + type-demo com.love.qn - forever + type-demo 1.0.0 pom diff --git a/sjms/pom.xml b/sjms/pom.xml index b42a492..2ba007f 100644 --- a/sjms/pom.xml +++ b/sjms/pom.xml @@ -3,7 +3,7 @@ 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"> - forever + type-demo com.love.qn 1.0.0 diff --git a/sjms/src/main/java/com/quinn/sjms/adapter/Adaptee.java b/sjms/src/main/java/com/quinn/sjms/adapter/Adaptee.java new file mode 100644 index 0000000..a316e2d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/adapter/Adaptee.java @@ -0,0 +1,9 @@ +package com.quinn.sjms.adapter; + +public class Adaptee { + + public void doSomething(){ + System.out.println("源角色"); + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/adapter/Adapter.java b/sjms/src/main/java/com/quinn/sjms/adapter/Adapter.java new file mode 100644 index 0000000..9797f50 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/adapter/Adapter.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.adapter; + +public class Adapter extends Adaptee implements Target{ + @Override + public void request() { + super.doSomething(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/adapter/AdapterClient.java b/sjms/src/main/java/com/quinn/sjms/adapter/AdapterClient.java new file mode 100644 index 0000000..e5bbe06 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/adapter/AdapterClient.java @@ -0,0 +1,15 @@ +package com.quinn.sjms.adapter; + +public class AdapterClient { + + public static void main(String[] args) { + Target target = new TargetImpl(); + target.request(); + + //现在增加了适配器角色后的业务逻辑 + Target target2 = new Adapter(); + target2.request(); + + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/adapter/Target.java b/sjms/src/main/java/com/quinn/sjms/adapter/Target.java new file mode 100644 index 0000000..3160b56 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/adapter/Target.java @@ -0,0 +1,7 @@ +package com.quinn.sjms.adapter; + +public interface Target { + + public void request(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/adapter/TargetImpl.java b/sjms/src/main/java/com/quinn/sjms/adapter/TargetImpl.java new file mode 100644 index 0000000..1471df0 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/adapter/TargetImpl.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.adapter; + +public class TargetImpl implements Target { + @Override + public void request() { + System.out.println("call me to help u"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/chain/Handler.java b/sjms/src/main/java/com/quinn/sjms/chain/Handler.java new file mode 100644 index 0000000..a044aa1 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/chain/Handler.java @@ -0,0 +1,34 @@ +package com.quinn.sjms.chain; + +// 此处防止报错随便引入的对象,无关该模式 +import sun.misc.Request; +import javax.xml.ws.Response; +import java.util.logging.Level; + +public abstract class Handler { + private Handler nextHandler; + //每个处理者都必须对请求做出处理 (模板模式) + public final Response handleMessage(Request request){ + Response response = null; + //判断是否是自己的处理级别 + if(this.getHandlerLevel().equals(request)){ + response = this.echo(request); + }else{ //不属于自己的处理级别 + //判断是否有下一个处理者 + if(this.nextHandler != null){ + response = this.nextHandler.handleMessage(request); + }else{ + //没有适当的处理者,业务自行处理 + } + } + return response; + } + //设置下一个处理者是谁 + public void setNext(Handler _handler){ + this.nextHandler = _handler; + } + //每个处理者都有一个处理级别 + protected abstract Level getHandlerLevel(); + //每个处理者都必须实现处理任务 + protected abstract Response echo(Request request); +} diff --git a/sjms/src/main/java/com/quinn/sjms/decorator/Component.java b/sjms/src/main/java/com/quinn/sjms/decorator/Component.java new file mode 100644 index 0000000..91392ec --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/decorator/Component.java @@ -0,0 +1,7 @@ +package com.quinn.sjms.decorator; + +public abstract class Component { + + public abstract void operate(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/decorator/ConcreteComponent.java b/sjms/src/main/java/com/quinn/sjms/decorator/ConcreteComponent.java new file mode 100644 index 0000000..7854d97 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/decorator/ConcreteComponent.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.decorator; + +public class ConcreteComponent extends Component { + @Override + public void operate() { + System.out.println("do Something"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/decorator/Decorator.java b/sjms/src/main/java/com/quinn/sjms/decorator/Decorator.java new file mode 100644 index 0000000..e1c0f06 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/decorator/Decorator.java @@ -0,0 +1,15 @@ +package com.quinn.sjms.decorator; + +public abstract class Decorator extends Component{ + private Component component; + + public Decorator(Component component) { + this.component = component; + } + + + @Override + public void operate() { + component.operate(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorClient.java b/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorClient.java new file mode 100644 index 0000000..7e35267 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorClient.java @@ -0,0 +1,11 @@ +package com.quinn.sjms.decorator; + +public class DecoratorClient { + + public static void main(String[] args) { + Component component = new ConcreteComponent(); + component = new DecoratorImpl(component); + component = new DecoratorImpl2(component); + component.operate(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl.java b/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl.java new file mode 100644 index 0000000..6a14de4 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl.java @@ -0,0 +1,17 @@ +package com.quinn.sjms.decorator; + +public class DecoratorImpl extends Decorator { + public DecoratorImpl(Component component) { + super(component); + } + + private void myMethod(){ + System.out.println("my method"); + } + + @Override + public void operate() { + myMethod(); + super.operate(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl2.java b/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl2.java new file mode 100644 index 0000000..8a39547 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/decorator/DecoratorImpl2.java @@ -0,0 +1,17 @@ +package com.quinn.sjms.decorator; + +public class DecoratorImpl2 extends Decorator { + public DecoratorImpl2(Component component) { + super(component); + } + + private void myMethod(){ + System.out.println("my method2"); + } + + @Override + public void operate() { + myMethod(); + super.operate(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/iterator/IProject.java b/sjms/src/main/java/com/quinn/sjms/iterator/IProject.java new file mode 100644 index 0000000..c33cb67 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/iterator/IProject.java @@ -0,0 +1,11 @@ +package com.quinn.sjms.iterator; + +public interface IProject { + + void add (String name); + + String getProjectInfo(); + + ProjectIterator iterator(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/iterator/IProjectImpl.java b/sjms/src/main/java/com/quinn/sjms/iterator/IProjectImpl.java new file mode 100644 index 0000000..1c44da1 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/iterator/IProjectImpl.java @@ -0,0 +1,35 @@ +package com.quinn.sjms.iterator; + +import java.util.ArrayList; + +public class IProjectImpl implements IProject { + //定义一个项目列表,说有的项目都放在这里 + private ArrayList projectList = new ArrayList(); + private String name; + + public IProjectImpl() { + + } + + private IProjectImpl(String name) { + this.name = name; + } + + @Override + public void add(String name) { + this.projectList.add(new IProjectImpl(name)); + } + + @Override + public String getProjectInfo() { + String info = ""; + //获得项目的名称 + info = info+ "项目名称是:" + this.name; + return info; + } + + @Override + public ProjectIterator iterator() { + return new ProjectIterator(projectList); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/iterator/IProjectIterator.java b/sjms/src/main/java/com/quinn/sjms/iterator/IProjectIterator.java new file mode 100644 index 0000000..f3c7374 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/iterator/IProjectIterator.java @@ -0,0 +1,6 @@ +package com.quinn.sjms.iterator; + +import java.util.Iterator; + +public interface IProjectIterator extends Iterator { +} diff --git a/sjms/src/main/java/com/quinn/sjms/iterator/IteratorClient.java b/sjms/src/main/java/com/quinn/sjms/iterator/IteratorClient.java new file mode 100644 index 0000000..8dff63b --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/iterator/IteratorClient.java @@ -0,0 +1,17 @@ +package com.quinn.sjms.iterator; + +public class IteratorClient { + + public static void main(String[] args) { + IProject project = new IProjectImpl(); + project.add("type"); + project.add("das"); + project.add("tde"); + IProjectIterator projectIterator = project.iterator(); + while(projectIterator.hasNext()){ + IProject p = (IProject) projectIterator.next(); + System.out.println(p.getProjectInfo()); + } + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/iterator/ProjectIterator.java b/sjms/src/main/java/com/quinn/sjms/iterator/ProjectIterator.java new file mode 100644 index 0000000..b3f7c81 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/iterator/ProjectIterator.java @@ -0,0 +1,24 @@ +package com.quinn.sjms.iterator; + +import java.util.ArrayList; + +public class ProjectIterator implements IProjectIterator { + + //所有的项目都放在ArrayList中 + private ArrayList projectList = new ArrayList(); + private int currentItem = 0; + //构造函数传入projectList + public ProjectIterator(ArrayList projectList){ + this.projectList = projectList; + } + + @Override + public boolean hasNext() { + return projectList != null && projectList.size() - 1 >= currentItem; + } + + @Override + public IProject next() { + return this.projectList.get(this.currentItem++); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/makeup/Component.java b/sjms/src/main/java/com/quinn/sjms/makeup/Component.java new file mode 100644 index 0000000..7d7c78e --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/makeup/Component.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.makeup; + +public abstract class Component { + public void doSomething(){ + // all of us + System.out.println("all of us"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/makeup/Composite.java b/sjms/src/main/java/com/quinn/sjms/makeup/Composite.java new file mode 100644 index 0000000..665561f --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/makeup/Composite.java @@ -0,0 +1,27 @@ +package com.quinn.sjms.makeup; + +import java.util.ArrayList; + +/** + * 树枝构件 + * 树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。 + * 我们来看组合模式的通用源代码,首先看抽象构件,它是组合模式的精髓 + */ +public class Composite extends Component { + + //构件容器 + private ArrayList componentArrayList = new ArrayList(); + //增加一个叶子构件或树枝构件 + public void add(Component component){ + this.componentArrayList.add(component); + } + //删除一个叶子构件或树枝构件 + public void remove(Component component){ + this.componentArrayList.remove(component); + } + //获得分支下的所有叶子构件和树枝构件 + public ArrayList getChildren(){ + return this.componentArrayList; + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/makeup/Leaf.java b/sjms/src/main/java/com/quinn/sjms/makeup/Leaf.java new file mode 100644 index 0000000..9302848 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/makeup/Leaf.java @@ -0,0 +1,12 @@ +package com.quinn.sjms.makeup; + +/** + * 叶子对象,其下再也没有其他的分支,也就是遍历的最小单位 + */ +public class Leaf extends Component { + + @Override + public void doSomething() { + System.out.println("leaf"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/makeup/MakeUpClient.java b/sjms/src/main/java/com/quinn/sjms/makeup/MakeUpClient.java new file mode 100644 index 0000000..a2995ad --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/makeup/MakeUpClient.java @@ -0,0 +1,31 @@ +package com.quinn.sjms.makeup; + +public class MakeUpClient { + + public static void main(String[] args) { + //创建一个根节点 + Composite root = new Composite(); + root.doSomething(); + //创建一个树枝构件 + Composite branch = new Composite(); + //创建一个叶子节点 + Leaf leaf = new Leaf(); + //建立整体 + root.add(branch); + branch.add(leaf); + + display(root); + } + + //通过递归遍历树 + public static void display(Composite root){ + for(Component c:root.getChildren()){ + if(c instanceof Leaf){ //叶子节点 + c.doSomething(); + }else{ //树枝节点 + display((Composite)c); + } + } + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/mediator/AbstractColleague.java b/sjms/src/main/java/com/quinn/sjms/mediator/AbstractColleague.java new file mode 100644 index 0000000..f923745 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/mediator/AbstractColleague.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.mediator; + +public abstract class AbstractColleague { + protected AbstractMediator mediator; + public AbstractColleague(AbstractMediator _mediator){ + this.mediator = _mediator; + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/mediator/AbstractMediator.java b/sjms/src/main/java/com/quinn/sjms/mediator/AbstractMediator.java new file mode 100644 index 0000000..acee57d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/mediator/AbstractMediator.java @@ -0,0 +1,17 @@ +package com.quinn.sjms.mediator; + +public abstract class AbstractMediator { + + protected Purchase purchase; + protected Sale sale; + protected Stock stock; + //构造函数 + public AbstractMediator(){ + purchase = new Purchase(this); + sale = new Sale(this); + stock = new Stock(this); + } + //中介者最重要的方法叫做事件方法,处理多个对象之间的关系 + public abstract void execute(String str,Object...objects); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/mediator/Mediator.java b/sjms/src/main/java/com/quinn/sjms/mediator/Mediator.java new file mode 100644 index 0000000..0e578a4 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/mediator/Mediator.java @@ -0,0 +1,47 @@ +package com.quinn.sjms.mediator; + +public class Mediator extends AbstractMediator { + @Override + public void execute(String str, Object... objects) { + if(str.equals("purchase.buy")){ //采购电脑 + this.buyComputer((Integer)objects[0]); + }else if(str.equals("sale.sell")){ //销售电脑 + this.sellComputer((Integer)objects[0]); + }else if(str.equals("sale.offsell")){ //折价销售 + this.offSell(); + }else if(str.equals("stock.clear")){ //清仓处理 + this.clearStock(); + } + } + + //采购电脑 + private void buyComputer(int number){ + int saleStatus = super.sale.getSaleStatus(); + if(saleStatus>80){ //销售情况良好 + System.out.println("采购IBM电脑:"+number + "台"); + super.stock.increase(number); + }else{ //销售情况不好 + int buyNumber = number/2; //折半采购 + System.out.println("采购IBM电脑:"+buyNumber+ "台"); + } + } + //销售电脑 + private void sellComputer(int number){ + if(super.stock.getStockNumber() arrayList = new ArrayList(); + @Override + public Thing clone(){ + Thing thing=null; + try { + thing = (Thing)super.clone(); + this.arrayList = (ArrayList)this.arrayList.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return thing; + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/Client.java b/sjms/src/main/java/com/quinn/sjms/proxy/Client.java index 3e7a211..b682a76 100644 --- a/sjms/src/main/java/com/quinn/sjms/proxy/Client.java +++ b/sjms/src/main/java/com/quinn/sjms/proxy/Client.java @@ -17,6 +17,25 @@ public class Client { proxy.login("zhangSan", "password"); proxy.killBoss(); proxy.upgrade(); + + + + + // 动态代理 + //定义一个主题 + IGamePlayer iGamePlayer = new GamePlayer("张三"); + //定义一个Handler + InvocationHandler h = new GamePlayIH(iGamePlayer); + //定义主题的代理 + IGamePlayer proxyInstance = DynamicProxy.newProxyInstance(iGamePlayer.getClass(). + getClassLoader(), iGamePlayer.getClass().getInterfaces(),handler); + //代理的行为 + proxyInstance.upgrade(); + + + + + } } diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/DynamicProxy.java b/sjms/src/main/java/com/quinn/sjms/proxy/DynamicProxy.java new file mode 100644 index 0000000..f4904e2 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/proxy/DynamicProxy.java @@ -0,0 +1,20 @@ +package com.quinn.sjms.proxy; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; + +public class DynamicProxy { + + public static T newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h){ + //寻找JoinPoint连接点,AOP框架使用元数据定义 + if(true){ + // 此处执行位置 为 连接点 (Joint point) , 也就是 Advice 执行的位置 + //执行一个前置通知 + System.out.println("执行一个前置通知"); + } + //执行目标,并返回结果 + return (T)Proxy.newProxyInstance(loader,interfaces, h); + } + + +} diff --git a/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java index 3daea0b..5beb881 100644 --- a/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java +++ b/sjms/src/main/java/com/quinn/sjms/proxy/GamePlayIH.java @@ -13,7 +13,10 @@ public class GamePlayIH implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Object invoke = method.invoke(proxy,args); + // 不要在此处调用对象方法,很容易会造成死循环 + System.out.println(method.getName()); + System.out.println(target); + Object invoke = method.invoke(target,args); return invoke; } } diff --git a/sjms/src/main/java/com/quinn/sjms/tactics/Calculator.java b/sjms/src/main/java/com/quinn/sjms/tactics/Calculator.java new file mode 100644 index 0000000..eae52bc --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/tactics/Calculator.java @@ -0,0 +1,27 @@ +package com.quinn.sjms.tactics; + +public enum Calculator { + //加法运算 + ADD("+"){ + public int exec(int a,int b){ + return a+b; + } + }, + //减法运算 + SUB("-"){ + public int exec(int a,int b){ + return a - b; + } + }; + String value = ""; + //定义成员值类型 + private Calculator(String _value){ + this.value = _value; + } + //获得枚举成员的值 + public String getValue(){ + return this.value; + } + //声明一个抽象函数 + public abstract int exec(int a,int b); +} diff --git a/sjms/src/main/java/com/quinn/sjms/tactics/Context.java b/sjms/src/main/java/com/quinn/sjms/tactics/Context.java new file mode 100644 index 0000000..2a418b6 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/tactics/Context.java @@ -0,0 +1,14 @@ +package com.quinn.sjms.tactics; + +public class Context { + private Strategy strategy = null; + + public Context(Strategy strategy) { + this.strategy = strategy; + } + //封装后的策略方法 + public void doAnything(){ + this.strategy.doSomething(); + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/tactics/Strategy.java b/sjms/src/main/java/com/quinn/sjms/tactics/Strategy.java new file mode 100644 index 0000000..c5a5924 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/tactics/Strategy.java @@ -0,0 +1,7 @@ +package com.quinn.sjms.tactics; + +public interface Strategy { + + void doSomething(); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/tactics/StrategyImpl.java b/sjms/src/main/java/com/quinn/sjms/tactics/StrategyImpl.java new file mode 100644 index 0000000..c5cf64d --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/tactics/StrategyImpl.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.tactics; + +public class StrategyImpl implements Strategy { + @Override + public void doSomething() { + System.out.println("Do something"); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/tactics/TacticsClient.java b/sjms/src/main/java/com/quinn/sjms/tactics/TacticsClient.java new file mode 100644 index 0000000..5659655 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/tactics/TacticsClient.java @@ -0,0 +1,13 @@ +package com.quinn.sjms.tactics; + +public class TacticsClient { + public static void main(String[] args) { + Strategy strategy = new StrategyImpl(); + Context context = new Context(strategy); + context.doAnything(); + + Calculator.ADD.exec(1,2); + Calculator.ADD.exec(1,2); + + } +} diff --git a/web/pom.xml b/web/pom.xml index fe68744..a960b20 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -3,7 +3,7 @@ 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"> - forever + type-demo com.love.qn 1.0.0 ../pom.xml @@ -26,7 +26,6 @@ com.love.qn dal - 1.0.0 @@ -49,4 +48,4 @@ - \ No newline at end of file +