设计模式
This commit is contained in:
@@ -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">
|
||||
<parent>
|
||||
<artifactId>forever</artifactId>
|
||||
<artifactId>type-demo</artifactId>
|
||||
<groupId>com.love.qn</groupId>
|
||||
<version>1.0.0</version>
|
||||
</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.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();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user