设计模式
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>forever</artifactId>
|
<artifactId>type-demo</artifactId>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>forever</artifactId>
|
<artifactId>type-demo</artifactId>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>forever</artifactId>
|
<artifactId>type-demo</artifactId>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|||||||
3
pom.xml
3
pom.xml
@@ -7,8 +7,9 @@
|
|||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.3.3.RELEASE</version>
|
<version>2.3.3.RELEASE</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
<name>type-demo</name>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<artifactId>forever</artifactId>
|
<artifactId>type-demo</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>forever</artifactId>
|
<artifactId>type-demo</artifactId>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|||||||
9
sjms/src/main/java/com/quinn/sjms/adapter/Adaptee.java
Normal file
9
sjms/src/main/java/com/quinn/sjms/adapter/Adaptee.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package com.quinn.sjms.adapter;
|
||||||
|
|
||||||
|
public class Adaptee {
|
||||||
|
|
||||||
|
public void doSomething(){
|
||||||
|
System.out.println("源角色");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
8
sjms/src/main/java/com/quinn/sjms/adapter/Adapter.java
Normal file
8
sjms/src/main/java/com/quinn/sjms/adapter/Adapter.java
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
package com.quinn.sjms.adapter;
|
||||||
|
|
||||||
|
public class Adapter extends Adaptee implements Target{
|
||||||
|
@Override
|
||||||
|
public void request() {
|
||||||
|
super.doSomething();
|
||||||
|
}
|
||||||
|
}
|
||||||
15
sjms/src/main/java/com/quinn/sjms/adapter/AdapterClient.java
Normal file
15
sjms/src/main/java/com/quinn/sjms/adapter/AdapterClient.java
Normal file
@@ -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();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
7
sjms/src/main/java/com/quinn/sjms/adapter/Target.java
Normal file
7
sjms/src/main/java/com/quinn/sjms/adapter/Target.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package com.quinn.sjms.adapter;
|
||||||
|
|
||||||
|
public interface Target {
|
||||||
|
|
||||||
|
public void request();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
34
sjms/src/main/java/com/quinn/sjms/chain/Handler.java
Normal file
34
sjms/src/main/java/com/quinn/sjms/chain/Handler.java
Normal file
@@ -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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.quinn.sjms.decorator;
|
||||||
|
|
||||||
|
public abstract class Component {
|
||||||
|
|
||||||
|
public abstract void operate();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.quinn.sjms.decorator;
|
||||||
|
|
||||||
|
public class ConcreteComponent extends Component {
|
||||||
|
@Override
|
||||||
|
public void operate() {
|
||||||
|
System.out.println("do Something");
|
||||||
|
}
|
||||||
|
}
|
||||||
15
sjms/src/main/java/com/quinn/sjms/decorator/Decorator.java
Normal file
15
sjms/src/main/java/com/quinn/sjms/decorator/Decorator.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
11
sjms/src/main/java/com/quinn/sjms/iterator/IProject.java
Normal file
11
sjms/src/main/java/com/quinn/sjms/iterator/IProject.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package com.quinn.sjms.iterator;
|
||||||
|
|
||||||
|
public interface IProject {
|
||||||
|
|
||||||
|
void add (String name);
|
||||||
|
|
||||||
|
String getProjectInfo();
|
||||||
|
|
||||||
|
ProjectIterator iterator();
|
||||||
|
|
||||||
|
}
|
||||||
35
sjms/src/main/java/com/quinn/sjms/iterator/IProjectImpl.java
Normal file
35
sjms/src/main/java/com/quinn/sjms/iterator/IProjectImpl.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package com.quinn.sjms.iterator;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class IProjectImpl implements IProject {
|
||||||
|
//定义一个项目列表,说有的项目都放在这里
|
||||||
|
private ArrayList<IProject> projectList = new ArrayList<IProject>();
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.quinn.sjms.iterator;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public interface IProjectIterator extends Iterator {
|
||||||
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.quinn.sjms.iterator;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class ProjectIterator implements IProjectIterator {
|
||||||
|
|
||||||
|
//所有的项目都放在ArrayList中
|
||||||
|
private ArrayList<IProject> projectList = new ArrayList<IProject>();
|
||||||
|
private int currentItem = 0;
|
||||||
|
//构造函数传入projectList
|
||||||
|
public ProjectIterator(ArrayList<IProject> 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++);
|
||||||
|
}
|
||||||
|
}
|
||||||
8
sjms/src/main/java/com/quinn/sjms/makeup/Component.java
Normal file
8
sjms/src/main/java/com/quinn/sjms/makeup/Component.java
Normal file
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
27
sjms/src/main/java/com/quinn/sjms/makeup/Composite.java
Normal file
27
sjms/src/main/java/com/quinn/sjms/makeup/Composite.java
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package com.quinn.sjms.makeup;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 树枝构件
|
||||||
|
* 树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。
|
||||||
|
* 我们来看组合模式的通用源代码,首先看抽象构件,它是组合模式的精髓
|
||||||
|
*/
|
||||||
|
public class Composite extends Component {
|
||||||
|
|
||||||
|
//构件容器
|
||||||
|
private ArrayList<Component> componentArrayList = new ArrayList<Component>();
|
||||||
|
//增加一个叶子构件或树枝构件
|
||||||
|
public void add(Component component){
|
||||||
|
this.componentArrayList.add(component);
|
||||||
|
}
|
||||||
|
//删除一个叶子构件或树枝构件
|
||||||
|
public void remove(Component component){
|
||||||
|
this.componentArrayList.remove(component);
|
||||||
|
}
|
||||||
|
//获得分支下的所有叶子构件和树枝构件
|
||||||
|
public ArrayList<Component> getChildren(){
|
||||||
|
return this.componentArrayList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
12
sjms/src/main/java/com/quinn/sjms/makeup/Leaf.java
Normal file
12
sjms/src/main/java/com/quinn/sjms/makeup/Leaf.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package com.quinn.sjms.makeup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 叶子对象,其下再也没有其他的分支,也就是遍历的最小单位
|
||||||
|
*/
|
||||||
|
public class Leaf extends Component {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doSomething() {
|
||||||
|
System.out.println("leaf");
|
||||||
|
}
|
||||||
|
}
|
||||||
31
sjms/src/main/java/com/quinn/sjms/makeup/MakeUpClient.java
Normal file
31
sjms/src/main/java/com/quinn/sjms/makeup/MakeUpClient.java
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.quinn.sjms.mediator;
|
||||||
|
|
||||||
|
public abstract class AbstractColleague {
|
||||||
|
protected AbstractMediator mediator;
|
||||||
|
public AbstractColleague(AbstractMediator _mediator){
|
||||||
|
this.mediator = _mediator;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
47
sjms/src/main/java/com/quinn/sjms/mediator/Mediator.java
Normal file
47
sjms/src/main/java/com/quinn/sjms/mediator/Mediator.java
Normal file
@@ -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()<number){ //库存数量不够销售
|
||||||
|
super.purchase.buyIBMcomputer(number);
|
||||||
|
}
|
||||||
|
super.stock.decrease(number);
|
||||||
|
}
|
||||||
|
//折价销售电脑
|
||||||
|
private void offSell(){
|
||||||
|
System.out.println("折价销售IBM电脑"+stock.getStockNumber()+"台");
|
||||||
|
}
|
||||||
|
//清仓处理
|
||||||
|
private void clearStock(){
|
||||||
|
//要求清仓销售
|
||||||
|
super.sale.offSale();
|
||||||
|
//要求采购人员不要采购
|
||||||
|
super.purchase.refuseBuyIBM();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.quinn.sjms.mediator;
|
||||||
|
|
||||||
|
public class MediatorClient {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
AbstractMediator mediator = new Mediator();
|
||||||
|
//采购人员采购电脑
|
||||||
|
System.out.println("------采购人员采购电脑--------");
|
||||||
|
Purchase purchase = new Purchase(mediator);
|
||||||
|
purchase.buyIBMcomputer(100);
|
||||||
|
//销售人员销售电脑
|
||||||
|
System.out.println("\n------销售人员销售电脑--------");
|
||||||
|
Sale sale = new Sale(mediator);
|
||||||
|
sale.sellIBMComputer(1);
|
||||||
|
//库房管理人员管理库存
|
||||||
|
System.out.println("\n------库房管理人员清库处理--------");
|
||||||
|
Stock stock = new Stock(mediator);
|
||||||
|
stock.clearStock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
16
sjms/src/main/java/com/quinn/sjms/mediator/Purchase.java
Normal file
16
sjms/src/main/java/com/quinn/sjms/mediator/Purchase.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package com.quinn.sjms.mediator;
|
||||||
|
|
||||||
|
public class Purchase extends AbstractColleague{
|
||||||
|
public Purchase(AbstractMediator _mediator){
|
||||||
|
super(_mediator);
|
||||||
|
}
|
||||||
|
//采购IBM电脑
|
||||||
|
public void buyIBMcomputer(int number){
|
||||||
|
super.mediator.execute("purchase.buy", number);
|
||||||
|
}
|
||||||
|
//不再采购IBM电脑
|
||||||
|
public void refuseBuyIBM(){
|
||||||
|
System.out.println("不再采购IBM电脑");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
27
sjms/src/main/java/com/quinn/sjms/mediator/Sale.java
Normal file
27
sjms/src/main/java/com/quinn/sjms/mediator/Sale.java
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package com.quinn.sjms.mediator;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class Sale extends AbstractColleague{
|
||||||
|
public Sale(AbstractMediator _mediator){
|
||||||
|
super(_mediator);
|
||||||
|
}
|
||||||
|
|
||||||
|
//销售IBM电脑
|
||||||
|
public void sellIBMComputer(int number){
|
||||||
|
super.mediator.execute("sale.sell", number);
|
||||||
|
System.out.println("销售IBM电脑"+number+"台");
|
||||||
|
}
|
||||||
|
//反馈销售情况,0~100变化,0代表根本就没人买,100代表非常畅销,出一个卖一个
|
||||||
|
public int getSaleStatus(){
|
||||||
|
Random rand = new Random(System.currentTimeMillis());
|
||||||
|
int saleStatus = rand.nextInt(100);
|
||||||
|
System.out.println("IBM电脑的销售情况为:"+saleStatus);
|
||||||
|
return saleStatus;
|
||||||
|
}
|
||||||
|
//折价处理
|
||||||
|
public void offSale(){
|
||||||
|
super.mediator.execute("sale.offsell");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
29
sjms/src/main/java/com/quinn/sjms/mediator/Stock.java
Normal file
29
sjms/src/main/java/com/quinn/sjms/mediator/Stock.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package com.quinn.sjms.mediator;
|
||||||
|
|
||||||
|
public class Stock extends AbstractColleague{
|
||||||
|
public Stock(AbstractMediator _mediator){
|
||||||
|
super(_mediator);
|
||||||
|
}
|
||||||
|
//刚开始有100台电脑
|
||||||
|
private static int COMPUTER_NUMBER =100;
|
||||||
|
//库存增加
|
||||||
|
public void increase(int number){
|
||||||
|
COMPUTER_NUMBER = COMPUTER_NUMBER + number;
|
||||||
|
System.out.println("库存数量为:"+COMPUTER_NUMBER);
|
||||||
|
}
|
||||||
|
//库存降低
|
||||||
|
public void decrease(int number){
|
||||||
|
COMPUTER_NUMBER = COMPUTER_NUMBER - number;
|
||||||
|
System.out.println("库存数量为:"+COMPUTER_NUMBER);
|
||||||
|
}
|
||||||
|
//获得库存数量
|
||||||
|
public int getStockNumber(){
|
||||||
|
return COMPUTER_NUMBER;
|
||||||
|
}
|
||||||
|
//存货压力大了,就要通知采购人员不要采购,销售人员要尽快销售
|
||||||
|
public void clearStock(){
|
||||||
|
System.out.println("清理存货数量为:"+COMPUTER_NUMBER);
|
||||||
|
super.mediator.execute("stock.clear");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
8
sjms/src/main/java/com/quinn/sjms/order/BigReceiver.java
Normal file
8
sjms/src/main/java/com/quinn/sjms/order/BigReceiver.java
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public class BigReceiver extends Receiver{
|
||||||
|
@Override
|
||||||
|
public void doSomething() {
|
||||||
|
System.out.println("我来做一些事情吧");
|
||||||
|
}
|
||||||
|
}
|
||||||
17
sjms/src/main/java/com/quinn/sjms/order/ByeCommand.java
Normal file
17
sjms/src/main/java/com/quinn/sjms/order/ByeCommand.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public class ByeCommand extends Command{
|
||||||
|
|
||||||
|
//哪个Receiver类进行命令处理
|
||||||
|
private Receiver receiver;
|
||||||
|
//构造函数传递接收者
|
||||||
|
public ByeCommand(Receiver _receiver){
|
||||||
|
this.receiver = _receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute() {
|
||||||
|
System.out.println("say Bye-Bye");
|
||||||
|
receiver.doSomething();
|
||||||
|
}
|
||||||
|
}
|
||||||
7
sjms/src/main/java/com/quinn/sjms/order/Command.java
Normal file
7
sjms/src/main/java/com/quinn/sjms/order/Command.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public abstract class Command {
|
||||||
|
|
||||||
|
public abstract void execute();
|
||||||
|
|
||||||
|
}
|
||||||
17
sjms/src/main/java/com/quinn/sjms/order/HelloCommand.java
Normal file
17
sjms/src/main/java/com/quinn/sjms/order/HelloCommand.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public class HelloCommand extends Command{
|
||||||
|
|
||||||
|
//哪个Receiver类进行命令处理
|
||||||
|
private Receiver receiver;
|
||||||
|
//构造函数传递接收者
|
||||||
|
public HelloCommand(Receiver _receiver){
|
||||||
|
this.receiver = _receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute() {
|
||||||
|
System.out.println("say Hello");
|
||||||
|
receiver.doSomething();
|
||||||
|
}
|
||||||
|
}
|
||||||
15
sjms/src/main/java/com/quinn/sjms/order/Invoker.java
Normal file
15
sjms/src/main/java/com/quinn/sjms/order/Invoker.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public class Invoker {
|
||||||
|
|
||||||
|
private Command command;
|
||||||
|
//受气包,接受命令
|
||||||
|
public void setCommand(Command _command){
|
||||||
|
this.command = _command;
|
||||||
|
}
|
||||||
|
//执行命令
|
||||||
|
public void action(){
|
||||||
|
this.command.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
13
sjms/src/main/java/com/quinn/sjms/order/OrderClient.java
Normal file
13
sjms/src/main/java/com/quinn/sjms/order/OrderClient.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public class OrderClient {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Invoker invoker = new Invoker();
|
||||||
|
// 此处具体使用,应该把接受者也封装掉,这样就在客户端无需感知接受者了
|
||||||
|
HelloCommand helloCommand = new HelloCommand(new BigReceiver());
|
||||||
|
invoker.setCommand(helloCommand);
|
||||||
|
invoker.action();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
6
sjms/src/main/java/com/quinn/sjms/order/Receiver.java
Normal file
6
sjms/src/main/java/com/quinn/sjms/order/Receiver.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package com.quinn.sjms.order;
|
||||||
|
|
||||||
|
public abstract class Receiver {
|
||||||
|
//抽象接收者,定义每个接收者都必须完成的业务
|
||||||
|
public abstract void doSomething();
|
||||||
|
}
|
||||||
19
sjms/src/main/java/com/quinn/sjms/prototype/Thing.java
Normal file
19
sjms/src/main/java/com/quinn/sjms/prototype/Thing.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package com.quinn.sjms.prototype;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class Thing implements Cloneable{
|
||||||
|
//定义一个私有变量
|
||||||
|
private ArrayList<String> arrayList = new ArrayList<String>();
|
||||||
|
@Override
|
||||||
|
public Thing clone(){
|
||||||
|
Thing thing=null;
|
||||||
|
try {
|
||||||
|
thing = (Thing)super.clone();
|
||||||
|
this.arrayList = (ArrayList<String>)this.arrayList.clone();
|
||||||
|
} catch (CloneNotSupportedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return thing;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,25 @@ public class Client {
|
|||||||
proxy.login("zhangSan", "password");
|
proxy.login("zhangSan", "password");
|
||||||
proxy.killBoss();
|
proxy.killBoss();
|
||||||
proxy.upgrade();
|
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();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
20
sjms/src/main/java/com/quinn/sjms/proxy/DynamicProxy.java
Normal file
20
sjms/src/main/java/com/quinn/sjms/proxy/DynamicProxy.java
Normal file
@@ -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> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,7 +13,10 @@ public class GamePlayIH implements InvocationHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
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;
|
return invoke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
27
sjms/src/main/java/com/quinn/sjms/tactics/Calculator.java
Normal file
27
sjms/src/main/java/com/quinn/sjms/tactics/Calculator.java
Normal file
@@ -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);
|
||||||
|
}
|
||||||
14
sjms/src/main/java/com/quinn/sjms/tactics/Context.java
Normal file
14
sjms/src/main/java/com/quinn/sjms/tactics/Context.java
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
7
sjms/src/main/java/com/quinn/sjms/tactics/Strategy.java
Normal file
7
sjms/src/main/java/com/quinn/sjms/tactics/Strategy.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package com.quinn.sjms.tactics;
|
||||||
|
|
||||||
|
public interface Strategy {
|
||||||
|
|
||||||
|
void doSomething();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.quinn.sjms.tactics;
|
||||||
|
|
||||||
|
public class StrategyImpl implements Strategy {
|
||||||
|
@Override
|
||||||
|
public void doSomething() {
|
||||||
|
System.out.println("Do something");
|
||||||
|
}
|
||||||
|
}
|
||||||
13
sjms/src/main/java/com/quinn/sjms/tactics/TacticsClient.java
Normal file
13
sjms/src/main/java/com/quinn/sjms/tactics/TacticsClient.java
Normal file
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>forever</artifactId>
|
<artifactId>type-demo</artifactId>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
@@ -26,7 +26,6 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.love.qn</groupId>
|
<groupId>com.love.qn</groupId>
|
||||||
<artifactId>dal</artifactId>
|
<artifactId>dal</artifactId>
|
||||||
<version>1.0.0</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
Reference in New Issue
Block a user