Skip to content

Commit

Permalink
二十三种设计模式JAVA实现
Browse files Browse the repository at this point in the history
二十三种设计模式JAVA实现
  • Loading branch information
SandyJiang committed Apr 23, 2015
1 parent 379b94a commit b8850d9
Show file tree
Hide file tree
Showing 264 changed files with 2,114 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>
17 changes: 17 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>design_pattern</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
2 changes: 2 additions & 0 deletions .settings/org.eclipse.core.resources.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
11 changes: 11 additions & 0 deletions .settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
Binary file added bin/js/com/adapter/Adaptee.class
Binary file not shown.
Binary file added bin/js/com/adapter/Adapter.class
Binary file not shown.
Binary file added bin/js/com/adapter/Client.class
Binary file not shown.
Binary file added bin/js/com/adapter/Target.class
Binary file not shown.
Binary file added bin/js/com/bridge/Abstraction.class
Binary file not shown.
Binary file added bin/js/com/bridge/Client.class
Binary file not shown.
Binary file added bin/js/com/bridge/ConcreteImplementorA.class
Binary file not shown.
Binary file added bin/js/com/bridge/ConcreteImplementorB.class
Binary file not shown.
Binary file added bin/js/com/bridge/Implementor.class
Binary file not shown.
Binary file added bin/js/com/bridge/RefinedAbstraction.class
Binary file not shown.
Binary file added bin/js/com/build/Builder.class
Binary file not shown.
Binary file added bin/js/com/build/Client.class
Binary file not shown.
Binary file added bin/js/com/build/ConcreteBuilder1.class
Binary file not shown.
Binary file added bin/js/com/build/ConcreteBuilder2.class
Binary file not shown.
Binary file added bin/js/com/build/Director.class
Binary file not shown.
Binary file added bin/js/com/build/Product.class
Binary file not shown.
Binary file added bin/js/com/chain_of_responsibility/Client.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added bin/js/com/chain_of_responsibility/Handler.class
Binary file not shown.
Binary file added bin/js/com/command/Client.class
Binary file not shown.
Binary file added bin/js/com/command/Command.class
Binary file not shown.
Binary file added bin/js/com/command/ConcreteCommand.class
Binary file not shown.
Binary file added bin/js/com/command/Invoker.class
Binary file not shown.
Binary file added bin/js/com/command/Receiver.class
Binary file not shown.
Binary file added bin/js/com/composite/Client.class
Binary file not shown.
Binary file added bin/js/com/composite/Component.class
Binary file not shown.
Binary file added bin/js/com/composite/Composite.class
Binary file not shown.
Binary file added bin/js/com/composite/Leaf.class
Binary file not shown.
Binary file added bin/js/com/decorator/Client.class
Binary file not shown.
Binary file added bin/js/com/decorator/Component.class
Binary file not shown.
Binary file added bin/js/com/decorator/ConcreteComponent.class
Binary file not shown.
Binary file added bin/js/com/decorator/ConcreteDecoratorA.class
Binary file not shown.
Binary file added bin/js/com/decorator/ConcreteDecoratorB.class
Binary file not shown.
Binary file added bin/js/com/decorator/Decorator.class
Binary file not shown.
Binary file added bin/js/com/facade/Client.class
Binary file not shown.
Binary file added bin/js/com/facade/Facade.class
Binary file not shown.
Binary file added bin/js/com/facade/SubSystem1.class
Binary file not shown.
Binary file added bin/js/com/facade/SubSystem2.class
Binary file not shown.
Binary file added bin/js/com/facade/SubSystem3.class
Binary file not shown.
Binary file added bin/js/com/factory/abstract_factory/Client.class
Binary file not shown.
Binary file added bin/js/com/factory/abstract_factory/Factory.class
Binary file not shown.
Binary file added bin/js/com/factory/abstract_factory/IFactory.class
Binary file not shown.
Binary file added bin/js/com/factory/abstract_factory/IProduct.class
Binary file not shown.
Binary file added bin/js/com/factory/abstract_factory/ProductA.class
Binary file not shown.
Binary file added bin/js/com/factory/abstract_factory/ProductB.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/Client.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/FactoryA.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/FactoryB.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/IFactory.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/IProduct.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/ProductA.class
Binary file not shown.
Binary file added bin/js/com/factory/factory_method/ProductB.class
Binary file not shown.
Binary file added bin/js/com/factory/simple_factory/Client.class
Binary file not shown.
Binary file added bin/js/com/factory/simple_factory/Factory.class
Binary file not shown.
Binary file added bin/js/com/factory/simple_factory/IProduct.class
Binary file not shown.
Binary file added bin/js/com/factory/simple_factory/ProductA.class
Binary file not shown.
Binary file added bin/js/com/factory/simple_factory/ProductB.class
Binary file not shown.
Binary file added bin/js/com/fly_weight/Client.class
Binary file not shown.
Binary file added bin/js/com/fly_weight/ConcreteFlyWeight.class
Binary file not shown.
Binary file added bin/js/com/fly_weight/FlyWeight.class
Binary file not shown.
Binary file added bin/js/com/fly_weight/FlyWeightFactory.class
Binary file not shown.
Binary file added bin/js/com/fly_weight/UnSharedFlyWeight.class
Binary file not shown.
Binary file added bin/js/com/interpreter/AbstractExpression.class
Binary file not shown.
Binary file added bin/js/com/interpreter/Client.class
Binary file not shown.
Binary file added bin/js/com/interpreter/Context.class
Binary file not shown.
Binary file added bin/js/com/interpreter/NonterminalExpression.class
Binary file not shown.
Binary file added bin/js/com/interpreter/TerminalExpression.class
Binary file not shown.
Binary file added bin/js/com/iterator/Aggregate.class
Binary file not shown.
Binary file added bin/js/com/iterator/Client.class
Binary file not shown.
Binary file added bin/js/com/iterator/ConcreteAggregate.class
Binary file not shown.
Binary file added bin/js/com/iterator/ConcreteIterator.class
Binary file not shown.
Binary file added bin/js/com/iterator/Iterator.class
Binary file not shown.
Binary file added bin/js/com/mediator/Client.class
Binary file not shown.
Binary file added bin/js/com/mediator/Colleague.class
Binary file not shown.
Binary file added bin/js/com/mediator/ConcreteColleague1.class
Binary file not shown.
Binary file added bin/js/com/mediator/ConcreteColleague2.class
Binary file not shown.
Binary file added bin/js/com/mediator/ConcreteMediator.class
Binary file not shown.
Binary file added bin/js/com/mediator/Mediator.class
Binary file not shown.
Binary file added bin/js/com/memento/Caretaker.class
Binary file not shown.
Binary file added bin/js/com/memento/Client.class
Binary file not shown.
Binary file added bin/js/com/memento/Memento.class
Binary file not shown.
Binary file added bin/js/com/memento/Originator.class
Binary file not shown.
Binary file added bin/js/com/observer/Client.class
Binary file not shown.
Binary file added bin/js/com/observer/ConcreteObserver.class
Binary file not shown.
Binary file added bin/js/com/observer/ConcreteSubject.class
Binary file not shown.
Binary file added bin/js/com/observer/Observer.class
Binary file not shown.
Binary file added bin/js/com/observer/Subject.class
Binary file not shown.
Binary file added bin/js/com/observer/event_listen/Client.class
Binary file not shown.
Binary file added bin/js/com/observer/event_listen/Event.class
Binary file not shown.
Binary file added bin/js/com/observer/event_listen/EventImpl.class
Binary file not shown.
Binary file added bin/js/com/observer/event_listen/Listener.class
Binary file not shown.
Binary file added bin/js/com/observer/event_listen/ListenerImpl.class
Binary file not shown.
Binary file added bin/js/com/prototype/Client.class
Binary file not shown.
Binary file added bin/js/com/prototype/ConcretePrototype.class
Binary file not shown.
Binary file added bin/js/com/prototype/PerformanceTest.class
Binary file not shown.
Binary file added bin/js/com/prototype/Prototype.class
Binary file not shown.
Binary file added bin/js/com/proxy/Client.class
Binary file not shown.
Binary file added bin/js/com/proxy/Proxy.class
Binary file not shown.
Binary file added bin/js/com/proxy/RealSubject.class
Binary file not shown.
Binary file added bin/js/com/proxy/Subject.class
Binary file not shown.
Binary file added bin/js/com/singleton/Hungry.class
Binary file not shown.
Binary file added bin/js/com/singleton/Lazy.class
Binary file not shown.
Binary file added bin/js/com/state/Client.class
Binary file not shown.
Binary file added bin/js/com/state/ConcreteStateA.class
Binary file not shown.
Binary file added bin/js/com/state/ConcreteStateB.class
Binary file not shown.
Binary file added bin/js/com/state/Context.class
Binary file not shown.
Binary file added bin/js/com/state/State.class
Binary file not shown.
Binary file added bin/js/com/strategy/Client.class
Binary file not shown.
Binary file added bin/js/com/strategy/Context.class
Binary file not shown.
Binary file added bin/js/com/strategy/Strategy.class
Binary file not shown.
Binary file added bin/js/com/strategy/StrategyA.class
Binary file not shown.
Binary file added bin/js/com/strategy/StrategyB.class
Binary file not shown.
Binary file added bin/js/com/strategy/strategyWithFactory/Client.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added bin/js/com/template_method/AbstractClass.class
Binary file not shown.
Binary file added bin/js/com/template_method/Client.class
Binary file not shown.
Binary file added bin/js/com/template_method/ConcreteClass.class
Binary file not shown.
Binary file added bin/js/com/visitor/Client.class
Binary file not shown.
Binary file added bin/js/com/visitor/ConcreteElementA.class
Binary file not shown.
Binary file added bin/js/com/visitor/ConcreteElementB.class
Binary file not shown.
Binary file added bin/js/com/visitor/ConcreteVisitorA.class
Binary file not shown.
Binary file added bin/js/com/visitor/ConcreteVisitorB.class
Binary file not shown.
Binary file added bin/js/com/visitor/Element.class
Binary file not shown.
Binary file added bin/js/com/visitor/ObjectStructure.class
Binary file not shown.
Binary file added bin/js/com/visitor/Visitor.class
Binary file not shown.
10 changes: 10 additions & 0 deletions src/js/com/adapter/Adaptee.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package js.com.adapter;

/**
* Created by Administrator on 2015/4/23.
*/
public class Adaptee {
public void specificRequest(){
System.out.println("特殊请求");
}
}
13 changes: 13 additions & 0 deletions src/js/com/adapter/Adapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package js.com.adapter;

/**
* Created by Administrator on 2015/4/23.
*/
public class Adapter extends Target{
private Adaptee adaptee = new Adaptee();

@Override
public void request() {
adaptee.specificRequest();
}
}
12 changes: 12 additions & 0 deletions src/js/com/adapter/Client.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package js.com.adapter;

/**
* 适配器模式
* Created by Administrator on 2015/4/23.
*/
public class Client {
public static void main(String[] args) {
Target target = new Adapter();
target.request();
}
}
10 changes: 10 additions & 0 deletions src/js/com/adapter/Target.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package js.com.adapter;

/**
* Created by Administrator on 2015/4/23.
*/
public class Target {
public void request(){
System.out.println("普通请求");
}
}
16 changes: 16 additions & 0 deletions src/js/com/bridge/Abstraction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package js.com.bridge;

/**
* Created by Administrator on 2015/4/23.
*/
public class Abstraction {
protected Implementor implementor;

public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}

public void operation(){
implementor.operation();
}
}
16 changes: 16 additions & 0 deletions src/js/com/bridge/Client.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package js.com.bridge;

/**
* 桥接模式
* Created by Administrator on 2015/4/23.
*/
public class Client {
public static void main(String[] args) {
Abstraction ab = new RefinedAbstraction();
ab.setImplementor(new ConcreteImplementorA());
ab.operation();

ab.setImplementor(new ConcreteImplementorB());
ab.operation();
}
}
11 changes: 11 additions & 0 deletions src/js/com/bridge/ConcreteImplementorA.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package js.com.bridge;

/**
* Created by Administrator on 2015/4/23.
*/
public class ConcreteImplementorA implements Implementor {
@Override
public void operation() {
System.out.println("具体实现A的方法执行");
}
}
11 changes: 11 additions & 0 deletions src/js/com/bridge/ConcreteImplementorB.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package js.com.bridge;

/**
* Created by Administrator on 2015/4/23.
*/
public class ConcreteImplementorB implements Implementor {
@Override
public void operation() {
System.out.println("具体实现B的方法执行");
}
}
8 changes: 8 additions & 0 deletions src/js/com/bridge/Implementor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package js.com.bridge;

/**
* Created by Administrator on 2015/4/23.
*/
public interface Implementor {
public void operation();
}
11 changes: 11 additions & 0 deletions src/js/com/bridge/RefinedAbstraction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package js.com.bridge;

/**
* Created by Administrator on 2015/4/23.
*/
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
implementor.operation();
}
}
13 changes: 13 additions & 0 deletions src/js/com/build/Builder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package js.com.build;

/**
* Created by Administrator on 2015/4/22.
*/
public abstract class Builder {

public abstract void builderPartA();

public abstract void builderPartB();

public abstract Product getResult();
}
24 changes: 24 additions & 0 deletions src/js/com/build/Client.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package js.com.build;

/**
* 创建模式,和工厂模式不同是这货用来创建复杂模型
* 具体的Builder引用了Product,再让Director指挥builder去执行builder的创建方法。
* 然后再自行返回Product
* Created by Administrator on 2015/4/22.
*/
public class Client {
public static void main(String[] args) {
Director director = new Director();

Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();

director.construct(b1);;
Product p1 = b1.getResult();
p1.show();

director.construct(b2);
Product p2 = b2.getResult();
p2.show();
}
}
24 changes: 24 additions & 0 deletions src/js/com/build/ConcreteBuilder1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package js.com.build;

/**
* Created by Administrator on 2015/4/22.
*/
public class ConcreteBuilder1 extends Builder {

private Product product = new Product();

@Override
public void builderPartA() {
product.add("部件A");
}

@Override
public void builderPartB() {
product.add("部件B");
}

@Override
public Product getResult() {
return product;
}
}
24 changes: 24 additions & 0 deletions src/js/com/build/ConcreteBuilder2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package js.com.build;

/**
* Created by Administrator on 2015/4/22.
*/
public class ConcreteBuilder2 extends Builder {

private Product product = new Product();

@Override
public void builderPartA() {
product.add("部件X");
}

@Override
public void builderPartB() {
product.add("部件Y");
}

@Override
public Product getResult() {
return product;
}
}
11 changes: 11 additions & 0 deletions src/js/com/build/Director.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package js.com.build;

/**
* Created by Administrator on 2015/4/22.
*/
public class Director {
public void construct(Builder builder){
builder.builderPartA();
builder.builderPartB();
}
}
20 changes: 20 additions & 0 deletions src/js/com/build/Product.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package js.com.build;

import java.util.*;

/**
* Created by Administrator on 2015/4/22.
*/
public class Product {
List<String> parts = new ArrayList();
public void add(String part){
parts.add(part);
}

public void show(){
System.out.println("产品创建");
for (int i = 0; i < parts.size(); i++) {
System.out.println(parts.get(i));
}
}
}
23 changes: 23 additions & 0 deletions src/js/com/chain_of_responsibility/Client.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package js.com.chain_of_responsibility;

/**
* 责任链模式
* Created by Administrator on 2015/4/23.
*/
public class Client {
public static void main(String[] args) {
Handler h1 = new ConcreteHandle1();
Handler h2 = new ConcreteHandle2();
Handler h3 = new ConcreteHandle3();
h1.setSuccessor(h2);
h2.setSuccessor(h3);

int[] requests = new int[]{2, 5, 12, 7, 28, 23, 18, 11};

for(int i=0; i<requests.length; i++){
h1.handleRequest(requests[i]);
}

}
}

16 changes: 16 additions & 0 deletions src/js/com/chain_of_responsibility/ConcreteHandle1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package js.com.chain_of_responsibility;

/**
* Created by Administrator on 2015/4/23.
*/
public class ConcreteHandle1 extends Handler {

@Override
public void handleRequest(int request) {
if(request >= 0 && request < 10){
System.out.println(this.getClass().getSimpleName() + " handle " + request);
}else if (successor != null){
successor.handleRequest(request);
}
}
}
15 changes: 15 additions & 0 deletions src/js/com/chain_of_responsibility/ConcreteHandle2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package js.com.chain_of_responsibility;

/**
* Created by Administrator on 2015/4/23.
*/
public class ConcreteHandle2 extends Handler {
@Override
public void handleRequest(int request) {
if(request >= 10 && request < 20){
System.out.println(this.getClass().getSimpleName() + " handle " + request);
}else if (successor != null){
successor.handleRequest(request);
}
}
}
15 changes: 15 additions & 0 deletions src/js/com/chain_of_responsibility/ConcreteHandle3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package js.com.chain_of_responsibility;

/**
* Created by Administrator on 2015/4/23.
*/
public class ConcreteHandle3 extends Handler{
@Override
public void handleRequest(int request) {
if(request >= 20 && request < 30){
System.out.println(this.getClass().getSimpleName() + " handle " + request);
}else if (successor != null){
successor.handleRequest(request);
}
}
}
16 changes: 16 additions & 0 deletions src/js/com/chain_of_responsibility/Handler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package js.com.chain_of_responsibility;

/**
* Created by Administrator on 2015/4/23.
*/
public abstract class Handler {

protected Handler successor;

public void setSuccessor(Handler successor){
this.successor = successor;
}

public abstract void handleRequest(int request);

}
15 changes: 15 additions & 0 deletions src/js/com/command/Client.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package js.com.command;

/**
* 命令模式
* Created by Administrator on 2015/4/23.
*/
public class Client {
public static void main(String[] args) {
Receiver r = new Receiver();
Command c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.setCommand(c);
i.executeCommand();
}
}
Loading

0 comments on commit b8850d9

Please sign in to comment.