├── README.md └── pattern └── src └── main └── java └── android └── jet ├── builder ├── BuilderA.java ├── BuilderB.java ├── Client.java ├── Director.java ├── IBuilder.java └── Production.java ├── chainofresponsibility ├── Boss.java ├── Client.java ├── Demand.java ├── DemandA.java ├── DemandB.java ├── Handler.java └── TechnicalManager.java ├── decorator ├── Client.java ├── Component.java ├── ConcreteDecorator.java └── Star.java ├── factory ├── Client.java ├── Factory.java ├── IceCream.java ├── IceCreamFactory.java ├── Pizza.java ├── PizzaFactory.java └── Product.java ├── mediator ├── Client.java ├── Colleague.java ├── Command.java ├── Mediator.java ├── SituationA.java ├── SituationB.java └── SituationC.java ├── observer ├── Client.java ├── LazySheep.java ├── Observer.java ├── PleasantSheep.java ├── Subject.java └── Wolf.java ├── prototype ├── Area.java ├── Client.java └── Money.java ├── proxy ├── Agent.java ├── Client.java ├── Star.java └── Subject.java ├── singleton ├── EagerSingleton.java ├── LazySingleton.java └── Singleton.java ├── strategy ├── Client.java ├── ConcreteStrategyA.java ├── ConcreteStrategyB.java ├── Context.java └── Strategy.java └── templatemethod ├── AbstractClass.java ├── Client.java ├── CodeBicycle.java └── ScanBicycle.java /README.md: -------------------------------------------------------------------------------- 1 | # DesignPattern 2 | 设计模式代码集合 3 | 4 | Java代码写设计模式例子 5 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/builder/BuilderA.java: -------------------------------------------------------------------------------- 1 | package android.jet.builder; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 兰博基尼的builder类 6 | * @date:2017/10/11 7 | */ 8 | public class BuilderA implements IBuilder { 9 | 10 | private Production production = new Production(); 11 | 12 | @Override 13 | public void buildPart1() { 14 | System.out.println("构造兰博基尼的第一部分。"); 15 | production.setPart1("This is part1 of Lamborghini"); 16 | } 17 | 18 | @Override 19 | public void buildPart2() { 20 | System.out.println("构造兰博基尼的第二部分。"); 21 | production.setPart2("This is part2 of Lamborghini"); 22 | } 23 | 24 | @Override 25 | public Production build() { 26 | System.out.println("咔擦!兰博基尼已造好!"); 27 | return production; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/builder/BuilderB.java: -------------------------------------------------------------------------------- 1 | package android.jet.builder; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 法拉利的builder类 6 | * @date:2017/10/11 7 | */ 8 | public class BuilderB implements IBuilder { 9 | 10 | private Production production = new Production(); 11 | 12 | @Override 13 | public void buildPart1() { 14 | System.out.println("构造法拉利的第一部分。"); 15 | production.setPart1("This is part1 of Ferrari"); 16 | } 17 | 18 | @Override 19 | public void buildPart2() { 20 | System.out.println("构造法拉利的第二部分。"); 21 | production.setPart2("This is part2 of Ferrari"); 22 | } 23 | 24 | @Override 25 | public Production build() { 26 | System.out.println("咻咻!法拉利已造好!"); 27 | return production; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/builder/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.builder; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/10/11 7 | */ 8 | public class Client { 9 | 10 | public static void main(String[] args) { 11 | // 兰博基尼 12 | IBuilder builderA = new BuilderA(); 13 | Director directorA = new Director(builderA); 14 | directorA.construct(); 15 | 16 | // 法拉利 17 | IBuilder builderB = new BuilderB(); 18 | Director directorB = new Director(builderB); 19 | directorB.construct(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/builder/Director.java: -------------------------------------------------------------------------------- 1 | package android.jet.builder; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 导演者角色 6 | * @date:2017/10/11 7 | */ 8 | public class Director { 9 | 10 | private IBuilder builder; 11 | 12 | public Director(IBuilder builder){ 13 | this.builder = builder; 14 | } 15 | 16 | /** 17 | * 构造顺序 18 | */ 19 | public Production construct(){ 20 | builder.buildPart1(); 21 | builder.buildPart2(); 22 | 23 | return builder.build(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/builder/IBuilder.java: -------------------------------------------------------------------------------- 1 | package android.jet.builder; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 建造者父类 6 | * @date:2017/10/11 7 | */ 8 | public interface IBuilder { 9 | 10 | public void buildPart1(); 11 | 12 | public void buildPart2(); 13 | 14 | public Production build(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/builder/Production.java: -------------------------------------------------------------------------------- 1 | package android.jet.builder; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 产品类 6 | * @date:2017/10/11 7 | */ 8 | public class Production { 9 | 10 | private String part1; 11 | private String part2; 12 | 13 | public String getPart1() { 14 | return part1; 15 | } 16 | 17 | public void setPart1(String part1) { 18 | this.part1 = part1; 19 | } 20 | 21 | public String getPart2() { 22 | return part2; 23 | } 24 | 25 | public void setPart2(String part2) { 26 | this.part2 = part2; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/Boss.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/11/18 8 | */ 9 | public class Boss extends Handler { 10 | public Boss() { 11 | super(2); 12 | } 13 | 14 | @Override 15 | public void report(Demand demand) { 16 | System.out.println("需求:" + demand.detail()); 17 | System.out.println(getClass().getSimpleName() + ":你们打一架吧,打赢的做决定"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/11/18 8 | */ 9 | public class Client { 10 | public static void main(String[] args) { 11 | Demand demandA = new DemandA(); // 请求等级低 12 | Demand demandB = new DemandB(); // 请求等级高 13 | 14 | Boss boss = new Boss(); 15 | TechnicalManager technicalManager = new TechnicalManager(); 16 | technicalManager.setNextHandler(boss); 17 | 18 | technicalManager.handleMessage(demandA); 19 | System.out.println("============================"); 20 | technicalManager.handleMessage(demandB); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/Demand.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/11/18 8 | */ 9 | public interface Demand { 10 | 11 | public int demandLevel(); 12 | 13 | public String detail(); 14 | } 15 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/DemandA.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/11/18 8 | */ 9 | public class DemandA implements Demand { 10 | 11 | @Override 12 | public int demandLevel() { 13 | return 1; 14 | } 15 | 16 | @Override 17 | public String detail() { 18 | return "加一张露一点点的图"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/DemandB.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/11/18 8 | */ 9 | public class DemandB implements Demand { 10 | @Override 11 | public int demandLevel() { 12 | return 2; 13 | } 14 | 15 | @Override 16 | public String detail() { 17 | return "加一张露一点点的图"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/Handler.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/17. 5 | */ 6 | 7 | public abstract class Handler { 8 | private Handler nextHandler; 9 | private int level; 10 | public Handler(int level) { 11 | this.level = level; 12 | } 13 | 14 | // 处理请求传递,注意final,子类不可重写 15 | public final void handleMessage(Demand demand) { 16 | if (level == demand.demandLevel()) { 17 | this.report(demand); 18 | } else { 19 | if (this.nextHandler != null) { 20 | System.out.println(this.getClass().getSimpleName() + ":事情太严重,需报告上一级"); 21 | this.nextHandler.handleMessage(demand); 22 | } else { 23 | System.out.println("我就是boss,没有上头"); 24 | } 25 | } 26 | } 27 | 28 | public void setNextHandler(Handler handler) { 29 | this.nextHandler = handler; 30 | } 31 | 32 | // 抽象方法,子类实现 33 | public abstract void report(Demand demand); 34 | } 35 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/chainofresponsibility/TechnicalManager.java: -------------------------------------------------------------------------------- 1 | package android.jet.chainofresponsibility; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/11/18 8 | */ 9 | public class TechnicalManager extends Handler { 10 | public TechnicalManager() { 11 | super(1); 12 | } 13 | 14 | @Override 15 | public void report(Demand demand) { 16 | System.out.println("需求:" + demand.detail()); 17 | System.out.println(getClass().getSimpleName() + ":小猿我挺你,这个需求不干"); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/decorator/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.decorator; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/29. 5 | */ 6 | 7 | public class Client { 8 | 9 | public static void main(String[] args) { 10 | Component star = new Star(); 11 | Component decorator = new ConcreteDecorator(star); 12 | decorator.movie(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/decorator/Component.java: -------------------------------------------------------------------------------- 1 | package android.jet.decorator; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/29. 5 | */ 6 | 7 | public interface Component { 8 | 9 | public void movie(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/decorator/ConcreteDecorator.java: -------------------------------------------------------------------------------- 1 | package android.jet.decorator; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/29. 5 | */ 6 | 7 | public class ConcreteDecorator implements Component { 8 | private Component star; 9 | 10 | public ConcreteDecorator(Component concreteComponent) { 11 | this.star = concreteComponent; 12 | } 13 | 14 | @Override 15 | public void movie() { 16 | System.out.println(getClass().getSimpleName() + ":拍电影各种道具加身,还得化妆"); 17 | star.movie(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/decorator/Star.java: -------------------------------------------------------------------------------- 1 | package android.jet.decorator; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/29. 5 | */ 6 | 7 | public class Star implements Component { 8 | @Override 9 | public void movie() { 10 | System.out.println(getClass().getSimpleName() + ":化了妆迷倒一片妹纸,拍起来电影特别带劲"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public class Client { 9 | 10 | public static void main(String[] args){ 11 | 12 | // 生产雪糕 13 | Factory iceCreamFactory = new IceCreamFactory(); 14 | Product iceCream = iceCreamFactory.factory(); 15 | iceCream.product(); 16 | 17 | // 生产披萨 18 | Factory pizzaFactory = new PizzaFactory(); 19 | Product pizza = pizzaFactory.factory(); 20 | pizza.product(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/Factory.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public interface Factory { 9 | 10 | public Product factory(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/IceCream.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public class IceCream implements Product { 9 | 10 | @Override 11 | public void product() { 12 | 13 | /** 14 | * 具体的业务逻辑 15 | */ 16 | System.out.println("雪糕做好了!!"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/IceCreamFactory.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public class IceCreamFactory implements Factory { 9 | 10 | @Override 11 | public Product factory() { 12 | return new IceCream(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/Pizza.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public class Pizza implements Product { 9 | 10 | @Override 11 | public void product() { 12 | /** 13 | * 具体的业务逻辑 14 | */ 15 | System.out.println("披萨做好了!!"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/PizzaFactory.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public class PizzaFactory implements Factory { 9 | 10 | @Override 11 | public Product factory() { 12 | return new Pizza(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/factory/Product.java: -------------------------------------------------------------------------------- 1 | package android.jet.factory; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 6 | * @date:2017/9/20 7 | */ 8 | public interface Product { 9 | 10 | public void product(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/17. 5 | */ 6 | 7 | public class Client { 8 | public static void main(String[] args) { 9 | Mediator mediator = new Command(); 10 | System.out.println("-------A被攻打,请求支援--------"); 11 | SituationA situationA = new SituationA(mediator); 12 | situationA.aRequestSupport(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/Colleague.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | /** 4 | * Created by Administrator on 2018/1/5. 5 | */ 6 | 7 | public abstract class Colleague { 8 | protected Mediator mediator; 9 | 10 | public Colleague(Mediator mediator) { 11 | this.mediator = mediator; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/Command.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | import java.util.Random; 4 | 5 | /** 6 | * Created by Administrator on 2018/1/5. 7 | */ 8 | 9 | public class Command extends Mediator { 10 | 11 | public void execute(String method) { 12 | if (method.equals("aRequestSupport")) { 13 | this.aRequestSupport(); 14 | } else if (method.equals("bRequestSupport")) { 15 | this.bRequestSupport(); 16 | } 17 | } 18 | 19 | // A请求支援 20 | private void aRequestSupport() { 21 | System.out.println("SituationA:这里是A战区,现在被敌方攻打,请求支援"); 22 | boolean isBSupport = isSupport(); // B是否可以支援 23 | super.situationB.bSupport(isBSupport); 24 | if (!isBSupport) { // B支援不了,请求C 25 | System.out.println("-------A又向C请求支援--------"); 26 | boolean isASupport = isSupport(); // B是否可以支援 27 | super.situationC.cSupport(isASupport); 28 | if (!isASupport) { 29 | System.out.println("-------自己看着办吧。--------"); 30 | } 31 | } 32 | } 33 | 34 | // B请求支援 35 | public void bRequestSupport() { 36 | System.out.println("这里是B的请求支援"); 37 | } 38 | 39 | private boolean isSupport() { 40 | Random rand = new Random(); 41 | return rand.nextBoolean(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/Mediator.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | /** 4 | * Created by Administrator on 2018/1/5. 5 | */ 6 | 7 | public abstract class Mediator { 8 | protected SituationA situationA; 9 | protected SituationB situationB; 10 | protected SituationC situationC; 11 | 12 | Mediator() { 13 | situationA = new SituationA(this); 14 | situationB = new SituationB(this); 15 | situationC = new SituationC(this); 16 | } 17 | 18 | /** 19 | * 事件的业务流程处理 20 | * 21 | * @param method 22 | */ 23 | public abstract void execute(String method); 24 | } 25 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/SituationA.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | /** 4 | * Created by Administrator on 2018/1/5. 5 | */ 6 | 7 | public class SituationA extends Colleague { 8 | 9 | public SituationA(Mediator mediator) { 10 | super(mediator); 11 | } 12 | 13 | // 请求支援 14 | public void aRequestSupport() { 15 | super.mediator.execute("aRequestSupport"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/SituationB.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | /** 4 | * Created by Administrator on 2018/1/5. 5 | */ 6 | 7 | public class SituationB extends Colleague { 8 | 9 | public SituationB(Mediator mediator) { 10 | super(mediator); 11 | } 12 | 13 | // 请求支援 14 | public void bRequestSupport() { 15 | super.mediator.execute("bRequestSupport"); 16 | } 17 | 18 | public void bSupport(boolean isSupport) { 19 | if (isSupport) { 20 | System.out.println("SituationB:Copy that,还有五秒钟到达战场"); 21 | } else { 22 | System.out.println("-------B也正在被攻打--------"); 23 | System.out.println("SituationB:支援你妹,我也正在被攻打"); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/mediator/SituationC.java: -------------------------------------------------------------------------------- 1 | package android.jet.mediator; 2 | 3 | /** 4 | * Created by Administrator on 2018/1/5. 5 | */ 6 | 7 | public class SituationC extends Colleague { 8 | public SituationC(Mediator mediator) { 9 | super(mediator); 10 | } 11 | 12 | // 请求支援 13 | public void cRequestSupport() { 14 | super.mediator.execute("cRequestSupport"); 15 | } 16 | 17 | public void cSupport(boolean isSupport) { 18 | if (isSupport) { 19 | System.out.println(getClass().getSimpleName() + ":Copy that,还有五秒钟到达战场"); 20 | } else { 21 | System.out.println(getClass().getSimpleName() + ":不好意思,来迟一步了,正在前往别的战区支援"); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/observer/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.observer; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/17. 5 | */ 6 | 7 | public class Client { 8 | 9 | public static void main(String[] args) { 10 | // 灰太狼--被观察者 11 | Wolf wolf = new Wolf(); 12 | 13 | // 喜羊羊--观察者 14 | Observer pleasantSheep = new PleasantSheep(); 15 | // 登记观察者 16 | wolf.attach(pleasantSheep); 17 | 18 | // 懒羊羊--观察者 19 | Observer lazySheep = new LazySheep(); 20 | // 登记观察者 21 | wolf.attach(lazySheep); 22 | 23 | // 灰太狼入侵 24 | wolf.invade(); 25 | 26 | // 删除观察者 27 | wolf.dettach(pleasantSheep); 28 | 29 | wolf.invade(); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/observer/LazySheep.java: -------------------------------------------------------------------------------- 1 | package android.jet.observer; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/17. 5 | */ 6 | 7 | public class LazySheep implements Observer { 8 | 9 | @Override 10 | public String getName() { 11 | return "懒羊羊"; 12 | } 13 | 14 | @Override 15 | public void update(String msg) { 16 | System.out.println("懒羊羊收到通知:" + msg); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/observer/Observer.java: -------------------------------------------------------------------------------- 1 | package android.jet.observer; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/17. 5 | */ 6 | 7 | public interface Observer { 8 | 9 | String getName(); 10 | 11 | /** 12 | * 通知更新方法 13 | * 14 | * @param msg 15 | */ 16 | public void update(String msg); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/observer/PleasantSheep.java: -------------------------------------------------------------------------------- 1 | package android.jet.observer; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/17. 5 | */ 6 | 7 | public class PleasantSheep implements Observer{ 8 | 9 | @Override 10 | public String getName() { 11 | return "喜羊羊"; 12 | } 13 | 14 | /** 15 | * 具体业务逻辑 16 | */ 17 | @Override 18 | public void update(String msg) { 19 | System.out.println("喜羊羊收到通知:" + msg); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/observer/Subject.java: -------------------------------------------------------------------------------- 1 | package android.jet.observer; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by Administrator on 2017/10/17. 8 | */ 9 | 10 | public abstract class Subject { 11 | 12 | /** 13 | * 观察者对象的集合 14 | */ 15 | private List observerList = new ArrayList<>(); 16 | 17 | /** 18 | * 登记观察者 19 | * 20 | * @param observer 21 | */ 22 | public void attach(Observer observer) { 23 | observerList.add(observer); 24 | System.out.println("增加了观察者:" + observer.getName()); 25 | } 26 | 27 | /** 28 | * 删除观察者 29 | * 30 | * @param observer 31 | */ 32 | public void dettach(Observer observer) { 33 | observerList.remove(observer); 34 | System.out.println("删除了观察者:" + observer.getName()); 35 | } 36 | 37 | /** 38 | * 通知所有观察者 39 | */ 40 | public void notifyObserver() { 41 | for (Observer observer : observerList) { 42 | observer.update("灰太狼要搞事情了"); 43 | } 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/observer/Wolf.java: -------------------------------------------------------------------------------- 1 | package android.jet.observer; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/17. 5 | */ 6 | 7 | public class Wolf extends Subject { 8 | 9 | public void invade(){ 10 | 11 | System.out.println("灰太狼:我要搞事情了"); 12 | // 通知所有观察者 13 | notifyObserver(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/prototype/Area.java: -------------------------------------------------------------------------------- 1 | package android.jet.prototype; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created by Administrator on 2017/10/24. 7 | */ 8 | 9 | public class Area implements Cloneable, Serializable { 10 | 11 | // 钞票单位 12 | private String unit; 13 | 14 | public String getUnit() { 15 | return unit; 16 | } 17 | 18 | public void setUnit(String unit) { 19 | this.unit = unit; 20 | } 21 | 22 | @Override 23 | protected Area clone() throws CloneNotSupportedException { 24 | Area cloneArea; 25 | cloneArea = (Area) super.clone(); 26 | return cloneArea; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/prototype/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.prototype; 2 | 3 | /** 4 | * Created by Administrator on 2017/10/24. 5 | */ 6 | 7 | public class Client { 8 | 9 | public static void main(String[] args) { 10 | 11 | Area area = new Area(); 12 | area.setUnit("RMB"); 13 | 14 | // 原型实例,100RNB的钞票 15 | Money money = new Money(100, area); 16 | 17 | // for (int i = 1; i <= 3; i++) { 18 | // try { 19 | // Money cloneMoney = money.clone(); 20 | // cloneMoney.setFaceValue(i * 100); 21 | // System.out.println("这张是" + cloneMoney.getFaceValue() + cloneMoney.getArea().getUnit() + "的钞票"); 22 | // } catch (CloneNotSupportedException e) { 23 | // e.printStackTrace(); 24 | // } 25 | // } 26 | 27 | // try { 28 | // Money cloneMoney = money.clone(); 29 | // area.setUnit("美元"); 30 | // System.out.println("原型实例的面值:" + money.getFaceValue() +money.getArea().getUnit()); 31 | // System.out.println("拷贝实例的面值:" + cloneMoney.getFaceValue() + cloneMoney.getArea().getUnit()); 32 | // } catch (CloneNotSupportedException e) { 33 | // e.printStackTrace(); 34 | // } 35 | 36 | try { 37 | Money cloneMoney = money.clone(); 38 | cloneMoney.setFaceValue(200); 39 | area.setUnit("美元"); 40 | 41 | System.out.println("原型实例的面值:" + money.getFaceValue() + money.getArea().getUnit()); 42 | System.out.println("拷贝实例的面值:" + cloneMoney.getFaceValue() + cloneMoney.getArea().getUnit()); 43 | } catch (CloneNotSupportedException e) { 44 | e.printStackTrace(); 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/prototype/Money.java: -------------------------------------------------------------------------------- 1 | package android.jet.prototype; 2 | 3 | import java.io.ByteArrayInputStream; 4 | import java.io.ByteArrayOutputStream; 5 | import java.io.IOException; 6 | import java.io.ObjectInputStream; 7 | import java.io.ObjectOutputStream; 8 | import java.io.Serializable; 9 | 10 | /** 11 | * Created by Administrator on 2017/10/24. 12 | */ 13 | 14 | public class Money implements Cloneable, Serializable { 15 | 16 | private int faceValue; 17 | 18 | private Area area; 19 | 20 | public int getFaceValue() { 21 | return faceValue; 22 | } 23 | 24 | public void setFaceValue(int faceValue) { 25 | this.faceValue = faceValue; 26 | } 27 | 28 | public Money(int faceValue, Area area) { 29 | this.faceValue = faceValue; 30 | this.area = area; 31 | } 32 | 33 | public Area getArea() { 34 | return area; 35 | } 36 | 37 | public void setArea(Area area) { 38 | this.area = area; 39 | } 40 | 41 | @Override 42 | protected Money clone() throws CloneNotSupportedException { 43 | 44 | // 深拷贝(序列化) 45 | Money cloneMoney = null; 46 | try { 47 | cloneMoney = (Money) deepClone(); 48 | } catch (IOException e) { 49 | e.printStackTrace(); 50 | } catch (ClassNotFoundException e) { 51 | e.printStackTrace(); 52 | } 53 | 54 | // 深拷贝(重写clone方法) 55 | // Money cloneMoney = (Money) super.clone(); 56 | // cloneMoney.area = this.area.clone(); 57 | 58 | // 浅拷贝 59 | // Money cloneMoney = (Money) super.clone(); 60 | 61 | return cloneMoney; 62 | } 63 | 64 | public Object deepClone() throws IOException, ClassNotFoundException { 65 | //将对象写到流里 66 | ByteArrayOutputStream bos = new ByteArrayOutputStream(); 67 | ObjectOutputStream oos = new ObjectOutputStream(bos); 68 | oos.writeObject(this); 69 | //从流里读回来 70 | ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); 71 | ObjectInputStream ois = new ObjectInputStream(bis); 72 | return ois.readObject(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/proxy/Agent.java: -------------------------------------------------------------------------------- 1 | package android.jet.proxy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/28. 5 | */ 6 | 7 | public class Agent implements Subject { 8 | private Subject star; 9 | 10 | public Agent(Subject star) { 11 | this.star = star; 12 | } 13 | 14 | @Override 15 | public void movie() { 16 | System.out.println(getClass().getSimpleName() + ":剧本很好,这部电影接下了"); 17 | star.movie(); 18 | } 19 | 20 | @Override 21 | public Subject getAgent() { 22 | return this; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/proxy/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.proxy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/28. 5 | */ 6 | 7 | public class Client { 8 | 9 | public static void main(String[] args) { 10 | // Subject star = new Star(); 11 | // Subject proxy = new Agent(star); 12 | // proxy.movie(); 13 | 14 | Subject star = new Star(); 15 | Subject proxy = star.getAgent(); 16 | proxy.movie(); 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/proxy/Star.java: -------------------------------------------------------------------------------- 1 | package android.jet.proxy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/28. 5 | */ 6 | 7 | public class Star implements Subject { 8 | 9 | @Override 10 | public void movie() { 11 | System.out.println(getClass().getSimpleName() + ":经纪人接了一部电影,我负责拍就好"); 12 | } 13 | 14 | @Override 15 | public Subject getAgent() { 16 | return new Agent(this); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/proxy/Subject.java: -------------------------------------------------------------------------------- 1 | package android.jet.proxy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/28. 5 | */ 6 | 7 | public interface Subject { 8 | 9 | public void movie(); 10 | 11 | public Subject getAgent(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/singleton/EagerSingleton.java: -------------------------------------------------------------------------------- 1 | package android.jet.singleton; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 饿汉式 6 | * @date:2017/9/22 7 | */ 8 | public class EagerSingleton { 9 | 10 | private static EagerSingleton singleton = new EagerSingleton(); 11 | 12 | private EagerSingleton() { 13 | } 14 | 15 | public static EagerSingleton getSingleton() { 16 | return singleton; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/singleton/LazySingleton.java: -------------------------------------------------------------------------------- 1 | package android.jet.singleton; 2 | 3 | /** 4 | * @author liqisi 5 | * @description: 懒汉式 6 | * @date:2017/9/22 7 | */ 8 | public class LazySingleton { 9 | 10 | private static LazySingleton singleton = null; 11 | 12 | private LazySingleton() { 13 | } 14 | 15 | public static synchronized LazySingleton getSingleton() { 16 | if (singleton == null) { 17 | singleton = new LazySingleton(); 18 | } 19 | return singleton; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/singleton/Singleton.java: -------------------------------------------------------------------------------- 1 | package android.jet.singleton; 2 | 3 | public enum Singleton { 4 | 5 | singleton; 6 | 7 | public void singletonFunc() { // 该单例需要实现的功能 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/strategy/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.strategy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/1. 5 | */ 6 | 7 | public class Client { 8 | public static void main(String[] args) { 9 | // 操控比赛,这场要输 10 | // Context context = new Context(new ConcreteStrategyA()); 11 | // context.contextInterface(); 12 | 13 | // // 操控比赛,这场要输,哈哈哈 14 | // Context context = new Context(new ConcreteStrategyB()); 15 | // context.contextInterface(); 16 | 17 | Context context = new Context(); 18 | context.factory("LOSE"); 19 | context.contextInterface(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/strategy/ConcreteStrategyA.java: -------------------------------------------------------------------------------- 1 | package android.jet.strategy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/1. 5 | */ 6 | 7 | public class ConcreteStrategyA implements Strategy{ 8 | 9 | @Override 10 | public void algorithmLogic() { 11 | // 具体的算法逻辑(输了比赛) 12 | System.out.println("第一场:上等马vs上等马 第二场:中等马vs中等马 第三场:下等马vs下等马 赛果:输!"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/strategy/ConcreteStrategyB.java: -------------------------------------------------------------------------------- 1 | package android.jet.strategy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/1. 5 | */ 6 | 7 | public class ConcreteStrategyB implements Strategy{ 8 | @Override 9 | public void algorithmLogic() { 10 | // 赢 11 | System.out.println("第一场:下等马vs上等马 第二场:上等马vs中等马 第三场:中等马vs下等马 赛果:赢!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/strategy/Context.java: -------------------------------------------------------------------------------- 1 | package android.jet.strategy; 2 | 3 | /** 4 | * Created by Administrator on 2017/11/1. 5 | */ 6 | 7 | public class Context { 8 | 9 | private Strategy strategy; 10 | 11 | // /** 12 | // * 传进的是一个具体的策略实例 13 | // * @param strategy 14 | // */ 15 | // public Context(Strategy strategy) { 16 | // this.strategy = strategy; 17 | // } 18 | 19 | public void factory(String strategyType) { 20 | if (strategyType.equals("WIN")) { 21 | strategy = new ConcreteStrategyB(); 22 | } else if (strategyType.equals("LOSE")) { 23 | strategy = new ConcreteStrategyA(); 24 | } 25 | } 26 | 27 | /** 28 | * 调用策略 29 | */ 30 | public void contextInterface() { 31 | strategy.algorithmLogic(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/strategy/Strategy.java: -------------------------------------------------------------------------------- 1 | package android.jet.strategy; 2 | 3 | /** 4 | * 策略接口 5 | * Created by Administrator on 2017/11/1. 6 | */ 7 | 8 | public interface Strategy { 9 | 10 | public void algorithmLogic(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/templatemethod/AbstractClass.java: -------------------------------------------------------------------------------- 1 | package android.jet.templatemethod; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/12/9 8 | */ 9 | public abstract class AbstractClass { 10 | 11 | protected boolean isNeedUnlock = true; // 默认需要开锁 12 | 13 | /** 14 | * 基本方法,子类需要实现 15 | */ 16 | protected abstract void unlock(); 17 | 18 | /** 19 | * 基本方法,子类需要实现 20 | */ 21 | protected abstract void ride(); 22 | 23 | /** 24 | * 钩子方法,子类可实现 25 | * 26 | * @param isNeedUnlock 27 | */ 28 | protected void isNeedUnlock(boolean isNeedUnlock) { 29 | this.isNeedUnlock = isNeedUnlock; 30 | } 31 | 32 | /** 33 | * 模板方法,负责调度基本方法,子类不可实现 34 | */ 35 | public final void use() { 36 | if (isNeedUnlock) { 37 | unlock(); 38 | } else { 39 | System.out.println("========锁坏了,不用解锁========"); 40 | } 41 | ride(); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/templatemethod/Client.java: -------------------------------------------------------------------------------- 1 | package android.jet.templatemethod; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/12/9 8 | */ 9 | public class Client { 10 | public static void main(String[] args) { 11 | ScanBicycle scanBicycle = new ScanBicycle(); 12 | scanBicycle.isNeedUnlock(false); 13 | scanBicycle.use(); 14 | 15 | CodeBicycle codeBicycle = new CodeBicycle(); 16 | codeBicycle.isNeedUnlock(true); 17 | codeBicycle.use(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/templatemethod/CodeBicycle.java: -------------------------------------------------------------------------------- 1 | package android.jet.templatemethod; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 7 | * @date 创建时间:2017/12/9 8 | */ 9 | public class CodeBicycle extends AbstractClass { 10 | 11 | @Override 12 | protected void unlock() { 13 | System.out.println("========" + "密码开锁" + "========"); 14 | } 15 | 16 | @Override 17 | protected void ride() { 18 | System.out.println(getClass().getSimpleName() + "骑起来很拉风"); 19 | } 20 | 21 | protected void isNeedUnlock(boolean isNeedUnlock) { 22 | this.isNeedUnlock = isNeedUnlock; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /pattern/src/main/java/android/jet/templatemethod/ScanBicycle.java: -------------------------------------------------------------------------------- 1 | package android.jet.templatemethod; 2 | 3 | /** 4 | * @author liqisi 5 | * @version v1.1.0 6 | * @description 扫码开锁 7 | * @date 创建时间:2017/12/9 8 | */ 9 | public class ScanBicycle extends AbstractClass { 10 | 11 | @Override 12 | protected void unlock() { 13 | System.out.println("========" + "扫码开锁" + "========"); 14 | } 15 | 16 | @Override 17 | protected void ride() { 18 | System.out.println(getClass().getSimpleName() + "骑起来很拉风"); 19 | } 20 | 21 | protected void isNeedUnlock(boolean isNeedUnlock) { 22 | this.isNeedUnlock = isNeedUnlock; 23 | } 24 | 25 | } 26 | --------------------------------------------------------------------------------