├── .gitignore
├── pom.xml
└── src
└── main
└── java
└── com
└── hollischuang
└── pattern
├── AbstractFactory
├── BenzBusinessCar.java
├── BenzCar.java
├── BenzSportCar.java
├── TeslaBusinessCar.java
├── TeslaCar.java
├── TeslaSportCar.java
├── client
│ └── Main.java
└── factory
│ ├── BusinessCarFactory.java
│ ├── CarFactory.java
│ └── SportCarFactory.java
├── Adapter
├── Adapter.java
├── AndroidCharger.java
├── AppleCharger.java
├── GalaxyS7.java
├── Iphone6Plus.java
├── LightningInterface.java
├── Main.java
└── MicroUsbInterface.java
├── Builder
├── Builder.java
├── CommonRoleBuilder.java
├── Director.java
├── Main.java
├── Role.java
└── SuperRoleBuilder.java
├── FactoryMethod
├── Operation.java
├── OperationAdd.java
├── OperationDiv.java
├── OperationMul.java
├── OperationSub.java
├── client
│ └── Main.java
└── factory
│ ├── AddFactory.java
│ ├── DivFactory.java
│ ├── IFactory.java
│ ├── MulFactory.java
│ └── SubFactory.java
├── Iterator
├── ChineseFoodMenu.java
├── Iterator.java
├── Main.java
├── Menu.java
└── MenuIterator.java
├── Singlenton
├── Enum
│ └── Singleton.java
├── Serializable
│ └── Singleton.java
├── client
│ └── SingletonClient.java
├── double_check
│ ├── FinalSingleton.java
│ ├── Singleton.java
│ └── VolatileSingleton.java
├── hangry
│ ├── Singleton.java
│ └── Singleton2.java
└── lazy
│ ├── Singleton.java
│ ├── StaticInnerClassSingleton.java
│ └── SynchronizedSingleton.java
├── StaticFactory
└── Main.java
├── Strategy
├── AdvancedMember.java
├── BookStore.java
├── Cashier.java
├── IntermediateMember.java
├── Member.java
└── PrimaryMember.java
└── staticfactory
├── Operation.java
├── OperationAdd.java
├── OperationDiv.java
├── OperationFactory.java
├── OperationMul.java
└── OperationSub.java
/.gitignore:
--------------------------------------------------------------------------------
1 | .classpath
2 | .project
3 | .settings
4 | .idea
5 | .DS_Store
6 | *.class
7 | *.iml
8 | # maven
9 | target/*
10 | *.versionsBackup
11 | bin/
12 | .sftp-config.json
13 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 |
9 | Hollis
10 | hollischuang@qq.com
11 | http://www.hollischuang.com
12 |
13 |
14 |
15 |
16 | com.hollischuang
17 | design.pattern
18 | 1.0-SNAPSHOT
19 | Java 设计模式
20 |
21 |
22 |
23 |
24 | org.apache.maven.plugins
25 | maven-compiler-plugin
26 | 2.3.2
27 |
28 | 1.8
29 | 1.8
30 | UTF-8
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/BenzBusinessCar.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/14.
5 | * 本次跑车
6 | */
7 | public class BenzBusinessCar implements BenzCar{
8 |
9 | public void gasUp() {
10 | System.out.println("给我的奔驰商务车加一般的汽油");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/BenzCar.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/14.
5 | */
6 | public interface BenzCar {
7 |
8 | //加汽油
9 | public void gasUp();
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/BenzSportCar.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/14.
5 | */
6 | public class BenzSportCar implements BenzCar {
7 |
8 | public void gasUp() {
9 | System.out.println("给我的奔驰跑车加最好的汽油");
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/TeslaBusinessCar.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/14.
5 | */
6 | public class TeslaBusinessCar implements TeslaCar {
7 | public void charge() {
8 | System.out.println("不用给我特斯拉商务车冲满电");
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/TeslaCar.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/14.
5 | */
6 | public interface TeslaCar {
7 |
8 | //充电
9 | public void charge();
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/TeslaSportCar.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/14.
5 | */
6 | public class TeslaSportCar implements TeslaCar {
7 | public void charge() {
8 | System.out.println("给我特斯拉跑车冲满电");
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/client/Main.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory.client;
2 | import com.hollischuang.pattern.AbstractFactory.TeslaCar;
3 | import com.hollischuang.pattern.AbstractFactory.factory.SportCarFactory;
4 |
5 | /**
6 | * Created by hollis on 16/4/12.
7 | */
8 | public class Main {
9 |
10 | public static void main(String[] args) {
11 |
12 | SportCarFactory sportCarFactory = new SportCarFactory();
13 | TeslaCar teslaCar = sportCarFactory.getTeslaCar();
14 | teslaCar.charge();
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/factory/BusinessCarFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory.factory;
2 |
3 | import com.hollischuang.pattern.AbstractFactory.*;
4 |
5 | /**
6 | * Created by hollis on 16/4/14.
7 | * 商务车工厂类
8 | */
9 | public class BusinessCarFactory implements CarFactory {
10 | public BenzCar getBenzCar() {
11 | return new BenzBusinessCar();
12 | }
13 |
14 | public TeslaCar getTeslaCar() {
15 | return new TeslaBusinessCar();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/factory/CarFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory.factory;
2 |
3 | import com.hollischuang.pattern.AbstractFactory.BenzCar;
4 | import com.hollischuang.pattern.AbstractFactory.TeslaCar;
5 |
6 | /**
7 | * Created by hollis on 16/4/14.
8 | * 工厂接口
9 | */
10 | public interface CarFactory {
11 |
12 | public BenzCar getBenzCar();
13 | public TeslaCar getTeslaCar();
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/AbstractFactory/factory/SportCarFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.AbstractFactory.factory;
2 |
3 | import com.hollischuang.pattern.AbstractFactory.BenzCar;
4 | import com.hollischuang.pattern.AbstractFactory.BenzSportCar;
5 | import com.hollischuang.pattern.AbstractFactory.TeslaCar;
6 | import com.hollischuang.pattern.AbstractFactory.TeslaSportCar;
7 |
8 | /**
9 | * Created by hollis on 16/4/14.
10 | * 跑车工厂类
11 | */
12 | public class SportCarFactory implements CarFactory {
13 | public BenzCar getBenzCar() {
14 | return new BenzSportCar();
15 | }
16 |
17 | public TeslaCar getTeslaCar() {
18 | return new TeslaSportCar();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/Adapter.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | * 适配器,将MicroUsb接口转成Lightning接口
6 | */
7 | public class Adapter implements LightningInterface {
8 | private MicroUsbInterface microUsbInterface;
9 |
10 | public Adapter() {
11 | }
12 |
13 | public Adapter(MicroUsbInterface microUsbInterface) {
14 | this.microUsbInterface = microUsbInterface;
15 | }
16 |
17 | @Override
18 | public void chargeWithLightning() {
19 | microUsbInterface.chargeWithMicroUsb();
20 | }
21 |
22 | public MicroUsbInterface getMicroUsbInterface() {
23 | return microUsbInterface;
24 | }
25 |
26 | public void setMicroUsbInterface(MicroUsbInterface microUsbInterface) {
27 | this.microUsbInterface = microUsbInterface;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/AndroidCharger.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | * 安卓设备的充电器
6 | */
7 | public class AndroidCharger implements MicroUsbInterface {
8 | @Override
9 | public void chargeWithMicroUsb() {
10 | System.out.println("使用MicroUsb型号的充电器充电...");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/AppleCharger.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | * 苹果设备的充电器
6 | */
7 | public class AppleCharger implements LightningInterface {
8 | @Override
9 | public void chargeWithLightning() {
10 | System.out.println("使用Lightning型号的充电器充电...");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/GalaxyS7.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | */
6 | public class GalaxyS7 {
7 |
8 | private MicroUsbInterface microUsbInterface;
9 |
10 | public GalaxyS7() {
11 | }
12 |
13 | public GalaxyS7(MicroUsbInterface microUsbInterface) {
14 | this.microUsbInterface = microUsbInterface;
15 | }
16 |
17 | public void charge(){
18 | System.out.println("开始给我的GalaxyS7手机充电...");
19 | microUsbInterface.chargeWithMicroUsb();
20 | System.out.println("开始给我的GalaxyS7手机充电...");
21 | }
22 |
23 | public MicroUsbInterface getMicroUsbInterface() {
24 | return microUsbInterface;
25 | }
26 |
27 | public void setMicroUsbInterface(MicroUsbInterface microUsbInterface) {
28 | this.microUsbInterface = microUsbInterface;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/Iphone6Plus.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | */
6 | public class Iphone6Plus {
7 |
8 | private LightningInterface lightningInterface;
9 |
10 | public Iphone6Plus() {
11 | }
12 |
13 | public Iphone6Plus(LightningInterface lightningInterface) {
14 | this.lightningInterface = lightningInterface;
15 | }
16 |
17 | public void charge() {
18 | System.out.println("开始给我的Iphone6Plus手机充电...");
19 | lightningInterface.chargeWithLightning();
20 | System.out.println("结束给我的Iphone6Plus手机充电...");
21 | }
22 |
23 | public LightningInterface getLightningInterface() {
24 | return lightningInterface;
25 | }
26 |
27 | public void setLightningInterface(LightningInterface lightningInterface) {
28 | this.lightningInterface = lightningInterface;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/LightningInterface.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | * Lightning充电器接口
6 | */
7 | public interface LightningInterface {
8 | public void chargeWithLightning();
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/Main.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | */
6 | public class Main {
7 |
8 | public static void main(String[] args) {
9 | Iphone6Plus iphone6Plus = new Iphone6Plus(new AppleCharger());
10 | iphone6Plus.charge();
11 |
12 | System.out.println("==============================");
13 |
14 | GalaxyS7 galaxyS7 = new GalaxyS7(new AndroidCharger());
15 | galaxyS7.charge();
16 |
17 | System.out.println("==============================");
18 |
19 | Adapter adapter = new Adapter(new AndroidCharger());
20 | Iphone6Plus newIphone = new Iphone6Plus();
21 | newIphone.setLightningInterface(adapter);
22 | newIphone.charge();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Adapter/MicroUsbInterface.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Adapter;
2 |
3 | /**
4 | * Created by hollis on 16/5/10.
5 | * MicroUsb充电器接口
6 | */
7 | public interface MicroUsbInterface {
8 | public void chargeWithMicroUsb();
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Builder/Builder.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Builder;
2 |
3 | /**
4 | * Created by hollis on 16/5/3.
5 | */
6 | public abstract class Builder {
7 |
8 | protected Role role = new Role();
9 |
10 | public abstract void buildHead();
11 |
12 | public abstract void buildFace();
13 |
14 | public abstract void buildBody();
15 |
16 | public abstract void buildHp();
17 |
18 | public abstract void buildSp();
19 |
20 | public abstract void buildMp();
21 |
22 | public Role getResult() {
23 | return role;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Builder/CommonRoleBuilder.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Builder;
2 |
3 | /**
4 | * Created by hollis on 16/5/3.
5 | */
6 | public class CommonRoleBuilder extends Builder {
7 |
8 | private Role role = new Role();
9 |
10 | @Override
11 | public void buildHead() {
12 | role.setBody("common head");
13 | }
14 |
15 | @Override
16 | public void buildFace() {
17 | role.setFace("common face");
18 | }
19 |
20 | @Override
21 | public void buildBody() {
22 | role.setBody("common body");
23 | }
24 |
25 | @Override
26 | public void buildHp() {
27 | role.setHp(100d);
28 | }
29 |
30 | @Override
31 | public void buildSp() {
32 | role.setSp(100d);
33 | }
34 |
35 | @Override
36 | public void buildMp() {
37 | role.setMp(100d);
38 | }
39 |
40 | @Override
41 | public Role getResult() {
42 | return role;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Builder/Director.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Builder;
2 |
3 | /**
4 | * Created by hollis on 16/5/3.
5 | */
6 | public class Director {
7 |
8 | public void construct(Builder builder){
9 | builder.buildBody();
10 | builder.buildHead();
11 | builder.buildFace();
12 | builder.buildHp();
13 | builder.buildMp();
14 | builder.buildSp();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Builder/Main.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Builder;
2 |
3 | /**
4 | * Created by hollis on 16/5/3.
5 | */
6 | public class Main {
7 |
8 | public static void main(String[] args) {
9 |
10 | Director director = new Director();
11 | Builder commonBuilder = new CommonRoleBuilder();
12 |
13 | director.construct(commonBuilder);
14 | Role commonRole = commonBuilder.getResult();
15 | System.out.println(commonRole);
16 |
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Builder/Role.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Builder;
2 |
3 | /**
4 | * Created by hollis on 16/5/3.
5 | */
6 | public class Role {
7 |
8 | private String head; //头部
9 | private String face; //脸部(脸部依赖于头部)
10 | private String body; //身体
11 | private Double hp; //生命值
12 | private Double sp; //能量值
13 | private Double mp; //魔法值
14 |
15 |
16 | public String getHead() {
17 | return head;
18 | }
19 |
20 | public void setHead(String head) {
21 | this.head = head;
22 | }
23 |
24 | public String getFace() {
25 | return face;
26 | }
27 |
28 | public void setFace(String face) {
29 | this.face = face;
30 | }
31 |
32 | public String getBody() {
33 | return body;
34 | }
35 |
36 | public void setBody(String body) {
37 | this.body = body;
38 | }
39 |
40 | public Double getHp() {
41 | return hp;
42 | }
43 |
44 | public void setHp(Double hp) {
45 | this.hp = hp;
46 | }
47 |
48 | public Double getSp() {
49 | return sp;
50 | }
51 |
52 | public void setSp(Double sp) {
53 | this.sp = sp;
54 | }
55 |
56 | public Double getMp() {
57 | return mp;
58 | }
59 |
60 | public void setMp(Double mp) {
61 | this.mp = mp;
62 | }
63 |
64 | @Override
65 | public String toString() {
66 | return "Role{" +
67 | "head='" + head + '\'' +
68 | ", face='" + face + '\'' +
69 | ", body='" + body + '\'' +
70 | ", hp=" + hp +
71 | ", sp=" + sp +
72 | ", mp=" + mp +
73 | '}';
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Builder/SuperRoleBuilder.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Builder;
2 |
3 | /**
4 | * Created by hollis on 16/5/3.
5 | */
6 | public class SuperRoleBuilder extends Builder {
7 |
8 | private Role role = new Role();
9 |
10 | @Override
11 | public void buildHead() {
12 | role.setBody("suoer head");
13 | }
14 |
15 | @Override
16 | public void buildFace() {
17 | role.setFace("super face");
18 | }
19 |
20 | @Override
21 | public void buildBody() {
22 | role.setBody("super body");
23 | }
24 |
25 | @Override
26 | public void buildHp() {
27 | role.setHp(120d);
28 | }
29 |
30 | @Override
31 | public void buildSp() {
32 | role.setSp(120d);
33 | }
34 |
35 | @Override
36 | public void buildMp() {
37 | role.setMp(120d);
38 | }
39 |
40 | @Override
41 | public Role getResult() {
42 | return role;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/Operation.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public abstract class Operation {
7 |
8 | private double value1 = 0;
9 | private double value2 = 0;
10 |
11 | public double getValue1() {
12 | return value1;
13 | }
14 |
15 | public void setValue1(double value1) {
16 | this.value1 = value1;
17 | }
18 |
19 | public double getValue2() {
20 | return value2;
21 | }
22 |
23 | public void setValue2(double value2) {
24 | this.value2 = value2;
25 | }
26 |
27 | public abstract double getResult();
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/OperationAdd.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationAdd extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | return getValue1() + getValue2();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/OperationDiv.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationDiv extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | if (getValue2() != 0) {
11 | return getValue1() / getValue2();
12 | }
13 | throw new IllegalArgumentException("除数不能为零");
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/OperationMul.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationMul extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | return getValue1() * getValue2();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/OperationSub.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod;
2 |
3 |
4 | /**
5 | * Created by hollis on 16/4/11.
6 | */
7 | public class OperationSub extends Operation {
8 |
9 | @Override
10 | public double getResult() {
11 | return getValue1() - getValue2();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/client/Main.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod.client;
2 |
3 | import com.hollischuang.pattern.FactoryMethod.Operation;
4 | import com.hollischuang.pattern.FactoryMethod.factory.AddFactory;
5 | import com.hollischuang.pattern.FactoryMethod.factory.IFactory;
6 |
7 | /**
8 | * Created by hollis on 16/4/12.
9 | */
10 | public class Main {
11 |
12 | public static void main(String[] args) {
13 | IFactory factory = new AddFactory();
14 | Operation operationAdd = factory.CreateOption();
15 | operationAdd.setValue1(10);
16 | operationAdd.setValue2(5);
17 | System.out.println(operationAdd.getResult());
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/factory/AddFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod.factory;
2 |
3 | import com.hollischuang.pattern.FactoryMethod.Operation;
4 | import com.hollischuang.pattern.FactoryMethod.OperationAdd;
5 |
6 | /**
7 | * Created by hollis on 16/4/12.
8 | * 加法类工厂
9 | */
10 | public class AddFactory implements IFactory {
11 |
12 | public Operation CreateOption() {
13 | return new OperationAdd();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/factory/DivFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod.factory;
2 |
3 | import com.hollischuang.pattern.FactoryMethod.Operation;
4 | import com.hollischuang.pattern.FactoryMethod.OperationDiv;
5 |
6 | /**
7 | * Created by hollis on 16/4/12.
8 | * 除法类工厂
9 | */
10 | public class DivFactory implements IFactory {
11 |
12 | public Operation CreateOption() {
13 | return new OperationDiv();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/factory/IFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod.factory;
2 |
3 | import com.hollischuang.pattern.FactoryMethod.Operation;
4 |
5 | /**
6 | * Created by hollis on 16/4/12.
7 | * 工厂接口
8 | */
9 | public interface IFactory {
10 | Operation CreateOption();
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/factory/MulFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod.factory;
2 |
3 | import com.hollischuang.pattern.FactoryMethod.Operation;
4 | import com.hollischuang.pattern.FactoryMethod.OperationMul;
5 |
6 | /**
7 | * Created by hollis on 16/4/12.
8 | * 除法类工厂
9 | */
10 | public class MulFactory implements IFactory {
11 |
12 | public Operation CreateOption() {
13 | return new OperationMul();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/FactoryMethod/factory/SubFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.FactoryMethod.factory;
2 |
3 | import com.hollischuang.pattern.FactoryMethod.Operation;
4 | import com.hollischuang.pattern.FactoryMethod.OperationSub;
5 |
6 | /**
7 | * Created by hollis on 16/4/12.
8 | * 减法类工厂
9 | */
10 | public class SubFactory implements IFactory {
11 |
12 | public Operation CreateOption() {
13 | return new OperationSub();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Iterator/ChineseFoodMenu.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Iterator;
2 |
3 | /**
4 | * Created by hollis on 17/2/18.
5 | */
6 | public class ChineseFoodMenu implements Menu {
7 |
8 | private String[] foods = new String[4];
9 | private int position = 0;
10 |
11 | @Override
12 | public void add(String name) {
13 | foods[position] = name;
14 | position += 1;
15 | }
16 |
17 | @Override
18 | public Iterator getIterator() {
19 | return new MenuIterator(this.foods);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Iterator/Iterator.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Iterator;
2 |
3 | /**
4 | * Created by hollis on 17/2/18.
5 | */
6 | public interface Iterator {
7 |
8 | boolean hasNext();
9 |
10 | E next();
11 |
12 | default void remove() {
13 | throw new UnsupportedOperationException("remove");
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Iterator/Main.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Iterator;
2 |
3 | /**
4 | * Created by hollis on 17/2/18.
5 | */
6 | public class Main {
7 |
8 | public static void main(String[] args) {
9 | ChineseFoodMenu chineseFoodMenu = new ChineseFoodMenu();
10 | chineseFoodMenu.add("宫保鸡丁");
11 | chineseFoodMenu.add("孜然羊肉");
12 | chineseFoodMenu.add("水煮鱼");
13 | chineseFoodMenu.add("北京烤鸭");
14 |
15 | Iterator iterator = chineseFoodMenu.getIterator();
16 | while (iterator.hasNext()) {
17 | System.out.println(iterator.next());
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Iterator/Menu.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Iterator;
2 |
3 | /**
4 | * Created by hollis on 17/2/18.
5 | */
6 | public interface Menu {
7 |
8 | void add(String name);
9 |
10 | Iterator getIterator();
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Iterator/MenuIterator.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Iterator;
2 |
3 | /**
4 | * Created by hollis on 17/2/18.
5 | */
6 | public class MenuIterator implements Iterator {
7 |
8 | String[] foods;
9 | int position = 0;
10 |
11 | public MenuIterator(String[] foods){
12 | this.foods = foods;
13 | }
14 |
15 | @Override
16 | public boolean hasNext() {
17 |
18 | return position != foods.length;
19 | }
20 |
21 | @Override
22 | public Object next() {
23 | String food = foods[position];
24 | position += 1;
25 | return food;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/Enum/Singleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.Enum;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | */
6 | public enum Singleton {
7 |
8 | INSTANCE;
9 |
10 | Singleton() {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/Serializable/Singleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.Serializable;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 不会被序列化破坏的单例
6 | */
7 | public class Singleton {
8 |
9 | private volatile static Singleton singleton;
10 | private Singleton (){}
11 | public static Singleton getSingleton() {
12 | if (singleton == null) {
13 | synchronized (Singleton.class) {
14 | if (singleton == null) {
15 | singleton = new Singleton();
16 | }
17 | }
18 | }
19 | return singleton;
20 | }
21 |
22 | private Object readResolve() {
23 | return singleton;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/client/SingletonClient.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.client;
2 |
3 | import com.hollischuang.pattern.Singlenton.hangry.Singleton;
4 |
5 | /**
6 | * Created by hollis on 16/4/6.
7 | */
8 | public class SingletonClient {
9 |
10 | public static void main(String[] args) {
11 | Singleton singleton1 = Singleton.getInstance();
12 | Singleton singleton2 = Singleton.getInstance();
13 | System.out.println(singleton1 == singleton2);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/double_check/FinalSingleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.double_check;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | */
6 | class FinalWrapper {
7 | public final T value;
8 |
9 | public FinalWrapper(T value) {
10 | this.value = value;
11 | }
12 | }
13 |
14 | public class FinalSingleton {
15 | private FinalWrapper helperWrapper = null;
16 |
17 | public FinalSingleton getHelper() {
18 | FinalWrapper wrapper = helperWrapper;
19 |
20 | if (wrapper == null) {
21 | synchronized (this) {
22 | if (helperWrapper == null) {
23 | helperWrapper = new FinalWrapper(new FinalSingleton());
24 | }
25 | wrapper = helperWrapper;
26 | }
27 | }
28 | return wrapper.value;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/double_check/Singleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.double_check;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 双重校验锁,有可见性问题
6 | */
7 | public class Singleton {
8 |
9 | private static Singleton singleton;
10 |
11 | private Singleton() {
12 | }
13 |
14 | public static Singleton getSingleton() {
15 | if (singleton == null) {
16 | synchronized (Singleton.class) {
17 | if (singleton == null) {
18 | singleton = new Singleton();
19 | }
20 | }
21 | }
22 | return singleton;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/double_check/VolatileSingleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.double_check;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | */
6 | public class VolatileSingleton {
7 | private static volatile VolatileSingleton singleton;
8 |
9 | private VolatileSingleton() {
10 | }
11 |
12 | public static VolatileSingleton getSingleton() {
13 | if (singleton == null) {
14 | synchronized (VolatileSingleton.class) {
15 | if (singleton == null) {
16 | singleton = new VolatileSingleton();
17 | }
18 | }
19 | }
20 | return singleton;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/hangry/Singleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.hangry;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 饿汉模式
6 | */
7 | public class Singleton {
8 | //在类内部实例化一个实例
9 | private static Singleton instance = new Singleton();
10 | //私有的构造函数,外部无法访问
11 | private Singleton() {
12 | }
13 | //对外提供获取实例的静态方法
14 | public static Singleton getInstance() {
15 | return instance;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/hangry/Singleton2.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.hangry;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 饿汉模式变种
6 | */
7 | public class Singleton2 {
8 | //在类内部定义
9 | private static Singleton2 instance;
10 | static {
11 | //实例化该实例
12 | instance = new Singleton2();
13 | }
14 | //私有的构造函数,外部无法访问
15 | private Singleton2() {
16 | }
17 | //对外提供获取实例的静态方法
18 | public static Singleton2 getInstance() {
19 | return instance;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/lazy/Singleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.lazy;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 懒汉模式,非线程安全
6 | */
7 | public class Singleton {
8 | //定义实例
9 | private static Singleton instance;
10 | //私有构造方法
11 | private Singleton(){}
12 | //对外提供获取实例的静态方法
13 | public static Singleton getInstance() {
14 | //在对象被使用的时候才实例化
15 | if (instance == null) {
16 | instance = new Singleton();
17 | }
18 | return instance;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/lazy/StaticInnerClassSingleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.lazy;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 使用静态内部类实现延迟初始化
6 | */
7 | public class StaticInnerClassSingleton {
8 | //在静态内部类中初始化实例对象
9 | private static class SingletonHolder {
10 | private static final StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();
11 | }
12 | //私有的构造方法
13 | private StaticInnerClassSingleton() {
14 | }
15 | //对外提供获取实例的静态方法
16 | public static final StaticInnerClassSingleton getInstance() {
17 | return SingletonHolder.INSTANCE;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Singlenton/lazy/SynchronizedSingleton.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.Singlenton.lazy;
2 |
3 | /**
4 | * Created by hollis on 16/4/6.
5 | * 懒汉模式,线程安全
6 | */
7 | public class SynchronizedSingleton {
8 | //定义实例
9 | private static SynchronizedSingleton instance;
10 | //私有构造方法
11 | private SynchronizedSingleton(){}
12 | //对外提供获取实例的静态方法,对该方法加锁
13 | public static synchronized SynchronizedSingleton getInstance() {
14 | //在对象被使用的时候才实例化
15 | if (instance == null) {
16 | instance = new SynchronizedSingleton();
17 | }
18 | return instance;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/StaticFactory/Main.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | import com.hollischuang.pattern.StaticFactory.Operation;
4 | import com.hollischuang.pattern.StaticFactory.OperationFactory;
5 |
6 | /**
7 | * Created by hollis on 16/4/11.
8 | */
9 | public class Main {
10 |
11 | public static void main(String[] args) {
12 | // OperationAdd operationAdd = new OperationAdd();
13 | // operationAdd.setValue1(10);
14 | // operationAdd.setValue2(5);
15 | // System.out.println(operationAdd.getResult());
16 |
17 |
18 | Operation operationAdd = OperationFactory.createOperation("+");
19 | operationAdd.setValue1(10);
20 | operationAdd.setValue2(5);
21 | System.out.println(operationAdd.getResult());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Strategy/AdvancedMember.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hollischuang/DesignPattern/8561d97d9a8142a79f609ac33db129d2d35fb836/src/main/java/com/hollischuang/pattern/Strategy/AdvancedMember.java
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Strategy/BookStore.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hollischuang/DesignPattern/8561d97d9a8142a79f609ac33db129d2d35fb836/src/main/java/com/hollischuang/pattern/Strategy/BookStore.java
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Strategy/Cashier.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hollischuang/DesignPattern/8561d97d9a8142a79f609ac33db129d2d35fb836/src/main/java/com/hollischuang/pattern/Strategy/Cashier.java
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Strategy/IntermediateMember.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hollischuang/DesignPattern/8561d97d9a8142a79f609ac33db129d2d35fb836/src/main/java/com/hollischuang/pattern/Strategy/IntermediateMember.java
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Strategy/Member.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hollischuang/DesignPattern/8561d97d9a8142a79f609ac33db129d2d35fb836/src/main/java/com/hollischuang/pattern/Strategy/Member.java
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/Strategy/PrimaryMember.java:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hollischuang/DesignPattern/8561d97d9a8142a79f609ac33db129d2d35fb836/src/main/java/com/hollischuang/pattern/Strategy/PrimaryMember.java
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/staticfactory/Operation.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public abstract class Operation {
7 |
8 | private double value1 = 0;
9 | private double value2 = 0;
10 |
11 | public double getValue1() {
12 | return value1;
13 | }
14 |
15 | public void setValue1(double value1) {
16 | this.value1 = value1;
17 | }
18 |
19 | public double getValue2() {
20 | return value2;
21 | }
22 |
23 | public void setValue2(double value2) {
24 | this.value2 = value2;
25 | }
26 |
27 | public abstract double getResult();
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/staticfactory/OperationAdd.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationAdd extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | return getValue1() + getValue2();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/staticfactory/OperationDiv.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationDiv extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | if (getValue2() != 0) {
11 | return getValue1() / getValue2();
12 | }
13 | throw new IllegalArgumentException("除数不能为零");
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/staticfactory/OperationFactory.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationFactory {
7 |
8 | public static Operation createOperation(String operation) {
9 | Operation oper = null;
10 | switch (operation) {
11 |
12 | case "+":
13 | oper = new OperationAdd();
14 | break;
15 |
16 | case "-":
17 | oper = new OperationSub();
18 | break;
19 |
20 | case "*":
21 | oper = new OperationMul();
22 | break;
23 |
24 | case "/":
25 | oper = new OperationDiv();
26 | break;
27 | default:
28 | throw new UnsupportedOperationException("不支持该操作");
29 | }
30 | return oper;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/staticfactory/OperationMul.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationMul extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | return getValue1() * getValue2();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/hollischuang/pattern/staticfactory/OperationSub.java:
--------------------------------------------------------------------------------
1 | package com.hollischuang.pattern.StaticFactory;
2 |
3 | /**
4 | * Created by hollis on 16/4/11.
5 | */
6 | public class OperationSub extends Operation {
7 |
8 | @Override
9 | public double getResult() {
10 | return getValue1() - getValue2();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------