└── DesignPatternsDemo └── src └── main └── java └── com └── vectorx ├── uml ├── aggregation │ ├── Mouse.java │ ├── Monitor.java │ ├── Package aggregation.png │ └── Computer.java ├── composition │ ├── Mouse.java │ ├── Monitor.java │ ├── composition.png │ └── Computer.java ├── dependence │ ├── IDCard.java │ ├── Person.java │ ├── Department.java │ ├── PersonDao.java │ ├── Package dependence.png │ └── PersonServiceBean.java ├── association │ ├── unidirectional121 │ │ ├── IDCard.java │ │ ├── Person.java │ │ ├── Package unidirectional121.png │ │ └── unidirectional121.uml │ └── bidirectional121 │ │ ├── Person.java │ │ ├── IDCard.java │ │ ├── Package bidirectional121.png │ │ └── bidirectional121.uml ├── generalization │ ├── PersonServiceBean.java │ ├── Package generalization.png │ ├── DaoSupport.java │ └── generalization.uml └── implementation │ ├── PersonService.java │ ├── Package implementation.png │ ├── PersonServiceBean.java │ └── implementation.uml ├── principle ├── dependencyinversion │ ├── ITV.java │ ├── ChangHongTV.java │ ├── DependencyPass1.java │ ├── DependencyPass2.java │ ├── DependencyPass3.java │ ├── DependencyInversion1.java │ └── DependencyInversion2.java ├── singleresponsibility │ ├── SingleResponsibility3.java │ ├── SingleResponsibility1.java │ └── SingleResponsibility2.java └── liskvosubstitution │ └── LiskvoSubstitution1.java ├── pattern_advance └── t2_factory │ ├── phone │ └── v1 │ │ ├── api │ │ ├── component │ │ │ ├── Chip.java │ │ │ ├── Camera.java │ │ │ ├── Screen.java │ │ │ └── Battery.java │ │ └── factory │ │ │ └── PhoneComponentFactory.java │ │ └── impl │ │ ├── component │ │ ├── chip │ │ │ ├── KylinChip.java │ │ │ └── SnapdragonChip.java │ │ ├── camera │ │ │ ├── DuoCamera.java │ │ │ └── SingleCamera.java │ │ ├── screen │ │ │ ├── IpsScreen.java │ │ │ └── OledScreen.java │ │ └── battery │ │ │ ├── LithiumIonBattery.java │ │ │ └── NickelCadmiumBattery.java │ │ └── factory │ │ └── X3PhoneComponentFactory.java │ └── vegetable │ ├── v1 │ ├── Cucumber.java │ ├── GreenPeper.java │ └── ChineseCabbage.java │ ├── v2 │ ├── Vegetable.java │ ├── VegetableType.java │ ├── Carrot.java │ ├── Radish.java │ ├── Cucumber.java │ ├── GreenPeper.java │ ├── ChineseCabbage.java │ └── VegetableShed.java │ └── v3 │ ├── vegetable │ ├── Vegetable.java │ ├── Carrot.java │ ├── Pumpkin.java │ ├── Radish.java │ ├── Cucumber.java │ ├── GreenPeper.java │ ├── Waxgourd.java │ └── ChineseCabbage.java │ └── shed │ ├── VegetableShed.java │ ├── CarrotShed.java │ ├── RadishShed.java │ ├── PumpkinShed.java │ ├── CucumberShed.java │ ├── WaxgourdShed.java │ ├── GreenPeperShed.java │ └── ChineseCabbageShed.java └── pattern ├── t5_adapter ├── type01_classadapter │ ├── IVoltage5V.java │ ├── Client.java │ ├── Voltage220V.java │ ├── Phone.java │ └── VoltageAdapter.java ├── type02_objectadapter │ ├── IVoltage5V.java │ ├── Client.java │ ├── Voltage220V.java │ ├── Phone.java │ └── VoltageAdapter.java ├── springmvcanalyze │ ├── controller │ │ ├── Controller.java │ │ ├── HttpController.java │ │ ├── SimpleController.java │ │ └── AnnotationController.java │ ├── adapter │ │ ├── HandlerAdapter.java │ │ ├── HttpHandlerAdapter.java │ │ ├── SimpleHandlerAdapter.java │ │ └── AnnotationHandlerAdapter.java │ └── Client.java └── type03_interfaceadapter │ ├── Interface4.java │ ├── AbsAdapter.java │ └── Client.java ├── t10_flyweight ├── Type.java ├── Website.java ├── User.java ├── ConcreteWebsite.java ├── WebsiteFactory.java ├── FlyweightInInteger.java └── Client.java ├── t11_proxy ├── staticproxy │ ├── ITeacherDao.java │ ├── TeacherDao.java │ ├── Client.java │ └── TeacherDaoProxy.java ├── dynamicproxy │ ├── ITeacherDao.java │ ├── TeacherDao.java │ ├── Client.java │ └── TeacherFactory.java └── cglibproxy │ ├── TeacherDao.java │ └── Client.java ├── t13_command ├── Command.java ├── NonCommand.java ├── TVReceiver.java ├── LightReceiver.java ├── TVOffCommand.java ├── TVOnCommand.java ├── LightOnCommand.java ├── LightOffCommand.java ├── Client.java └── RemoteController.java ├── t14_visitor ├── Person.java ├── Man.java ├── Action.java ├── Woman.java ├── Fail.java ├── Wait.java ├── Success.java ├── ObjectStructure.java └── Client.java ├── t21_strategy ├── improve │ ├── fly │ │ ├── FlyBehavior.java │ │ ├── BadFlyBehavior.java │ │ ├── GoodFlyBehavior.java │ │ └── NoFlyBehavior.java │ ├── swim │ │ ├── SwimBehavior.java │ │ ├── CanSwimHehavior.java │ │ └── NoSwimHehavior.java │ ├── quark │ │ ├── QuarkBehavior.java │ │ ├── NoQuarkBehavior.java │ │ ├── GagaQuarkBehavior.java │ │ └── GegeQuarkBehavior.java │ ├── duck │ │ ├── ToyDuck.java │ │ ├── PekingDuck.java │ │ └── WildDuck.java │ └── Client.java └── tradition │ ├── WildDuck.java │ ├── PekingDuck.java │ ├── Duck.java │ └── ToyDuck.java ├── t16_observer ├── observer │ ├── Observer.java │ ├── Subject.java │ ├── CurrentConditions.java │ ├── BaiDuWebSite.java │ └── SinaWebSite.java └── tradition │ ├── Client.java │ └── CurrentConditions.java ├── t6_bridge ├── implementor │ ├── Branch.java │ ├── Huawei.java │ ├── Xiaomi.java │ └── iPhone.java ├── abstraction │ ├── Phone.java │ ├── FlipPhone.java │ ├── SlidePhone.java │ └── UprightPhone.java └── client │ └── Client.java ├── t1_singleton ├── type08_enum │ ├── Singleton.java │ └── SingletonTest.java ├── type01_hungrystaticvariable │ ├── Singleton.java │ └── SingletonTest.java ├── type03_lazyunsafe │ ├── SingletonTest.java │ └── Singleton.java ├── type02_hungrystaticblock │ ├── Singleton.java │ └── SingletonTest.java ├── type06_doublecheck │ ├── SingletonTest.java │ └── Singleton.java ├── type07_staticinnerclass │ ├── SingletonTest.java │ └── Singleton.java ├── type04_lazysafe_synchronizationmethod │ ├── SingletonTest.java │ └── Singleton.java └── type05_lazysafe_synchronizationblock │ ├── SingletonTest.java │ └── Singleton.java ├── t20_state ├── State.java ├── lendingplatform │ ├── StateEnum.java │ ├── FinishedState.java │ ├── PaidState.java │ ├── AuditedState.java │ ├── NotPaidState.java │ ├── PublishedState.java │ ├── GeneratedState.java │ ├── Client.java │ ├── State.java │ └── AbstractState.java ├── DispenseOutState.java ├── Client.java ├── DispenseState.java ├── NoRaffleState.java └── CanRaffleState.java ├── t2_factory └── pizzastore │ ├── trandition │ ├── order │ │ └── PizzaStore.java │ └── pizza │ │ ├── CheesePizza.java │ │ ├── GreekPizza.java │ │ ├── PepperPizza.java │ │ └── Pizza.java │ ├── staticfactory │ ├── order │ │ ├── PizzaStore.java │ │ ├── PizzaFactory.java │ │ └── OrderPizza.java │ └── pizza │ │ ├── CheesePizza.java │ │ ├── GreekPizza.java │ │ ├── PepperPizza.java │ │ └── Pizza.java │ ├── simplefactory │ ├── order │ │ ├── PizzaStore.java │ │ ├── PizzaFactory.java │ │ └── OrderPizza.java │ └── pizza │ │ ├── CheesePizza.java │ │ ├── GreekPizza.java │ │ ├── PepperPizza.java │ │ └── Pizza.java │ ├── abstractfactory │ ├── pizzafactory │ │ ├── AbsPizzaFactory.java │ │ ├── BJPizzaFactory.java │ │ └── LDPizzaFactory.java │ ├── pizza │ │ ├── BJCheesePizza.java │ │ ├── BJPepperPizza.java │ │ ├── LDCheesePizza.java │ │ ├── LDPepperPizza.java │ │ └── Pizza.java │ └── order │ │ └── PizzaStore.java │ └── factorymethod │ ├── pizza │ ├── BJCheesePizza.java │ ├── BJPepperPizza.java │ ├── LDCheesePizza.java │ ├── LDPepperPizza.java │ └── Pizza.java │ └── order │ ├── PizzaStore.java │ ├── BJOrderPizza.java │ ├── LDOrderPizza.java │ └── OrderPizza.java ├── t15_iterator ├── College.java ├── Department.java ├── Client.java ├── InfoCollegeIterator.java ├── ComputerCollegeIterator.java ├── InfoCollege.java ├── ComputerCollege.java └── OutPutImpl.java ├── t7_decorator ├── concretecomponent │ ├── Decaf.java │ ├── Espresso.java │ ├── LongBlack.java │ ├── ShortBlack.java │ └── Coffee.java ├── concreatedecorator │ ├── Milk.java │ ├── Soy.java │ └── Chocolate.java ├── decorator │ └── Decorator.java ├── component │ └── Drink.java └── client │ └── CoffeeBar.java ├── t8_composite ├── Major.java ├── OrganizationComponent.java ├── University.java ├── College.java └── Client.java ├── t17_mediator ├── Mediator.java ├── Colleague.java ├── Alarm.java ├── CoffeeMachine.java ├── Client.java ├── TV.java └── Curtain.java ├── t18_memento ├── game │ ├── Caretaker.java │ ├── Memento.java │ ├── GameRole.java │ └── Client.java └── theory │ ├── Memento.java │ ├── Caretaker.java │ ├── Originator.java │ └── Client.java ├── t3_prototype ├── trandition │ ├── Client.java │ ├── trandition.uml │ └── Sheep.java ├── improve │ ├── Client.java │ └── improve.uml ├── deepclone2 │ └── DeepClonableTarget.java └── deepclone1 │ ├── DeepClonableTarget.java │ └── DeepPrototype.java ├── t4_builder ├── trandition │ ├── AbsHouse.java │ ├── Test.java │ ├── Villa.java │ ├── HighRise.java │ └── NormalRoom.java └── improve │ ├── builder │ ├── HouseBuilder.java │ ├── VillaBuilder.java │ ├── HighRiseBuilder.java │ └── NormalRoomBuilder.java │ ├── director │ └── HouseDirector.java │ ├── product │ └── House.java │ └── BuilderTest.java ├── t12_template ├── PeanutSoyaMilk.java ├── SesameSoyaMilk.java ├── RedBeanSoyaMilk.java ├── PureSoyaMilk.java └── SoyaMilk.java ├── t9_facade ├── Screen.java ├── Popcorn.java ├── Stereo.java ├── Projector.java ├── TheaterLights.java ├── DVDPlayer.java └── Client.java ├── t19_interpreter ├── Expression.java ├── Client2.java ├── AddExpression.java ├── SubExpression.java ├── VarExpression.java └── SymbolExpression.java └── t22_responsibilitychain ├── PurchaseRequest.java ├── ChancellorApprover.java ├── TeachDirectorApprover.java ├── Approver.java ├── DepartmentHeadApprover.java ├── ViceChancellorApprover.java └── Client.java /DesignPatternsDemo/src/main/java/com/vectorx/uml/aggregation/Mouse.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.aggregation; 2 | 3 | public class Mouse { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/composition/Mouse.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.composition; 2 | 3 | public class Mouse { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/IDCard.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.dependence; 2 | 3 | public class IDCard { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/Person.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.dependence; 2 | 3 | public class Person { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/aggregation/Monitor.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.aggregation; 2 | 3 | public class Monitor { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/composition/Monitor.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.composition; 2 | 3 | public class Monitor { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/Department.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.dependence; 2 | 3 | public class Department { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/PersonDao.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.dependence; 2 | 3 | public class PersonDao { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/unidirectional121/IDCard.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.association.unidirectional121; 2 | 3 | public class IDCard { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/ITV.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | public interface ITV { 4 | void play(); 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/generalization/PersonServiceBean.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.generalization; 2 | 3 | public class PersonServiceBean extends DaoSupport { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/implementation/PersonService.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.implementation; 2 | 3 | public interface PersonService { 4 | void delete(Integer id); 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/bidirectional121/Person.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.association.bidirectional121; 2 | 3 | public class Person { 4 | private IDCard card; 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/api/component/Chip.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.api.component; 2 | 3 | public interface Chip { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/bidirectional121/IDCard.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.association.bidirectional121; 2 | 3 | public class IDCard { 4 | private Person person; 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/unidirectional121/Person.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.association.unidirectional121; 2 | 3 | public class Person { 4 | private IDCard card; 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/composition/composition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/composition/composition.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/api/component/Camera.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.api.component; 2 | 3 | public interface Camera { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/api/component/Screen.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.api.component; 2 | 3 | public interface Screen { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/api/component/Battery.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.api.component; 2 | 3 | public interface Battery { 4 | } 5 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v1/Cucumber.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v1; 2 | 3 | /** 4 | * 黄瓜 5 | */ 6 | public class Cucumber { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v1/GreenPeper.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v1; 2 | 3 | /** 4 | * 青椒 5 | */ 6 | public class GreenPeper { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/Package dependence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/Package dependence.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type01_classadapter/IVoltage5V.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type01_classadapter; 2 | 3 | public interface IVoltage5V { 4 | Integer output5V(); 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type02_objectadapter/IVoltage5V.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type02_objectadapter; 2 | 3 | public interface IVoltage5V { 4 | Integer output5V(); 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/Vegetable.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 蔬菜 5 | */ 6 | public interface Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/aggregation/Package aggregation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/aggregation/Package aggregation.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/Type.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | /** 4 | * 内部状态,共享角色 5 | */ 6 | public enum Type { 7 | 新闻, 8 | 博客, 9 | 微信公众号 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/staticproxy/ITeacherDao.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.staticproxy; 2 | 3 | /** 4 | * 代理接口 5 | */ 6 | public interface ITeacherDao { 7 | void teach(); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v1/ChineseCabbage.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v1; 2 | 3 | /** 4 | * 大白菜 5 | */ 6 | public class ChineseCabbage { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/VegetableType.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | public enum VegetableType { 4 | 大白菜, 黄瓜, 青椒, 萝卜, 胡萝卜 5 | } 6 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/composition/Computer.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.composition; 2 | 3 | public class Computer { 4 | private Mouse mouse = new Mouse(); 5 | private Monitor monitor = new Monitor(); 6 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/dynamicproxy/ITeacherDao.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.dynamicproxy; 2 | 3 | /** 4 | * 代理接口 5 | */ 6 | public interface ITeacherDao { 7 | void teach(); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/Command.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 命令角色 5 | */ 6 | public interface Command { 7 | void execute(); 8 | 9 | void undo(); 10 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Person.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 抽象元素 5 | */ 6 | public abstract class Person { 7 | public abstract void accept(Action action); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/controller/Controller.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.controller; 2 | 3 | public interface Controller { 4 | 5 | } 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/Carrot.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 胡萝卜 5 | */ 6 | public class Carrot implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/Radish.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 萝卜 5 | */ 6 | public class Radish implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/generalization/Package generalization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/generalization/Package generalization.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/implementation/Package implementation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/implementation/Package implementation.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/Website.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | /** 4 | * 抽象的享元角色 5 | */ 6 | public abstract class Website { 7 | public abstract void use(User user); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/fly/FlyBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.fly; 2 | 3 | /** 4 | * “飞行”行为策略接口 5 | */ 6 | public interface FlyBehavior { 7 | void fly(); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/Cucumber.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 黄瓜 5 | */ 6 | public class Cucumber implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/GreenPeper.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 青椒 5 | */ 6 | public class GreenPeper implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/swim/SwimBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.swim; 2 | 3 | /** 4 | * ”游泳“行为策略接口 5 | */ 6 | public interface SwimBehavior { 7 | void swim(); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/Vegetable.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 蔬菜 5 | */ 6 | public interface Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/quark/QuarkBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.quark; 2 | 3 | /** 4 | * “叫”行为策略接口 5 | */ 6 | public interface QuarkBehavior { 7 | void quark(); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/ChineseCabbage.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 大白菜 5 | */ 6 | public class ChineseCabbage implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/Carrot.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 胡萝卜 5 | */ 6 | public class Carrot implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/Pumpkin.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 南瓜 5 | */ 6 | public class Pumpkin implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/Radish.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 萝卜 5 | */ 6 | public class Radish implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/Cucumber.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 黄瓜 5 | */ 6 | public class Cucumber implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/GreenPeper.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 青椒 5 | */ 6 | public class GreenPeper implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/Waxgourd.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 冬瓜 5 | */ 6 | public class Waxgourd implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/bidirectional121/Package bidirectional121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/association/bidirectional121/Package bidirectional121.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/vegetable/ChineseCabbage.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable; 2 | 3 | /** 4 | * 大白菜 5 | */ 6 | public class ChineseCabbage implements Vegetable { 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/unidirectional121/Package unidirectional121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vectorxxxx/NOTE_DesignPatterns/HEAD/DesignPatternsDemo/src/main/java/com/vectorx/uml/association/unidirectional121/Package unidirectional121.png -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/observer/Observer.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.observer; 2 | 3 | /** 4 | * 观察者接口 5 | */ 6 | public interface Observer { 7 | void update(Float temperature, Float pressure, Float humidity); 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/implementor/Branch.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.implementor; 2 | 3 | // 行为接口——品牌接口 4 | public interface Branch { 5 | void open(); 6 | 7 | void call(); 8 | 9 | void close(); 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/generalization/DaoSupport.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.generalization; 2 | 3 | public abstract class DaoSupport { 4 | public void save(Object entity) { 5 | } 6 | 7 | public void delete(Object id) { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type08_enum/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type08_enum; 2 | 3 | public enum Singleton { 4 | INSTANCE; 5 | 6 | public void sayHello() { 7 | System.out.println("Hello World"); 8 | } 9 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/State.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state; 2 | 3 | /** 4 | * 抽象状态角色 5 | */ 6 | public interface State { 7 | Boolean reduceMoney(); 8 | 9 | Boolean raffle(); 10 | 11 | Boolean dispensePrize(); 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/StateEnum.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | public enum StateEnum { 4 | GENERATED, 5 | AUDITED, 6 | PUBLISHED, 7 | NOT_PAID, 8 | PAID, 9 | FINISHED; 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/ChangHongTV.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | public class ChangHongTV implements ITV { 4 | @Override 5 | public void play() { 6 | System.out.println("长虹电视机..."); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/trandition/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.trandition.order; 2 | 3 | public class PizzaStore { 4 | public static void main(String[] args) { 5 | new OrderPizza(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Man.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 具体元素 5 | */ 6 | public class Man extends Person { 7 | @Override 8 | public void accept(Action action) { 9 | action.getManResult(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.order; 2 | 3 | public class PizzaStore { 4 | public static void main(String[] args) { 5 | new OrderPizza(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/implementation/PersonServiceBean.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.implementation; 2 | 3 | public class PersonServiceBean implements PersonService { 4 | @Override 5 | public void delete(Integer id) { 6 | System.out.println("delete..."); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Action.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 抽象访问者 5 | */ 6 | public abstract class Action { 7 | public abstract void getManResult(Man man); 8 | 9 | public abstract void getWomanResult(Woman woman); 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/College.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.Iterator; 4 | 5 | /** 6 | * 学院类 7 | */ 8 | public interface College { 9 | String getName(); 10 | 11 | Iterator createIterator(); 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Woman.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 具体元素 5 | */ 6 | public class Woman extends Person { 7 | @Override 8 | public void accept(Action action) { 9 | action.getWomanResult(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/adapter/HandlerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.adapter; 2 | 3 | //定义一个Adapter接口 4 | public interface HandlerAdapter { 5 | boolean supports(Object handler); 6 | 7 | void handle(Object handler); 8 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concretecomponent/Decaf.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concretecomponent; 2 | 3 | // 无因咖啡 4 | public class Decaf extends Coffee { 5 | public Decaf() { 6 | setDesc("无因咖啡"); 7 | setPrice(20.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/cglibproxy/TeacherDao.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.cglibproxy; 2 | 3 | /** 4 | * 被代理对象 5 | */ 6 | public class TeacherDao { 7 | public String teach() { 8 | System.out.println("老师授课中..."); 9 | return "Good"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concretecomponent/Espresso.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concretecomponent; 2 | 3 | // 意大利浓咖 4 | public class Espresso extends Coffee { 5 | public Espresso() { 6 | setDesc("意大利浓咖"); 7 | setPrice(30.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concretecomponent/LongBlack.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concretecomponent; 2 | 3 | // 美式咖啡 4 | public class LongBlack extends Coffee { 5 | public LongBlack() { 6 | setDesc("美式咖啡"); 7 | setPrice(50.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/controller/HttpController.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.controller; 2 | 3 | public class HttpController implements Controller { 4 | public void doHttpHandler() { 5 | System.out.println("http..."); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type01_classadapter/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type01_classadapter; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Phone phone = new Phone(); 6 | phone.charing(new VoltageAdapter()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concretecomponent/ShortBlack.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concretecomponent; 2 | 3 | // 短黑咖啡 4 | public class ShortBlack extends Coffee { 5 | public ShortBlack() { 6 | setDesc("短黑咖啡"); 7 | setPrice(40.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/staticproxy/TeacherDao.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.staticproxy; 2 | 3 | /** 4 | * 被代理对象 5 | */ 6 | public class TeacherDao implements ITeacherDao { 7 | @Override 8 | public void teach() { 9 | System.out.println("老师授课中..."); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/observer/Subject.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.observer; 2 | 3 | /** 4 | * 主体对象接口 5 | */ 6 | public interface Subject { 7 | void registerObserver(Observer o); 8 | 9 | void removeObserver(Observer o); 10 | 11 | void notifyObservers(); 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/controller/SimpleController.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.controller; 2 | 3 | public class SimpleController implements Controller { 4 | public void doSimplerHandler() { 5 | System.out.println("simple..."); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type03_interfaceadapter/Interface4.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type03_interfaceadapter; 2 | 3 | public interface Interface4 { 4 | void operation1(); 5 | 6 | void operation2(); 7 | 8 | void operation3(); 9 | 10 | void operation4(); 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/dynamicproxy/TeacherDao.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.dynamicproxy; 2 | 3 | /** 4 | * 被代理对象 5 | */ 6 | public class TeacherDao implements ITeacherDao { 7 | @Override 8 | public void teach() { 9 | System.out.println("老师授课中..."); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.order; 2 | 3 | public class PizzaStore { 4 | public static void main(String[] args) { 5 | OrderPizza orderPizza = new OrderPizza(new PizzaFactory()); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type02_objectadapter/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type02_objectadapter; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Phone phone = new Phone(); 6 | phone.charing(new VoltageAdapter(new Voltage220V())); 7 | } 8 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/controller/AnnotationController.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.controller; 2 | 3 | public class AnnotationController implements Controller { 4 | public void doAnnotationHandler() { 5 | System.out.println("annotation..."); 6 | } 7 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/NonCommand.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 空命令,什么也不干 5 | */ 6 | public class NonCommand implements Command { 7 | @Override 8 | public void execute() { 9 | 10 | } 11 | 12 | @Override 13 | public void undo() { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/fly/BadFlyBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.fly; 2 | 3 | /** 4 | * “不太会飞”行为策略对象 5 | */ 6 | public class BadFlyBehavior implements FlyBehavior { 7 | @Override 8 | public void fly() { 9 | System.out.println("不太会飞~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/fly/GoodFlyBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.fly; 2 | 3 | /** 4 | * “很会飞”行为策略对象 5 | */ 6 | public class GoodFlyBehavior implements FlyBehavior { 7 | @Override 8 | public void fly() { 9 | System.out.println("很会飞~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/fly/NoFlyBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.fly; 2 | 3 | /** 4 | * “不会飞”行为策略对象 5 | */ 6 | public class NoFlyBehavior implements FlyBehavior { 7 | @Override 8 | public void fly() { 9 | System.out.println("不会飞~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type01_classadapter/Voltage220V.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type01_classadapter; 2 | 3 | public class Voltage220V { 4 | public Integer output220V() { 5 | int src = 220; 6 | System.out.println("电压=" + src + "伏"); 7 | return src; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type02_objectadapter/Voltage220V.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type02_objectadapter; 2 | 3 | public class Voltage220V { 4 | public Integer output220V() { 5 | int src = 220; 6 | System.out.println("电压=" + src + "伏"); 7 | return src; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/swim/CanSwimHehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.swim; 2 | 3 | /** 4 | * “会游泳”行为策略对象 5 | */ 6 | public class CanSwimHehavior implements SwimBehavior { 7 | @Override 8 | public void swim() { 9 | System.out.println("会游泳~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/swim/NoSwimHehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.swim; 2 | 3 | /** 4 | * “不会游泳”行为策略对象 5 | */ 6 | public class NoSwimHehavior implements SwimBehavior { 7 | @Override 8 | public void swim() { 9 | System.out.println("不会游泳~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/TVReceiver.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 接收者 5 | */ 6 | public class TVReceiver { 7 | public void on() { 8 | System.out.println("电视打开了..."); 9 | } 10 | 11 | public void off() { 12 | System.out.println("电视关闭了..."); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/quark/NoQuarkBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.quark; 2 | 3 | /** 4 | * “不会叫”行为策略对象 5 | */ 6 | public class NoQuarkBehavior implements QuarkBehavior { 7 | @Override 8 | public void quark() { 9 | System.out.println("不会叫~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/chip/KylinChip.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.chip; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Chip; 4 | 5 | /** 6 | * 麒麟芯片 7 | */ 8 | public class KylinChip implements Chip { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/LightReceiver.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 接收者 5 | */ 6 | public class LightReceiver { 7 | public void on() { 8 | System.out.println("电灯打开了..."); 9 | } 10 | 11 | public void off() { 12 | System.out.println("电灯关闭了..."); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/FinishedState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 未付款状态类 5 | */ 6 | public class FinishedState extends AbstractState { 7 | @Override 8 | public String getCurrentState() { 9 | return StateEnum.FINISHED.name(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/quark/GagaQuarkBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.quark; 2 | 3 | /** 4 | * “嘎嘎叫”行为策略对象 5 | */ 6 | public class GagaQuarkBehavior implements QuarkBehavior { 7 | @Override 8 | public void quark() { 9 | System.out.println("嘎嘎叫~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/quark/GegeQuarkBehavior.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.quark; 2 | 3 | /** 4 | * “咯咯叫”行为策略对象 5 | */ 6 | public class GegeQuarkBehavior implements QuarkBehavior { 7 | @Override 8 | public void quark() { 9 | System.out.println("咯咯叫~"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/tradition/WildDuck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.tradition; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.duck.Duck; 4 | 5 | public class WildDuck extends Duck { 6 | 7 | @Override 8 | public void display() { 9 | System.out.println("野鸭子"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/camera/DuoCamera.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.camera; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Camera; 4 | 5 | /** 6 | * 双摄摄像头 7 | */ 8 | public class DuoCamera implements Camera { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/screen/IpsScreen.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.screen; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Screen; 4 | 5 | /** 6 | * IPS屏 7 | */ 8 | public class IpsScreen implements Screen { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concretecomponent/Coffee.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concretecomponent; 2 | 3 | import com.vectorx.pattern.t7_decorator.component.Drink; 4 | 5 | public class Coffee extends Drink { 6 | 7 | @Override 8 | public Float cost() { 9 | return super.getPrice(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t8_composite/Major.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t8_composite; 2 | 3 | public class Major extends OrganizationComponent { 4 | 5 | public Major(String name) { 6 | super(name); 7 | } 8 | 9 | @Override 10 | public void print() { 11 | System.out.println(getName()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/chip/SnapdragonChip.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.chip; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Chip; 4 | 5 | /** 6 | * 骁龙芯片 7 | */ 8 | public class SnapdragonChip implements Chip { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/screen/OledScreen.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.screen; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Screen; 4 | 5 | /** 6 | * OLED屏 7 | */ 8 | public class OledScreen implements Screen { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizzafactory/AbsPizzaFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizzafactory; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.Pizza; 4 | 5 | public interface AbsPizzaFactory { 6 | Pizza createPizza(String orderType); 7 | } 8 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/camera/SingleCamera.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.camera; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Camera; 4 | 5 | /** 6 | * 单摄摄像头 7 | */ 8 | public class SingleCamera implements Camera { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/VegetableShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.Vegetable; 4 | 5 | /** 6 | * 菜棚子 7 | */ 8 | public interface VegetableShed { 9 | Vegetable plantVegetable(); 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze; 2 | 3 | import com.vectorx.pattern.t5_adapter.springmvcanalyze.servlet.DispatchServlet; 4 | 5 | public class Client { 6 | public static void main(String[] args) { 7 | new DispatchServlet().doDispatch(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/Mediator.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | /** 4 | * 抽象中介者 5 | */ 6 | public abstract class Mediator { 7 | public abstract void registerColleague(Colleague colleague); 8 | 9 | public abstract void getMsg(Integer state, String name); 10 | 11 | public abstract void sendMsg(); 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/game/Caretaker.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.game; 2 | 3 | public class Caretaker { 4 | private Memento memento; 5 | 6 | public Memento getMemento() { 7 | return memento; 8 | } 9 | 10 | public void setMemento(Memento memento) { 11 | this.memento = memento; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/battery/LithiumIonBattery.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.battery; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Battery; 4 | 5 | /** 6 | * 锂离子电池 7 | */ 8 | public class LithiumIonBattery implements Battery { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/component/battery/NickelCadmiumBattery.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.battery; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Battery; 4 | 5 | /** 6 | * 镍镉电池 7 | */ 8 | public class NickelCadmiumBattery implements Battery { 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/theory/Memento.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.theory; 2 | 3 | /** 4 | * 备忘录对象 5 | */ 6 | public class Memento { 7 | private String state; 8 | 9 | public Memento(String state) { 10 | this.state = state; 11 | } 12 | 13 | public String getState() { 14 | return state; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/pizza/BJCheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza; 2 | 3 | public class BJCheesePizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("BJCheesePizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/pizza/BJPepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza; 2 | 3 | public class BJPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("BJPepperPizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/pizza/LDCheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza; 2 | 3 | public class LDCheesePizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("LDCheesePizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/pizza/LDPepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza; 2 | 3 | public class LDPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("LDPepperPizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/trandition/pizza/CheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.trandition.pizza; 2 | 3 | // 奶酪披萨 4 | public class CheesePizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("CheesePizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/trandition/pizza/GreekPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.trandition.pizza; 2 | 3 | //希腊风味披萨 4 | public class GreekPizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("GreekPizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/trandition/pizza/PepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.trandition.pizza; 2 | 3 | // 奶酪披萨 4 | public class PepperPizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("CheesePizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/trandition/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t3_prototype.trandition; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | for (int i = 0; i < 10; i++) { 6 | Sheep sheep = new Sheep("Tom", 1, "白色"); 7 | System.out.println(sheep); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizza/BJCheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza; 2 | 3 | public class BJCheesePizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("BJCheesePizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizza/BJPepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza; 2 | 3 | public class BJPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("BJPepperPizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizza/LDCheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza; 2 | 3 | public class LDCheesePizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("LDCheesePizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizza/LDPepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza; 2 | 3 | public class LDPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | setName("LDPepperPizza"); 7 | System.out.println(name + " preparing..."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/pizza/CheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza; 2 | 3 | // 奶酪披萨 4 | public class CheesePizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("CheesePizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/pizza/GreekPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza; 2 | 3 | //希腊风味披萨 4 | public class GreekPizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("GreekPizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/pizza/PepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza; 2 | 3 | // 奶酪披萨 4 | public class PepperPizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("PepperPizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/pizza/CheesePizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza; 2 | 3 | // 奶酪披萨 4 | public class CheesePizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("CheesePizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/pizza/GreekPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza; 2 | 3 | //希腊风味披萨 4 | public class GreekPizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("GreekPizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/pizza/PepperPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza; 2 | 3 | // 奶酪披萨 4 | public class PepperPizza extends Pizza { 5 | @Override 6 | public void prepare() { 7 | setName("PepperPizza"); 8 | System.out.println(name + " preparing..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/aggregation/Computer.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.aggregation; 2 | 3 | public class Computer { 4 | private Mouse mouse; 5 | private Monitor monitor; 6 | 7 | public void setMouse(Mouse mouse) { 8 | this.mouse = mouse; 9 | } 10 | 11 | public void setMonitor(Monitor monitor) { 12 | this.monitor = monitor; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type01_classadapter/Phone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type01_classadapter; 2 | 3 | public class Phone { 4 | public void charing(IVoltage5V iVoltage5V) { 5 | if (iVoltage5V.output5V() == 5) { 6 | System.out.println("电压=5伏,正在充电~"); 7 | } else { 8 | System.out.println("电压!=5伏,无法充电~"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Fail.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 具体访问者 5 | */ 6 | public class Fail extends Action { 7 | @Override 8 | public void getManResult(Man man) { 9 | System.out.println("男生给了不通过"); 10 | } 11 | 12 | @Override 13 | public void getWomanResult(Woman woman) { 14 | System.out.println("女生给了不通过"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Wait.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 具体访问者 5 | */ 6 | public class Wait extends Action { 7 | @Override 8 | public void getManResult(Man man) { 9 | System.out.println("男生给了待定"); 10 | } 11 | 12 | @Override 13 | public void getWomanResult(Woman woman) { 14 | System.out.println("女生给了待定"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/improve/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t3_prototype.improve; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Sheep sheep = new Sheep("Tom", 1, "白色"); 6 | for (int i = 0; i < 10; i++) { 7 | Sheep sheep1 = (Sheep) sheep.clone(); 8 | System.out.println(sheep1); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/trandition/AbsHouse.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.trandition; 2 | 3 | public abstract class AbsHouse { 4 | protected abstract void piling(); 5 | 6 | protected abstract void walling(); 7 | 8 | protected abstract void capping(); 9 | 10 | public void build() { 11 | piling(); 12 | walling(); 13 | capping(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type02_objectadapter/Phone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type02_objectadapter; 2 | 3 | public class Phone { 4 | public void charing(IVoltage5V iVoltage5V) { 5 | if (iVoltage5V.output5V() == 5) { 6 | System.out.println("电压=5伏,正在充电~"); 7 | } else { 8 | System.out.println("电压!=5伏,无法充电~"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Success.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | /** 4 | * 具体访问者 5 | */ 6 | public class Success extends Action { 7 | @Override 8 | public void getManResult(Man man) { 9 | System.out.println("男生给了通过"); 10 | } 11 | 12 | @Override 13 | public void getWomanResult(Woman woman) { 14 | System.out.println("女生给了通过"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/trandition/Test.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.trandition; 2 | 3 | public class Test { 4 | public static void main(String[] args) { 5 | AbsHouse house; 6 | house = new NormalRoom(); 7 | house.build(); 8 | house = new HighRise(); 9 | house.build(); 10 | house = new Villa(); 11 | house.build(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t12_template/PeanutSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t12_template; 2 | 3 | /** 4 | * 花生豆浆 5 | */ 6 | public class PeanutSoyaMilk extends SoyaMilk { 7 | public PeanutSoyaMilk() { 8 | System.out.println("============花生豆浆============"); 9 | } 10 | 11 | @Override 12 | protected void addIngredients() { 13 | System.out.println("Step2. 加入上好的花生."); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t12_template/SesameSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t12_template; 2 | 3 | /** 4 | * 芝麻豆浆 5 | */ 6 | public class SesameSoyaMilk extends SoyaMilk { 7 | public SesameSoyaMilk() { 8 | System.out.println("============芝麻豆浆============"); 9 | } 10 | 11 | @Override 12 | protected void addIngredients() { 13 | System.out.println("Step2. 加入上好的芝麻."); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type01_classadapter/VoltageAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type01_classadapter; 2 | 3 | public class VoltageAdapter extends Voltage220V implements IVoltage5V { 4 | @Override 5 | public Integer output5V() { 6 | int src = output220V(); 7 | int dst = src / 44; 8 | System.out.println("电压=" + dst + "伏"); 9 | return dst; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/CarrotShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.Carrot; 4 | 5 | /** 6 | * 胡萝卜棚子 7 | */ 8 | public class CarrotShed implements VegetableShed { 9 | @Override 10 | public Carrot plantVegetable() { 11 | return new Carrot(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/RadishShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.Radish; 4 | 5 | /** 6 | * 萝卜棚子 7 | */ 8 | public class RadishShed implements VegetableShed { 9 | @Override 10 | public Radish plantVegetable() { 11 | return new Radish(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t12_template/RedBeanSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t12_template; 2 | 3 | /** 4 | * 红豆豆浆 5 | */ 6 | public class RedBeanSoyaMilk extends SoyaMilk { 7 | public RedBeanSoyaMilk() { 8 | System.out.println("============红豆豆浆============"); 9 | } 10 | 11 | @Override 12 | protected void addIngredients() { 13 | System.out.println("Step2. 加入上好的红豆."); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/PumpkinShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.Pumpkin; 4 | 5 | /** 6 | * 南瓜棚子 7 | */ 8 | public class PumpkinShed implements VegetableShed { 9 | @Override 10 | public Pumpkin plantVegetable() { 11 | return new Pumpkin(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concreatedecorator/Milk.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concreatedecorator; 2 | 3 | import com.vectorx.pattern.t7_decorator.component.Drink; 4 | import com.vectorx.pattern.t7_decorator.decorator.Decorator; 5 | 6 | public class Milk extends Decorator { 7 | public Milk(Drink drink) { 8 | super(drink); 9 | setDesc("牛奶"); 10 | setPrice(3.0f); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concreatedecorator/Soy.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concreatedecorator; 2 | 3 | import com.vectorx.pattern.t7_decorator.component.Drink; 4 | import com.vectorx.pattern.t7_decorator.decorator.Decorator; 5 | 6 | public class Soy extends Decorator { 7 | public Soy(Drink drink) { 8 | super(drink); 9 | setDesc("豆浆"); 10 | setPrice(4.0f); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/CucumberShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.Cucumber; 4 | 5 | /** 6 | * 黄瓜棚子 7 | */ 8 | public class CucumberShed implements VegetableShed { 9 | @Override 10 | public Cucumber plantVegetable() { 11 | return new Cucumber(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/WaxgourdShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.Waxgourd; 4 | 5 | /** 6 | * 冬瓜棚子 7 | */ 8 | public class WaxgourdShed implements VegetableShed { 9 | @Override 10 | public Waxgourd plantVegetable() { 11 | return new Waxgourd(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/User.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | /** 4 | * 外部状态,非共享角色 5 | */ 6 | public class User { 7 | private String name; 8 | 9 | public User(String name) { 10 | this.name = name; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/dependence/PersonServiceBean.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.uml.dependence; 2 | 3 | public class PersonServiceBean { 4 | private PersonDao personDao; 5 | 6 | public void save(Person person) { 7 | 8 | } 9 | 10 | public IDCard getIDCard(Integer personid) { 11 | return null; 12 | } 13 | 14 | public void modify() { 15 | Department department = new Department(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/Department.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | /** 4 | * 院系类 5 | */ 6 | public class Department { 7 | private String name; 8 | 9 | public Department(String name) { 10 | this.name = name; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/tradition/PekingDuck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.tradition; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.duck.Duck; 4 | 5 | public class PekingDuck extends Duck { 6 | @Override 7 | public void display() { 8 | System.out.println("北京鸭~"); 9 | } 10 | 11 | @Override 12 | public void fly() { 13 | System.out.println("北京鸭不会飞~"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/GreenPeperShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.GreenPeper; 4 | 5 | /** 6 | * 青椒棚子 7 | */ 8 | public class GreenPeperShed implements VegetableShed { 9 | @Override 10 | public GreenPeper plantVegetable() { 11 | return new GreenPeper(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/concreatedecorator/Chocolate.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.concreatedecorator; 2 | 3 | import com.vectorx.pattern.t7_decorator.component.Drink; 4 | import com.vectorx.pattern.t7_decorator.decorator.Decorator; 5 | 6 | public class Chocolate extends Decorator { 7 | public Chocolate(Drink drink) { 8 | super(drink); 9 | setDesc("巧克力"); 10 | setPrice(5.0f); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/Screen.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | // 荧幕 4 | public class Screen { 5 | private static Screen screen = new Screen(); 6 | 7 | public static Screen getInstance() { 8 | return screen; 9 | } 10 | 11 | public void up() { 12 | System.out.println("升起荧幕..."); 13 | } 14 | 15 | public void down() { 16 | System.out.println("拉下荧幕..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/staticproxy/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.staticproxy; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | //创建被代理对象 6 | TeacherDao teacherDao = new TeacherDao(); 7 | //创建代理对象,聚合被代理对象 8 | TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao); 9 | //通过代理对象,调用被代理对象的方法 10 | teacherDaoProxy.teach(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/tradition/Duck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.tradition; 2 | 3 | public abstract class Duck { 4 | public void quark() { 5 | System.out.println("鸭子嘎嘎叫~"); 6 | } 7 | 8 | public void swim() { 9 | System.out.println("鸭子哗哗游~"); 10 | } 11 | 12 | public void fly() { 13 | System.out.println("鸭子腾腾飞~"); 14 | } 15 | 16 | public abstract void display(); 17 | } 18 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/PaidState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 未付款状态类 5 | */ 6 | public class PaidState extends AbstractState { 7 | @Override 8 | public void feedback(Context context) { 9 | context.setState(new FinishedState()); 10 | } 11 | 12 | @Override 13 | public String getCurrentState() { 14 | return StateEnum.PAID.name(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t19_interpreter/Expression.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t19_interpreter; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 抽象表达式类 7 | */ 8 | public abstract class Expression { 9 | /** 10 | * a + b - c 11 | * 解释公式和数值,key就是公式(表达式)参数[a, b, c],value就是具体值 12 | * HashMap{a=10, b=20} 13 | * 14 | * @param var 15 | * @return 16 | */ 17 | public abstract int interpret(Map var); 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type01_hungrystaticvariable/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type01_hungrystaticvariable; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、类的内部创建对象 9 | private static final Singleton instance = new Singleton(); 10 | 11 | // 3、向外暴露一个静态的公共方法 12 | public static Singleton getInstance() { 13 | return instance; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v3/shed/ChineseCabbageShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v3.shed; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.vegetable.v3.vegetable.ChineseCabbage; 4 | 5 | /** 6 | * 大白菜棚子 7 | */ 8 | public class ChineseCabbageShed implements VegetableShed { 9 | @Override 10 | public ChineseCabbage plantVegetable() { 11 | return new ChineseCabbage(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/AuditedState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 已审核状态类 5 | */ 6 | public class AuditedState extends AbstractState { 7 | @Override 8 | public void releasePricing(Context context) { 9 | context.setState(new PublishedState()); 10 | } 11 | 12 | @Override 13 | public String getCurrentState() { 14 | return StateEnum.AUDITED.name(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/ConcreteWebsite.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | /** 4 | * 具体的享元角色 5 | */ 6 | public class ConcreteWebsite extends Website { 7 | 8 | private Type type; 9 | 10 | public ConcreteWebsite(Type type) { 11 | this.type = type; 12 | } 13 | 14 | @Override 15 | public void use(User user) { 16 | System.out.println("网站正在使用中:类型为" + type.name() + ",使用者为" + user.getName()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/decorator/Decorator.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.decorator; 2 | 3 | import com.vectorx.pattern.t7_decorator.component.Drink; 4 | 5 | //装饰者 6 | public class Decorator extends Drink { 7 | private Drink drink; 8 | 9 | public Decorator(Drink drink) { 10 | this.drink = drink; 11 | } 12 | 13 | @Override 14 | public Float cost() { 15 | return super.getPrice() + drink.cost(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type03_interfaceadapter/AbsAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type03_interfaceadapter; 2 | 3 | public abstract class AbsAdapter implements Interface4 { 4 | @Override 5 | public void operation1() { 6 | } 7 | 8 | @Override 9 | public void operation2() { 10 | } 11 | 12 | @Override 13 | public void operation3() { 14 | } 15 | 16 | @Override 17 | public void operation4() { 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type03_interfaceadapter/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type03_interfaceadapter; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | AbsAdapter absAdapter = new AbsAdapter() { 6 | @Override 7 | public void operation1() { 8 | System.out.println("调用operation1方法"); 9 | } 10 | }; 11 | absAdapter.operation1(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/trandition/Villa.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.trandition; 2 | 3 | public class Villa extends AbsHouse { 4 | @Override 5 | protected void piling() { 6 | System.out.println("别墅打桩..."); 7 | } 8 | 9 | @Override 10 | protected void walling() { 11 | System.out.println("别墅砌墙..."); 12 | } 13 | 14 | @Override 15 | protected void capping() { 16 | System.out.println("别墅封顶..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t12_template/PureSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t12_template; 2 | 3 | /** 4 | * 纯豆浆 5 | */ 6 | public class PureSoyaMilk extends SoyaMilk { 7 | public PureSoyaMilk() { 8 | System.out.println("============纯豆浆============"); 9 | } 10 | 11 | @Override 12 | protected void addIngredients() { 13 | // 空实现即可 14 | } 15 | 16 | @Override 17 | protected Boolean customAddIngredients() { 18 | return false; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/trandition/HighRise.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.trandition; 2 | 3 | public class HighRise extends AbsHouse { 4 | @Override 5 | protected void piling() { 6 | System.out.println("高楼打桩..."); 7 | } 8 | 9 | @Override 10 | protected void walling() { 11 | System.out.println("高楼砌墙..."); 12 | } 13 | 14 | @Override 15 | protected void capping() { 16 | System.out.println("高楼封顶..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/implementor/Huawei.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.implementor; 2 | 3 | // 行为实现类——华为品牌 4 | public class Huawei implements Branch { 5 | @Override 6 | public void open() { 7 | System.out.println("华为手机开机"); 8 | } 9 | 10 | @Override 11 | public void call() { 12 | System.out.println("华为手机打电话"); 13 | } 14 | 15 | @Override 16 | public void close() { 17 | System.out.println("华为手机关机"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/implementor/Xiaomi.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.implementor; 2 | 3 | // 行为实现类——小米品牌 4 | public class Xiaomi implements Branch { 5 | @Override 6 | public void open() { 7 | System.out.println("小米手机开机"); 8 | } 9 | 10 | @Override 11 | public void call() { 12 | System.out.println("小米手机打电话"); 13 | } 14 | 15 | @Override 16 | public void close() { 17 | System.out.println("小米手机关机"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/implementor/iPhone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.implementor; 2 | 3 | // 行为实现类——苹果品牌 4 | public class iPhone implements Branch { 5 | @Override 6 | public void open() { 7 | System.out.println("苹果手机开机"); 8 | } 9 | 10 | @Override 11 | public void call() { 12 | System.out.println("苹果手机打电话"); 13 | } 14 | 15 | @Override 16 | public void close() { 17 | System.out.println("苹果手机关机"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/builder/HouseBuilder.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve.builder; 2 | 3 | 4 | import com.vectorx.pattern.t4_builder.improve.product.House; 5 | 6 | public abstract class HouseBuilder { 7 | private House house = new House(); 8 | 9 | public abstract void piling(); 10 | 11 | public abstract void walling(); 12 | 13 | public abstract void capping(); 14 | 15 | public House build() { 16 | return house; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/trandition/NormalRoom.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.trandition; 2 | 3 | public class NormalRoom extends AbsHouse { 4 | @Override 5 | protected void piling() { 6 | System.out.println("普通房打桩..."); 7 | } 8 | 9 | @Override 10 | protected void walling() { 11 | System.out.println("普通房砌墙..."); 12 | } 13 | 14 | @Override 15 | protected void capping() { 16 | System.out.println("普通房封顶..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/builder/VillaBuilder.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve.builder; 2 | 3 | public class VillaBuilder extends HouseBuilder { 4 | @Override 5 | public void piling() { 6 | System.out.println("别墅打桩..."); 7 | } 8 | 9 | @Override 10 | public void walling() { 11 | System.out.println("别墅砌墙..."); 12 | } 13 | 14 | @Override 15 | public void capping() { 16 | System.out.println("别墅封顶..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/theory/Caretaker.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.theory; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 守护者对象 8 | */ 9 | public class Caretaker { 10 | private List mementoList = new ArrayList<>(); 11 | 12 | public void addMemento(Memento memento) { 13 | mementoList.add(memento); 14 | } 15 | 16 | public Memento getMemento(Integer index) { 17 | return mementoList.get(index); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/builder/HighRiseBuilder.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve.builder; 2 | 3 | public class HighRiseBuilder extends HouseBuilder { 4 | @Override 5 | public void piling() { 6 | System.out.println("高楼打桩..."); 7 | } 8 | 9 | @Override 10 | public void walling() { 11 | System.out.println("高楼砌墙..."); 12 | } 13 | 14 | @Override 15 | public void capping() { 16 | System.out.println("高楼封顶..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/TVOffCommand.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 具体的命令角色 5 | */ 6 | public class TVOffCommand implements Command { 7 | /** 8 | * 接收者 9 | */ 10 | private TVReceiver tv; 11 | 12 | public TVOffCommand(TVReceiver tv) { 13 | this.tv = tv; 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | tv.off(); 19 | } 20 | 21 | @Override 22 | public void undo() { 23 | tv.on(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/TVOnCommand.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 具体的命令角色 5 | */ 6 | public class TVOnCommand implements Command { 7 | /** 8 | * 接收者 9 | */ 10 | private TVReceiver tv; 11 | 12 | public TVOnCommand(TVReceiver tv) { 13 | this.tv = tv; 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | tv.on(); 19 | } 20 | 21 | @Override 22 | public void undo() { 23 | tv.off(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type03_lazyunsafe/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type03_lazyunsafe; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/builder/NormalRoomBuilder.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve.builder; 2 | 3 | public class NormalRoomBuilder extends HouseBuilder { 4 | @Override 5 | public void piling() { 6 | System.out.println("普通房打桩..."); 7 | } 8 | 9 | @Override 10 | public void walling() { 11 | System.out.println("普通房砌墙..."); 12 | } 13 | 14 | @Override 15 | public void capping() { 16 | System.out.println("普通房封顶..."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type02_hungrystaticblock/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type02_hungrystaticblock; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、类的内部声明对象 9 | private static Singleton instance; 10 | 11 | // 3、在静态代码块中创建对象 12 | static { 13 | instance = new Singleton(); 14 | } 15 | 16 | // 4、向外暴露一个静态的公共方法 17 | public static Singleton getInstance() { 18 | return instance; 19 | } 20 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type06_doublecheck/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type06_doublecheck; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type03_lazyunsafe/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type03_lazyunsafe; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、类的内部声明对象 9 | private static Singleton instance; 10 | 11 | // 3、向外暴露一个静态的公共方法,当使用到该方法时,才去创建instance 12 | public static Singleton getInstance() { 13 | if (instance == null) { 14 | instance = new Singleton(); 15 | } 16 | return instance; 17 | } 18 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/cglibproxy/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.cglibproxy; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | //创建目标对象 6 | TeacherDao teacherDao = new TeacherDao(); 7 | //通过代理工厂创建代理对象 8 | TeacherDao proxyInstance = (TeacherDao) new ProxyFactory(teacherDao).getProxyInstance(); 9 | //通过代理对象调用目标对象方法 10 | String retVal = proxyInstance.teach(); 11 | System.out.println("retVal=" + retVal); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/Colleague.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | /** 4 | * 抽象同事类 5 | */ 6 | public abstract class Colleague { 7 | private Mediator mediator; 8 | 9 | public Colleague(Mediator mediator) { 10 | this.mediator = mediator; 11 | } 12 | 13 | public Mediator getMediator() { 14 | return this.mediator; 15 | } 16 | 17 | public void sendMsg(Integer state) { 18 | this.getMediator().getMsg(state, this.getClass().getSimpleName()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type02_hungrystaticblock/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type02_hungrystaticblock; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type07_staticinnerclass/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type07_staticinnerclass; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/PurchaseRequest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | /** 4 | * 采购申请类 5 | */ 6 | public class PurchaseRequest { 7 | private Integer id; 8 | private Float price; 9 | 10 | public PurchaseRequest(Integer id, Float price) { 11 | this.id = id; 12 | this.price = price; 13 | } 14 | 15 | public Integer getId() { 16 | return id; 17 | } 18 | 19 | public Float getPrice() { 20 | return price; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type01_hungrystaticvariable/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type01_hungrystaticvariable; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type07_staticinnerclass/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type07_staticinnerclass; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、定义一个静态内部类,内部定义当前类的静态属性 9 | private static class SingletonInstance { 10 | private static final Singleton INSTANCE = new Singleton(); 11 | } 12 | 13 | // 3、向外暴露一个静态的公共方法 14 | public static Singleton getInstance() { 15 | return SingletonInstance.INSTANCE; 16 | } 17 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/LightOnCommand.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 具体的命令角色 5 | */ 6 | public class LightOnCommand implements Command{ 7 | /** 8 | * 接收者 9 | */ 10 | private LightReceiver light; 11 | 12 | public LightOnCommand(LightReceiver light) { 13 | this.light = light; 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | light.on(); 19 | } 20 | 21 | @Override 22 | public void undo() { 23 | light.off(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/Popcorn.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | // 爆米花 4 | public class Popcorn { 5 | private static Popcorn popcorn = new Popcorn(); 6 | 7 | public static Popcorn getInstance() { 8 | return popcorn; 9 | } 10 | 11 | public void on() { 12 | System.out.println("打开爆米花机器..."); 13 | } 14 | 15 | public void off() { 16 | System.out.println("关闭爆米花机器..."); 17 | } 18 | 19 | public void pop() { 20 | System.out.println("取出爆米花..."); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/staticproxy/TeacherDaoProxy.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.staticproxy; 2 | 3 | /** 4 | * 代理对象 5 | */ 6 | public class TeacherDaoProxy implements ITeacherDao { 7 | private ITeacherDao iteacherDao; 8 | 9 | public TeacherDaoProxy(ITeacherDao iteacherDao) { 10 | this.iteacherDao = iteacherDao; 11 | } 12 | 13 | @Override 14 | public void teach() { 15 | System.out.println("准备授课..."); 16 | iteacherDao.teach(); 17 | System.out.println("结束授课..."); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/LightOffCommand.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 具体的命令角色 5 | */ 6 | public class LightOffCommand implements Command { 7 | /** 8 | * 接收者 9 | */ 10 | private LightReceiver light; 11 | 12 | public LightOffCommand(LightReceiver light) { 13 | this.light = light; 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | light.off(); 19 | } 20 | 21 | @Override 22 | public void undo() { 23 | light.on(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type04_lazysafe_synchronizationmethod/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type04_lazysafe_synchronizationmethod; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type05_lazysafe_synchronizationblock/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type05_lazysafe_synchronizationblock; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.getInstance(); 6 | Singleton instance2 = Singleton.getInstance(); 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type08_enum/SingletonTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type08_enum; 2 | 3 | public class SingletonTest { 4 | public static void main(String[] args) { 5 | Singleton instance1 = Singleton.INSTANCE; 6 | Singleton instance2 = Singleton.INSTANCE; 7 | System.out.println(instance1 == instance2); // true 8 | System.out.println(instance1.hashCode() + ", " + instance2.hashCode()); // 1735600054, 1735600054 9 | instance1.sayHello(); 10 | instance2.sayHello(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/Stereo.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | // 立体声 4 | public class Stereo { 5 | private static Stereo stereo = new Stereo(); 6 | 7 | public static Stereo getInstance() { 8 | return stereo; 9 | } 10 | 11 | public void on() { 12 | System.out.println("打开立体声..."); 13 | } 14 | 15 | public void off() { 16 | System.out.println("关闭立体声..."); 17 | } 18 | 19 | public void setVolume(Integer volume) { 20 | System.out.println("立体声音量+" + volume + "..."); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/abstraction/Phone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.abstraction; 2 | 3 | import com.vectorx.pattern.t6_bridge.implementor.Branch; 4 | 5 | // 桥接类——手机抽象类 6 | public abstract class Phone { 7 | private Branch branch; 8 | 9 | public Phone(Branch branch) { 10 | this.branch = branch; 11 | } 12 | 13 | public void open() { 14 | branch.open(); 15 | } 16 | 17 | public void call() { 18 | branch.call(); 19 | } 20 | 21 | public void close() { 22 | branch.close(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type04_lazysafe_synchronizationmethod/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type04_lazysafe_synchronizationmethod; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、类的内部声明对象 9 | private static Singleton instance; 10 | 11 | // 3、向外暴露一个静态的公共方法,加入同步处理的代码,解决线程安全问题 12 | public static synchronized Singleton getInstance() { 13 | if (instance == null) { 14 | instance = new Singleton(); 15 | } 16 | return instance; 17 | } 18 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/adapter/HttpHandlerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.adapter; 2 | 3 | import com.vectorx.pattern.t5_adapter.springmvcanalyze.controller.HttpController; 4 | 5 | public class HttpHandlerAdapter implements HandlerAdapter { 6 | @Override 7 | public void handle(Object handler) { 8 | ((HttpController) handler).doHttpHandler(); 9 | } 10 | 11 | @Override 12 | public boolean supports(Object handler) { 13 | return (handler instanceof HttpController); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/dynamicproxy/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.dynamicproxy; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | //创建目标对象 6 | ITeacherDao teacherDao = new TeacherDao(); 7 | //通过代理工厂创建代理对象 8 | ITeacherDao teacherDaoProxy = (ITeacherDao) new TeacherFactory(teacherDao).newProxyInstance(); 9 | //class jdk.proxy1.$Proxy0:内存中生成了代理对象 10 | System.out.println(teacherDaoProxy.getClass()); 11 | //通过代理对象调用目标对象方法 12 | teacherDaoProxy.teach(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/tradition/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.tradition; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | // 创建气象网站对象 6 | CurrentConditions currentConditions = new CurrentConditions(); 7 | // 创建气象数据对象,并传入气象网站对象 8 | WeatherData weatherData = new WeatherData(currentConditions); 9 | // 天气发生变化时,更新最新的气象数据 10 | weatherData.setData(10f, 150f, 40f); 11 | weatherData.setData(15f, 130f, 60f); 12 | weatherData.setData(13f, 160f, 20f); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/NotPaidState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 未付款状态类 5 | */ 6 | public class NotPaidState extends AbstractState { 7 | @Override 8 | public void payMoney(Context context) { 9 | context.setState(new PaidState()); 10 | } 11 | 12 | @Override 13 | public void feedback(Context context) { 14 | context.setState(new FinishedState()); 15 | } 16 | 17 | @Override 18 | public String getCurrentState() { 19 | return StateEnum.NOT_PAID.name(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/adapter/SimpleHandlerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.adapter; 2 | 3 | import com.vectorx.pattern.t5_adapter.springmvcanalyze.controller.SimpleController; 4 | 5 | public class SimpleHandlerAdapter implements HandlerAdapter { 6 | @Override 7 | public void handle(Object handler) { 8 | ((SimpleController) handler).doSimplerHandler(); 9 | } 10 | 11 | @Override 12 | public boolean supports(Object handler) { 13 | return (handler instanceof SimpleController); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/component/Drink.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.component; 2 | 3 | public abstract class Drink { 4 | private String desc; 5 | private Float price; 6 | 7 | public String getDesc() { 8 | return desc; 9 | } 10 | 11 | protected void setDesc(String desc) { 12 | this.desc = desc; 13 | } 14 | 15 | public Float getPrice() { 16 | return price; 17 | } 18 | 19 | protected void setPrice(Float price) { 20 | this.price = price; 21 | } 22 | 23 | public abstract Float cost(); 24 | } 25 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/theory/Originator.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.theory; 2 | 3 | /** 4 | * 源对象 5 | */ 6 | public class Originator { 7 | private String state; 8 | 9 | public String getState() { 10 | return state; 11 | } 12 | 13 | public void setState(String state) { 14 | this.state = state; 15 | } 16 | 17 | public Memento createMementor() { 18 | return new Memento(state); 19 | } 20 | 21 | public void revertStateFromMementor(Memento memento) { 22 | this.state = memento.getState(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t19_interpreter/Client2.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t19_interpreter; 2 | 3 | import org.springframework.expression.Expression; 4 | import org.springframework.expression.spel.standard.SpelExpressionParser; 5 | 6 | public class Client2 { 7 | public static void main(String[] args) { 8 | SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); 9 | Expression expression = spelExpressionParser.parseExpression("10*(2+1)*1+66"); 10 | int result = (Integer) expression.getValue(); 11 | System.out.println(result); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t19_interpreter/AddExpression.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t19_interpreter; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 加法解释器 7 | */ 8 | public class AddExpression extends SymbolExpression { 9 | public AddExpression(Expression left, Expression right) { 10 | super(left, right); 11 | } 12 | 13 | /** 14 | * 处理相加 15 | * 16 | * @param var 17 | * @return 18 | */ 19 | @Override 20 | public int interpret(Map var) { 21 | return super.left.interpret(var) + super.right.interpret(var); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t19_interpreter/SubExpression.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t19_interpreter; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 减法解释器 7 | */ 8 | public class SubExpression extends SymbolExpression { 9 | public SubExpression(Expression left, Expression right) { 10 | super(left, right); 11 | } 12 | 13 | /** 14 | * 处理相减 15 | * 16 | * @param var 17 | * @return 18 | */ 19 | @Override 20 | public int interpret(Map var) { 21 | return super.left.interpret(var) - super.right.interpret(var); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t19_interpreter/VarExpression.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t19_interpreter; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 变量的解释器 7 | */ 8 | public class VarExpression extends Expression { 9 | private String key; 10 | 11 | public VarExpression(String key) { 12 | this.key = key; 13 | } 14 | 15 | /** 16 | * var 就是{a=10, b=20} 17 | * interpret根据变量名称返回对应值 18 | * 19 | * @param var 20 | * @return 21 | */ 22 | @Override 23 | public int interpret(Map var) { 24 | return var.get(key); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/PublishedState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 已发布状态类 5 | */ 6 | public class PublishedState extends AbstractState { 7 | @Override 8 | public void acceptOrder(Context context) { 9 | context.setState(new NotPaidState()); 10 | } 11 | 12 | @Override 13 | public void acceptOrderFail(Context context) { 14 | context.setState(new FinishedState()); 15 | } 16 | 17 | @Override 18 | public String getCurrentState() { 19 | return StateEnum.PUBLISHED.name(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/springmvcanalyze/adapter/AnnotationHandlerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.springmvcanalyze.adapter; 2 | 3 | import com.vectorx.pattern.t5_adapter.springmvcanalyze.controller.AnnotationController; 4 | 5 | public class AnnotationHandlerAdapter implements HandlerAdapter { 6 | @Override 7 | public void handle(Object handler) { 8 | ((AnnotationController) handler).doAnnotationHandler(); 9 | } 10 | 11 | @Override 12 | public boolean supports(Object handler) { 13 | return (handler instanceof AnnotationController); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/WebsiteFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 享元工厂类 8 | */ 9 | public class WebsiteFactory { 10 | private static Map pool = new HashMap<>(); 11 | 12 | public static Website getWebsiteCategory(Type type) { 13 | if (pool.get(type) == null) { 14 | pool.put(type, new ConcreteWebsite(type)); 15 | } 16 | return pool.get(type); 17 | } 18 | 19 | public static Integer getSize() { 20 | return pool.size(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/GeneratedState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 订单生成状态类 5 | */ 6 | public class GeneratedState extends AbstractState { 7 | @Override 8 | public void electronicAudit(Context context) { 9 | context.setState(new AuditedState()); 10 | } 11 | 12 | @Override 13 | public void electronicAuditFail(Context context) { 14 | context.setState(new FinishedState()); 15 | } 16 | 17 | @Override 18 | public String getCurrentState() { 19 | return StateEnum.GENERATED.name(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type05_lazysafe_synchronizationblock/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type05_lazysafe_synchronizationblock; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、类的内部声明对象 9 | private static Singleton instance; 10 | 11 | // 3、向外暴露一个静态的公共方法,加入同步处理的代码块 12 | public static Singleton getInstance() { 13 | if (instance == null) { 14 | synchronized (Singleton.class) { 15 | instance = new Singleton(); 16 | } 17 | } 18 | return instance; 19 | } 20 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.order; 2 | 3 | public class PizzaStore { 4 | public static void main(String[] args) { 5 | OrderPizza orderPizza = null; 6 | String type = "London"; 7 | if ("London".equals(type)) { 8 | orderPizza = new LDOrderPizza(); 9 | } else if ("Beijing".equals(type)) { 10 | orderPizza = new BJOrderPizza(); 11 | } 12 | 13 | if (orderPizza != null) { 14 | orderPizza.orderPizza(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/ObjectStructure.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 对象结构 8 | */ 9 | public class ObjectStructure { 10 | private List personList = new ArrayList<>(); 11 | 12 | public void attach(Person p) { 13 | personList.add(p); 14 | } 15 | 16 | public void detach(Person p) { 17 | personList.remove(p); 18 | } 19 | 20 | public void display(Action action) { 21 | for (Person person : personList) { 22 | person.accept(action); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/trandition/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.trandition.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | public void setName(String name) { 7 | this.name = name; 8 | } 9 | 10 | public abstract void prepare(); 11 | 12 | public void bake() { 13 | System.out.println(name + " baking..."); 14 | } 15 | 16 | public void cut() { 17 | System.out.println(name + " cutting..."); 18 | } 19 | 20 | public void box() { 21 | System.out.println(name + " boxing..."); 22 | } 23 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/game/Memento.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.game; 2 | 3 | public class Memento { 4 | private Integer vit; 5 | private Integer def; 6 | 7 | public Memento(Integer vit, Integer def) { 8 | this.vit = vit; 9 | this.def = def; 10 | } 11 | 12 | public Integer getVit() { 13 | return vit; 14 | } 15 | 16 | public void setVit(Integer vit) { 17 | this.vit = vit; 18 | } 19 | 20 | public Integer getDef() { 21 | return def; 22 | } 23 | 24 | public void setDef(Integer def) { 25 | this.def = def; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | public void setName(String name) { 7 | this.name = name; 8 | } 9 | 10 | public abstract void prepare(); 11 | 12 | public void bake() { 13 | System.out.println(name + " baking..."); 14 | } 15 | 16 | public void cut() { 17 | System.out.println(name + " cutting..."); 18 | } 19 | 20 | public void box() { 21 | System.out.println(name + " boxing..."); 22 | } 23 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | public void setName(String name) { 7 | this.name = name; 8 | } 9 | 10 | public abstract void prepare(); 11 | 12 | public void bake() { 13 | System.out.println(name + " baking..."); 14 | } 15 | 16 | public void cut() { 17 | System.out.println(name + " cutting..."); 18 | } 19 | 20 | public void box() { 21 | System.out.println(name + " boxing..."); 22 | } 23 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | public void setName(String name) { 7 | this.name = name; 8 | } 9 | 10 | public abstract void prepare(); 11 | 12 | public void bake() { 13 | System.out.println(name + " baking..."); 14 | } 15 | 16 | public void cut() { 17 | System.out.println(name + " cutting..."); 18 | } 19 | 20 | public void box() { 21 | System.out.println(name + " boxing..."); 22 | } 23 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/abstraction/FlipPhone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.abstraction; 2 | 3 | import com.vectorx.pattern.t6_bridge.implementor.Branch; 4 | 5 | // 桥接子类——翻盖式手机 6 | public class FlipPhone extends Phone { 7 | public FlipPhone(Branch branch) { 8 | super(branch); 9 | System.out.println("翻盖式手机"); 10 | } 11 | 12 | @Override 13 | public void open() { 14 | super.open(); 15 | } 16 | 17 | @Override 18 | public void call() { 19 | super.call(); 20 | } 21 | 22 | @Override 23 | public void close() { 24 | super.close(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | public void setName(String name) { 7 | this.name = name; 8 | } 9 | 10 | public abstract void prepare(); 11 | 12 | public void bake() { 13 | System.out.println(name + " baking..."); 14 | } 15 | 16 | public void cut() { 17 | System.out.println(name + " cutting..."); 18 | } 19 | 20 | public void box() { 21 | System.out.println(name + " boxing..."); 22 | } 23 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/abstraction/SlidePhone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.abstraction; 2 | 3 | import com.vectorx.pattern.t6_bridge.implementor.Branch; 4 | 5 | // 桥接子类——滑盖式手机 6 | public class SlidePhone extends Phone { 7 | public SlidePhone(Branch branch) { 8 | super(branch); 9 | System.out.println("滑盖式手机"); 10 | } 11 | 12 | @Override 13 | public void open() { 14 | super.open(); 15 | } 16 | 17 | @Override 18 | public void call() { 19 | super.call(); 20 | } 21 | 22 | @Override 23 | public void close() { 24 | super.close(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/Projector.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | // 投影仪 4 | public class Projector { 5 | private static Projector projector = new Projector(); 6 | 7 | public static Projector getInstance() { 8 | return projector; 9 | } 10 | 11 | public void on() { 12 | System.out.println("打开投影仪..."); 13 | } 14 | 15 | public void off() { 16 | System.out.println("关闭投影仪..."); 17 | } 18 | 19 | public void focus() { 20 | System.out.println("投影仪聚焦..."); 21 | } 22 | 23 | public void zoom() { 24 | System.out.println("投影仪放大..."); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/FlyweightInInteger.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | public class FlyweightInInteger { 4 | public static void main(String[] args) { 5 | Integer x = Integer.valueOf(127); 6 | Integer y = new Integer(127); 7 | Integer z = Integer.valueOf(127); 8 | Integer w = new Integer(127); 9 | System.out.println(x.equals(y)); // true 10 | System.out.println(x == y); // false 11 | System.out.println(x == z); // true 12 | System.out.println(w == x); // false 13 | System.out.println(w == y); // false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/tradition/ToyDuck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.tradition; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.duck.Duck; 4 | 5 | public class ToyDuck extends Duck { 6 | @Override 7 | public void display() { 8 | System.out.println("玩具鸭~"); 9 | } 10 | 11 | @Override 12 | public void quark() { 13 | System.out.println("玩具鸭不会叫~"); 14 | } 15 | 16 | @Override 17 | public void swim() { 18 | System.out.println("玩具鸭不会游~"); 19 | } 20 | 21 | @Override 22 | public void fly() { 23 | System.out.println("玩具鸭不会飞~"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/ChancellorApprover.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | /** 4 | * 副校长审批人 5 | */ 6 | public class ChancellorApprover extends Approver { 7 | public ChancellorApprover(String name) { 8 | super(name); 9 | } 10 | 11 | @Override 12 | public void processRequest(PurchaseRequest purchaseRequest) { 13 | if (purchaseRequest.getPrice() > 30000) { 14 | System.out.println("请求编号:" + purchaseRequest.getId() + ",处理人:" + this.name); 15 | } else { 16 | nextApprover.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/abstraction/UprightPhone.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.abstraction; 2 | 3 | import com.vectorx.pattern.t6_bridge.implementor.Branch; 4 | 5 | // 桥接子类——直立式手机 6 | public class UprightPhone extends Phone { 7 | public UprightPhone(Branch branch) { 8 | super(branch); 9 | System.out.println("直立式手机"); 10 | } 11 | 12 | @Override 13 | public void open() { 14 | super.open(); 15 | } 16 | 17 | @Override 18 | public void call() { 19 | super.call(); 20 | } 21 | 22 | @Override 23 | public void close() { 24 | super.close(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/TeachDirectorApprover.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | /** 4 | * 教学主任审批人 5 | */ 6 | public class TeachDirectorApprover extends Approver { 7 | public TeachDirectorApprover(String name) { 8 | super(name); 9 | } 10 | 11 | @Override 12 | public void processRequest(PurchaseRequest purchaseRequest) { 13 | if (purchaseRequest.getPrice() <= 5000) { 14 | System.out.println("请求编号:" + purchaseRequest.getId() + ",处理人:" + this.name); 15 | } else { 16 | nextApprover.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t5_adapter/type02_objectadapter/VoltageAdapter.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t5_adapter.type02_objectadapter; 2 | 3 | public class VoltageAdapter implements IVoltage5V { 4 | private Voltage220V voltage220V; 5 | 6 | public VoltageAdapter(Voltage220V voltage220V) { 7 | this.voltage220V = voltage220V; 8 | } 9 | 10 | @Override 11 | public Integer output5V() { 12 | if (voltage220V == null) { 13 | return 0; 14 | } 15 | int src = voltage220V.output220V(); 16 | int dst = src / 44; 17 | System.out.println("电压=" + dst + "伏"); 18 | return dst; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/TheaterLights.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | // 影院灯光 4 | public class TheaterLights { 5 | private static TheaterLights lights = new TheaterLights(); 6 | 7 | public static TheaterLights getInstance() { 8 | return lights; 9 | } 10 | 11 | public void on() { 12 | System.out.println("打开灯光..."); 13 | } 14 | 15 | public void off() { 16 | System.out.println("关闭灯光..."); 17 | } 18 | 19 | public void dim() { 20 | System.out.println("调暗灯光..."); 21 | } 22 | 23 | public void bright() { 24 | System.out.println("调亮灯光..."); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Client { 7 | public static void main(String[] args) { 8 | List collegeList = new ArrayList<>(); 9 | collegeList.add(new ComputerCollege()); 10 | collegeList.add(new InfoCollege()); 11 | new OutPutImpl().printCollege(collegeList); 12 | //============计算机学院============ 13 | //Java专业 14 | //PHP专业 15 | //Python专业 16 | //============信息学院============ 17 | //信息安全专业 18 | //网络安全专业 19 | //服务器安全专业 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/DependencyPass1.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | import org.junit.Test; 4 | 5 | public class DependencyPass1 { 6 | @Test 7 | public void test() { 8 | IOpenAndClose iOpenAndClose = new OpenAndClose(); 9 | iOpenAndClose.open(new ChangHongTV()); 10 | } 11 | 12 | //方式1:通过接口传递实现依赖 13 | //开关的接口 14 | interface IOpenAndClose { 15 | void open(ITV tv);//抽象方法,接收接口 16 | } 17 | 18 | //实现接口 19 | class OpenAndClose implements IOpenAndClose { 20 | @Override 21 | public void open(ITV tv) { 22 | tv.play(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/Approver.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | /** 4 | * 抽象审批人对象 5 | */ 6 | public abstract class Approver { 7 | protected Approver nextApprover; 8 | protected String name; 9 | 10 | public Approver(String name) { 11 | this.name = name; 12 | } 13 | 14 | /** 15 | * 设置后继者 16 | * 17 | * @param nextApprover 18 | */ 19 | public void setNextApprover(Approver nextApprover) { 20 | this.nextApprover = nextApprover; 21 | } 22 | 23 | /** 24 | * 处理请求的方法 25 | */ 26 | public abstract void processRequest(PurchaseRequest purchaseRequest); 27 | } 28 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/DepartmentHeadApprover.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | /** 4 | * 院长审批人 5 | */ 6 | public class DepartmentHeadApprover extends Approver { 7 | public DepartmentHeadApprover(String name) { 8 | super(name); 9 | } 10 | 11 | @Override 12 | public void processRequest(PurchaseRequest purchaseRequest) { 13 | if (purchaseRequest.getPrice() > 5000 && purchaseRequest.getPrice() <= 10000) { 14 | System.out.println("请求编号:" + purchaseRequest.getId() + ",处理人:" + this.name); 15 | } else { 16 | nextApprover.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/ViceChancellorApprover.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | /** 4 | * 副校长审批人 5 | */ 6 | public class ViceChancellorApprover extends Approver { 7 | public ViceChancellorApprover(String name) { 8 | super(name); 9 | } 10 | 11 | @Override 12 | public void processRequest(PurchaseRequest purchaseRequest) { 13 | if (purchaseRequest.getPrice() > 10000 && purchaseRequest.getPrice() <= 30000) { 14 | System.out.println("请求编号:" + purchaseRequest.getId() + ",处理人:" + this.name); 15 | } else { 16 | nextApprover.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t1_singleton/type06_doublecheck/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t1_singleton.type06_doublecheck; 2 | 3 | public class Singleton { 4 | // 1、构造器私有化 5 | private Singleton() { 6 | } 7 | 8 | // 2、类的内部声明对象,同时用volatile关键字修饰 9 | private static volatile Singleton instance; 10 | 11 | // 3、向外暴露一个静态的公共方法,加入同步处理的代码块,并进行双重判断,解决线程安全问题 12 | public static Singleton getInstance() { 13 | if (instance == null) { 14 | synchronized (Singleton.class) { 15 | if (instance == null) { 16 | instance = new Singleton(); 17 | } 18 | } 19 | } 20 | return instance; 21 | } 22 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/InfoCollegeIterator.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.Iterator; 4 | import java.util.List; 5 | 6 | /** 7 | * 信息学院迭代器类 8 | */ 9 | public class InfoCollegeIterator implements Iterator { 10 | private List departments; 11 | private Integer position = -1; 12 | 13 | public InfoCollegeIterator(List departments) { 14 | this.departments = departments; 15 | } 16 | 17 | @Override 18 | public boolean hasNext() { 19 | return position + 1 < departments.size(); 20 | } 21 | 22 | @Override 23 | public Object next() { 24 | return departments.get(++position); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/ComputerCollegeIterator.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.Iterator; 4 | 5 | /** 6 | * 计算机学院迭代器类 7 | */ 8 | public class ComputerCollegeIterator implements Iterator { 9 | private Department[] departments; 10 | private Integer position = -1; 11 | 12 | public ComputerCollegeIterator(Department[] departments) { 13 | this.departments = departments; 14 | } 15 | 16 | @Override 17 | public boolean hasNext() { 18 | return position + 1 < departments.length && departments[position + 1] != null; 19 | } 20 | 21 | @Override 22 | public Object next() { 23 | return departments[++position]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/director/HouseDirector.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve.director; 2 | 3 | import com.vectorx.pattern.t4_builder.improve.builder.HouseBuilder; 4 | import com.vectorx.pattern.t4_builder.improve.product.House; 5 | 6 | public class HouseDirector { 7 | private HouseBuilder houseBuilder; 8 | 9 | public HouseDirector() { 10 | } 11 | 12 | public void setHouseBuilder(HouseBuilder houseBuilder) { 13 | this.houseBuilder = houseBuilder; 14 | } 15 | 16 | public House buildHouse() { 17 | houseBuilder.piling(); 18 | houseBuilder.walling(); 19 | houseBuilder.capping(); 20 | return houseBuilder.build(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/product/House.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve.product; 2 | 3 | public class House { 4 | private String pile; 5 | private String wall; 6 | private String roof; 7 | 8 | public String getPile() { 9 | return pile; 10 | } 11 | 12 | public void setPile(String pile) { 13 | this.pile = pile; 14 | } 15 | 16 | public String getWall() { 17 | return wall; 18 | } 19 | 20 | public void setWall(String wall) { 21 | this.wall = wall; 22 | } 23 | 24 | public String getRoof() { 25 | return roof; 26 | } 27 | 28 | public void setRoof(String roof) { 29 | this.roof = roof; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/duck/ToyDuck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.duck; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.fly.NoFlyBehavior; 4 | import com.vectorx.pattern.t21_strategy.improve.quark.NoQuarkBehavior; 5 | import com.vectorx.pattern.t21_strategy.improve.swim.NoSwimHehavior; 6 | 7 | /** 8 | * 玩具鸭 9 | */ 10 | public class ToyDuck extends Duck { 11 | public ToyDuck() { 12 | super(); 13 | quarkBehavior = new NoQuarkBehavior(); 14 | swimBehavior = new NoSwimHehavior(); 15 | flyBehavior = new NoFlyBehavior(); 16 | } 17 | 18 | @Override 19 | public void display() { 20 | System.out.println("======玩具鸭======"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/api/factory/PhoneComponentFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.api.factory; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Battery; 4 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Camera; 5 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Chip; 6 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Screen; 7 | 8 | public abstract class PhoneComponentFactory { 9 | public abstract Chip productChip(); 10 | 11 | public abstract Camera productCamera(); 12 | 13 | public abstract Screen productScreen(); 14 | 15 | public abstract Battery productBattery(); 16 | } 17 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/duck/PekingDuck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.duck; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.fly.BadFlyBehavior; 4 | import com.vectorx.pattern.t21_strategy.improve.quark.GagaQuarkBehavior; 5 | import com.vectorx.pattern.t21_strategy.improve.swim.CanSwimHehavior; 6 | 7 | /** 8 | * 北京鸭 9 | */ 10 | public class PekingDuck extends Duck { 11 | public PekingDuck() { 12 | super(); 13 | quarkBehavior = new GagaQuarkBehavior(); 14 | swimBehavior = new CanSwimHehavior(); 15 | flyBehavior = new BadFlyBehavior(); 16 | } 17 | 18 | @Override 19 | public void display() { 20 | System.out.println("======北京鸭======"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/duck/WildDuck.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve.duck; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.fly.GoodFlyBehavior; 4 | import com.vectorx.pattern.t21_strategy.improve.quark.GegeQuarkBehavior; 5 | import com.vectorx.pattern.t21_strategy.improve.swim.CanSwimHehavior; 6 | 7 | /** 8 | * 野鸭子 9 | */ 10 | public class WildDuck extends Duck { 11 | public WildDuck() { 12 | super(); 13 | quarkBehavior = new GegeQuarkBehavior(); 14 | swimBehavior = new CanSwimHehavior(); 15 | flyBehavior = new GoodFlyBehavior(); 16 | } 17 | 18 | @Override 19 | public void display() { 20 | System.out.println("======野鸭子======"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/DVDPlayer.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | // DVD播放器 4 | public class DVDPlayer { 5 | private static DVDPlayer player = new DVDPlayer(); 6 | 7 | public static DVDPlayer getInstance() { 8 | return player; 9 | } 10 | 11 | public void on() { 12 | System.out.println("打开DVD播放器..."); 13 | } 14 | 15 | public void off() { 16 | System.out.println("关闭DVD播放器..."); 17 | } 18 | 19 | public void play() { 20 | System.out.println("播放DVD播放器..."); 21 | } 22 | 23 | public void pause() { 24 | System.out.println("暂停DVD播放器..."); 25 | } 26 | 27 | public void setDvd(String dvd) { 28 | System.out.println("选dvd:" + dvd + "..."); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t14_visitor/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t14_visitor; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | ObjectStructure objectStructure = new ObjectStructure(); 6 | objectStructure.attach(new Man()); 7 | objectStructure.attach(new Woman()); 8 | objectStructure.display(new Success()); 9 | System.out.println("============"); 10 | objectStructure.display(new Fail()); 11 | System.out.println("============"); 12 | objectStructure.display(new Wait()); 13 | //男生给了通过 14 | //女生给了通过 15 | //============ 16 | //男生给了不通过 17 | //女生给了不通过 18 | //============ 19 | //男生给了待定 20 | //女生给了待定 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t8_composite/OrganizationComponent.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t8_composite; 2 | 3 | public abstract class OrganizationComponent { 4 | private String name; 5 | 6 | public OrganizationComponent(String name) { 7 | this.name = name; 8 | } 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | 14 | public void setName(String name) { 15 | this.name = name; 16 | } 17 | 18 | public void add(OrganizationComponent organizationComponent) { 19 | throw new UnsupportedOperationException(); 20 | } 21 | 22 | public void remove(OrganizationComponent organizationComponent) { 23 | throw new UnsupportedOperationException(); 24 | } 25 | 26 | public abstract void print(); 27 | } 28 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t19_interpreter/SymbolExpression.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t19_interpreter; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 抽象运算符号解释器 7 | * 这里每个运算符号,都只和自己左右两个数字有关系, 8 | * 但左右两个数字有可能也是一个解析的结果,无论何种类型,都是Expression类的实现类 9 | */ 10 | public class SymbolExpression extends Expression { 11 | protected Expression left; 12 | protected Expression right; 13 | 14 | public SymbolExpression(Expression left, Expression right) { 15 | this.left = left; 16 | this.right = right; 17 | } 18 | 19 | /** 20 | * 因为SymbolExpression 是让其子类来实现,因此interpreter是一个默认实现 21 | * 22 | * @param var 23 | * @return 24 | */ 25 | @Override 26 | public int interpret(Map var) { 27 | return 0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/Alarm.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | /** 4 | * 闹钟 5 | */ 6 | public class Alarm extends Colleague { 7 | public Alarm(Mediator mediator) { 8 | super(mediator); 9 | this.getMediator().registerColleague(this); 10 | } 11 | 12 | /** 13 | * 闹铃响起 14 | */ 15 | public void openAlarm() { 16 | System.out.println(">>>闹铃响起"); 17 | try { 18 | //模拟闹铃耗时 19 | Thread.sleep(3000); 20 | } catch (InterruptedException e) { 21 | e.printStackTrace(); 22 | } 23 | sendMsg(1); 24 | } 25 | 26 | /** 27 | * 闹铃关闭 28 | */ 29 | public void closeAlarm() { 30 | System.out.println(">>>闹铃关闭"); 31 | sendMsg(0); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/DispenseOutState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state; 2 | 3 | /** 4 | * 奖品领完状态类 5 | */ 6 | public class DispenseOutState implements State { 7 | private RaffleActivity raffleActivity; 8 | 9 | public DispenseOutState(RaffleActivity raffleActivity) { 10 | this.raffleActivity = raffleActivity; 11 | } 12 | 13 | @Override 14 | public Boolean reduceMoney() { 15 | System.out.println("今日奖品已领完,明天再来吧~"); 16 | return false; 17 | } 18 | 19 | @Override 20 | public Boolean raffle() { 21 | System.out.println("今日奖品已领完,明天再来吧~"); 22 | return false; 23 | } 24 | 25 | @Override 26 | public Boolean dispensePrize() { 27 | System.out.println("今日奖品已领完,明天再来吧~"); 28 | return false; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/DependencyPass2.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | import org.junit.Test; 4 | 5 | public class DependencyPass2 { 6 | @Test 7 | public void test() { 8 | IOpenAndClose iOpenAndClose = new OpenAndClose(new ChangHongTV()); 9 | iOpenAndClose.open(); 10 | } 11 | 12 | //方式2:通过构造函数实现依赖 13 | //开关的接口 14 | interface IOpenAndClose { 15 | void open();//抽象方法 16 | } 17 | 18 | //实现接口 19 | class OpenAndClose implements IOpenAndClose { 20 | private ITV tv; // 成员 21 | 22 | public OpenAndClose(ITV tv) { // 构造器 23 | this.tv = tv; 24 | } 25 | 26 | @Override 27 | public void open() { 28 | this.tv.play(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/InfoCollege.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | import java.util.List; 6 | 7 | /** 8 | * 信息学院 9 | */ 10 | public class InfoCollege implements College { 11 | private List departments; 12 | 13 | public InfoCollege() { 14 | departments = new ArrayList<>(); 15 | departments.add(new Department("信息安全专业")); 16 | departments.add(new Department("网络安全专业")); 17 | departments.add(new Department("服务器安全专业")); 18 | } 19 | 20 | @Override 21 | public String getName() { 22 | return "信息学院"; 23 | } 24 | 25 | @Override 26 | public Iterator createIterator() { 27 | return new InfoCollegeIterator(departments); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | RaffleActivity raffleActivity = new RaffleActivity(2); 6 | // 第一次抽奖 7 | System.out.println("======第一次抽奖======"); 8 | raffleActivity.raffle(); 9 | // 第二次抽奖 10 | System.out.println("======第二次抽奖======"); 11 | raffleActivity.raffle(); 12 | // 第三次抽奖 13 | System.out.println("======第三次抽奖======"); 14 | raffleActivity.raffle(); 15 | //======第一次抽奖====== 16 | //已扣除50积分,可以进行抽奖啦~ 17 | //很遗憾,您没有中奖~ 18 | //======第二次抽奖====== 19 | //已扣除50积分,可以进行抽奖啦~ 20 | //恭喜您,中奖了~ 21 | //奖品领取成功~ 22 | //======第三次抽奖====== 23 | //您的积分余额不足~ 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/CoffeeMachine.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | /** 4 | * 咖啡机 5 | */ 6 | public class CoffeeMachine extends Colleague { 7 | public CoffeeMachine(Mediator mediator) { 8 | super(mediator); 9 | this.getMediator().registerColleague(this); 10 | } 11 | 12 | /** 13 | * 煮咖啡 14 | */ 15 | public void makeCoffee() { 16 | System.out.println(">>>煮咖啡中..."); 17 | sendMsg(0); 18 | try { 19 | //模拟煮咖啡耗时 20 | Thread.sleep(3000); 21 | } catch (InterruptedException e) { 22 | e.printStackTrace(); 23 | } 24 | } 25 | 26 | /** 27 | * 煮咖啡完毕 28 | */ 29 | public void completeCoffee() { 30 | System.out.println(">>>咖啡已煮好"); 31 | sendMsg(1); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/ComputerCollege.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.Iterator; 4 | 5 | /** 6 | * 计算机学院 7 | */ 8 | public class ComputerCollege implements College { 9 | private Department[] departments; 10 | private Integer position = 0; 11 | 12 | public ComputerCollege() { 13 | departments = new Department[5]; 14 | departments[position++] = new Department("Java专业"); 15 | departments[position++] = new Department("PHP专业"); 16 | departments[position++] = new Department("Python专业"); 17 | } 18 | 19 | @Override 20 | public String getName() { 21 | return "计算机学院"; 22 | } 23 | 24 | @Override 25 | public Iterator createIterator() { 26 | return new ComputerCollegeIterator(departments); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t10_flyweight/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t10_flyweight; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Website newsWebsite = WebsiteFactory.getWebsiteCategory(Type.新闻); 6 | newsWebsite.use(new User("Tom")); 7 | Website blogWebsite1 = WebsiteFactory.getWebsiteCategory(Type.博客); 8 | blogWebsite1.use(new User("Jerry")); 9 | Website blogWebsite2 = WebsiteFactory.getWebsiteCategory(Type.博客); 10 | blogWebsite2.use(new User("John")); 11 | Website blogWebsite3 = WebsiteFactory.getWebsiteCategory(Type.博客); 12 | blogWebsite3.use(new User("Smith")); 13 | Website wxWebsite = WebsiteFactory.getWebsiteCategory(Type.微信公众号); 14 | wxWebsite.use(new User("Mack")); 15 | System.out.println(WebsiteFactory.getSize()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | //创建中介者 6 | Mediator mediator = new ConcreteMediator(); 7 | 8 | //创建各个同事类,并加入Mediator中介者的Map对象中 9 | Alarm alarm = new Alarm(mediator); 10 | CoffeeMachine coffeeMachine = new CoffeeMachine(mediator); 11 | Curtain curtain = new Curtain(mediator); 12 | TV tv = new TV(mediator); 13 | 14 | //闹钟响起 15 | alarm.openAlarm(); 16 | coffeeMachine.completeCoffee(); 17 | tv.closeTV(); 18 | 19 | //>>>闹铃响起 20 | //>>>闹铃关闭 21 | //>>>煮咖啡中... 22 | //>>>咖啡已煮好 23 | //>>>拉下窗帘... 24 | //>>>打开电视... 25 | //>>>切换频道:101 26 | //>>>关闭电视... 27 | //>>>拉起窗帘... 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/deepclone2/DeepClonableTarget.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t3_prototype.deepclone2; 2 | 3 | import java.io.Serializable; 4 | 5 | public class DeepClonableTarget implements Serializable, Cloneable { 6 | private String cloneName; 7 | private String cloneClass; 8 | 9 | public DeepClonableTarget(String cloneName, String cloneClass) { 10 | this.cloneName = cloneName; 11 | this.cloneClass = cloneClass; 12 | } 13 | 14 | public String getCloneName() { 15 | return cloneName; 16 | } 17 | 18 | public void setCloneName(String cloneName) { 19 | this.cloneName = cloneName; 20 | } 21 | 22 | public String getCloneClass() { 23 | return cloneClass; 24 | } 25 | 26 | public void setCloneClass(String cloneClass) { 27 | this.cloneClass = cloneClass; 28 | } 29 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/DependencyPass3.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | import org.junit.Test; 4 | 5 | public class DependencyPass3 { 6 | @Test 7 | public void test() { 8 | IOpenAndClose iOpenAndClose = new OpenAndClose(); 9 | iOpenAndClose.setTv(new ChangHongTV()); 10 | iOpenAndClose.open(); 11 | } 12 | 13 | //方式3,通过setter方法传递 14 | interface IOpenAndClose { 15 | void open();//抽象方法 16 | 17 | void setTv(ITV tv); 18 | } 19 | 20 | //实现接口 21 | class OpenAndClose implements IOpenAndClose { 22 | private ITV tv; 23 | 24 | @Override 25 | public void setTv(ITV tv) { 26 | this.tv = tv; 27 | } 28 | 29 | @Override 30 | public void open() { 31 | this.tv.play(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/vegetable/v2/VegetableShed.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.vegetable.v2; 2 | 3 | /** 4 | * 菜棚子 5 | */ 6 | public class VegetableShed { 7 | public Vegetable plantVegetable(String type) { 8 | Vegetable vegetable = null; 9 | if (VegetableType.大白菜.name().equals(type)) { 10 | vegetable = new ChineseCabbage(); 11 | } else if (VegetableType.黄瓜.name().equals(type)) { 12 | vegetable = new Cucumber(); 13 | } else if (VegetableType.青椒.name().equals(type)) { 14 | vegetable = new GreenPeper(); 15 | } else if (VegetableType.萝卜.name().equals(type)) { 16 | vegetable = new Radish(); 17 | } else if (VegetableType.胡萝卜.name().equals(type)) { 18 | vegetable = new Carrot(); 19 | } 20 | return vegetable; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t9_facade/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t9_facade; 2 | 3 | 4 | public class Client { 5 | public static void main(String[] args) throws InterruptedException { 6 | HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(); 7 | System.out.println("===========家庭影院初始化============"); 8 | homeTheaterFacade.ready(); 9 | System.out.println("===========家庭影院沉浸式播放============"); 10 | homeTheaterFacade.play(); 11 | Thread.sleep(1000); 12 | System.out.println("===========家庭影院暂停============"); 13 | homeTheaterFacade.pause(); 14 | Thread.sleep(1000); 15 | System.out.println("===========家庭影院沉浸式播放============"); 16 | homeTheaterFacade.play(); 17 | Thread.sleep(1000); 18 | System.out.println("===========家庭影院结束============"); 19 | homeTheaterFacade.end(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/game/GameRole.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.game; 2 | 3 | public class GameRole { 4 | private Integer vit; 5 | private Integer def; 6 | 7 | public Integer getVit() { 8 | return vit; 9 | } 10 | 11 | public void setVit(Integer vit) { 12 | this.vit = vit; 13 | } 14 | 15 | public Integer getDef() { 16 | return def; 17 | } 18 | 19 | public void setDef(Integer def) { 20 | this.def = def; 21 | } 22 | 23 | public Memento createMemento() { 24 | return new Memento(this.vit, this.def); 25 | } 26 | 27 | public void recoverMemento(Memento memento) { 28 | this.vit = memento.getVit(); 29 | this.def = memento.getDef(); 30 | } 31 | 32 | public void display() { 33 | System.out.println("游戏角色当前攻击力:" + this.vit + ",当前防御力:" + this.def); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Context context = new Context(); 6 | context.electronicAudit(context); 7 | context.releasePricing(context); 8 | context.acceptOrder(context); 9 | context.payMoney(context); 10 | 11 | context.electronicAuditFail(context); 12 | context.acceptOrderFail(context); 13 | //当前状态:AUDITED 14 | //当前状态:PUBLISHED 15 | //当前状态:NOT_PAID 16 | //当前状态:PAID 17 | //Exception in thread "main" java.lang.RuntimeException: 操作流程有误 18 | // at com.vectorx.pattern.t20_state.lendingplatform.AbstractState.(AbstractState.java:7) 19 | // at com.vectorx.pattern.t20_state.lendingplatform.Client.main(Client.java:5) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/DependencyInversion1.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | import org.junit.Test; 4 | 5 | public class DependencyInversion1 { 6 | 7 | @Test 8 | public void test() { 9 | Person person = new Person(); 10 | person.receive(new Email()); 11 | } 12 | 13 | /** 14 | * 方式1分析 15 | * 1.简单,比较容易想到 16 | * 2.如果我们获取的对象是微信,短信等等,则新增类,同时 Peron也要增加相应的接收方法 17 | * 3.解决思路: 18 | * 引入一个抽象的接口IReceiver,表示接收者,这样Person类与接口IReceiver发生依赖 19 | * 因为Email,Weixin等等属于接收的范围,他们各自实现IReceiver接口就ok,这样我们就符号依赖倒转原则 20 | */ 21 | class Email { 22 | public String getInfo() { 23 | return "电子邮件信息:Hello World!"; 24 | } 25 | } 26 | 27 | class Person { 28 | public void receive(Email email) { 29 | System.out.println(email.getInfo()); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t15_iterator/OutPutImpl.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t15_iterator; 2 | 3 | import java.util.Iterator; 4 | import java.util.List; 5 | 6 | /** 7 | * 输出类 8 | */ 9 | public class OutPutImpl { 10 | 11 | public OutPutImpl() { 12 | 13 | } 14 | 15 | public void printCollege(List collegeList) { 16 | Iterator iterator = collegeList.iterator(); 17 | while (iterator.hasNext()) { 18 | College college = iterator.next(); 19 | System.out.println("============" + college.getName() + "============"); 20 | printDepartment(college); 21 | } 22 | } 23 | 24 | private void printDepartment(College college) { 25 | Iterator iterator = college.createIterator(); 26 | while (iterator.hasNext()) { 27 | System.out.println(iterator.next().getName()); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/order/BJOrderPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.BJCheesePizza; 4 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.BJPepperPizza; 5 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.Pizza; 6 | 7 | public class BJOrderPizza extends OrderPizza { 8 | @Override 9 | public Pizza createPizza(String orderType) { 10 | Pizza pizza = null; 11 | switch (orderType) { 12 | case "cheese": 13 | pizza = new BJCheesePizza(); 14 | break; 15 | case "pepper": 16 | pizza = new BJPepperPizza(); 17 | break; 18 | default: 19 | break; 20 | } 21 | return pizza; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | // 初始化遥控器 6 | RemoteController remoteController = new RemoteController(); 7 | // 操作电灯 8 | int no = 0; 9 | LightReceiver light = new LightReceiver(); 10 | remoteController.setCommands(no, new LightOnCommand(light), new LightOffCommand(light)); 11 | remoteController.onBtnCommand(no); 12 | remoteController.offBtnCommand(no); 13 | remoteController.undoBtnCommand(); 14 | // 操作电视 15 | no = 1; 16 | TVReceiver tv = new TVReceiver(); 17 | remoteController.setCommands(no, new TVOnCommand(tv), new TVOffCommand(tv)); 18 | remoteController.onBtnCommand(no); 19 | remoteController.offBtnCommand(no); 20 | remoteController.undoBtnCommand(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/order/LDOrderPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.order; 2 | 3 | 4 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.LDCheesePizza; 5 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.LDPepperPizza; 6 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.Pizza; 7 | 8 | public class LDOrderPizza extends OrderPizza { 9 | @Override 10 | public Pizza createPizza(String orderType) { 11 | Pizza pizza = null; 12 | switch (orderType) { 13 | case "cheese": 14 | pizza = new LDCheesePizza(); 15 | break; 16 | case "pepper": 17 | pizza = new LDPepperPizza(); 18 | break; 19 | default: 20 | break; 21 | } 22 | return pizza; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizzafactory.AbsPizzaFactory; 4 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizzafactory.BJPizzaFactory; 5 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizzafactory.LDPizzaFactory; 6 | 7 | public class PizzaStore { 8 | public static void main(String[] args) { 9 | AbsPizzaFactory pizzaFactory = null; 10 | String type = "London"; 11 | if ("London".equals(type)) { 12 | pizzaFactory = new LDPizzaFactory(); 13 | } else if ("Beijing".equals(type)) { 14 | pizzaFactory = new BJPizzaFactory(); 15 | } 16 | OrderPizza orderPizza = new OrderPizza(pizzaFactory); 17 | orderPizza.orderPizza(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/singleresponsibility/SingleResponsibility3.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.singleresponsibility; 2 | 3 | import org.junit.Test; 4 | 5 | public class SingleResponsibility3 { 6 | 7 | @Test 8 | public void test() { 9 | Vehicle vehicle = new Vehicle(); 10 | vehicle.run("汽车"); 11 | vehicle.runWater("轮船"); 12 | vehicle.runAir("飞机"); 13 | } 14 | 15 | /** 16 | * 方式3的分析 17 | * 1.这种修改方法没有对原来的类做大的修改,只是增加方法 18 | * 2.这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责 19 | */ 20 | class Vehicle { 21 | public void run(String type) { 22 | System.out.println(type + "在公路上运行..."); 23 | } 24 | 25 | public void runWater(String type) { 26 | System.out.println(type + "在水面上运行..."); 27 | } 28 | 29 | public void runAir(String type) { 30 | System.out.println(type + "在天空上运行..."); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t8_composite/University.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t8_composite; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class University extends OrganizationComponent { 7 | List organizationComponentList = new ArrayList<>(); 8 | 9 | public University(String name) { 10 | super(name); 11 | } 12 | 13 | @Override 14 | public void add(OrganizationComponent organizationComponent) { 15 | organizationComponentList.add(organizationComponent); 16 | } 17 | 18 | @Override 19 | public void remove(OrganizationComponent organizationComponent) { 20 | organizationComponent.remove(organizationComponent); 21 | } 22 | 23 | @Override 24 | public void print() { 25 | for (OrganizationComponent organizationComponent : organizationComponentList) { 26 | organizationComponent.print(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/singleresponsibility/SingleResponsibility1.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.singleresponsibility; 2 | 3 | import org.junit.Test; 4 | 5 | public class SingleResponsibility1 { 6 | 7 | @Test 8 | public void test() { 9 | Vehicle vehicle = new Vehicle(); 10 | vehicle.run("汽车"); 11 | vehicle.run("轮船"); 12 | vehicle.run("飞机"); 13 | } 14 | 15 | /** 16 | * 方式1的分析 17 | * 1.在方式1的run方法中,违反了单一职责原则 18 | * 2.解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可 19 | */ 20 | class Vehicle { 21 | public void run(String type) { 22 | if ("汽车".equals(type)) { 23 | System.out.println(type + "在公路上运行..."); 24 | } else if ("轮船".equals(type)) { 25 | System.out.println(type + "在水面上运行..."); 26 | } else if ("飞机".equals(type)) { 27 | System.out.println(type + "在天空上运行..."); 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizzafactory/BJPizzaFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizzafactory; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.BJCheesePizza; 4 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.BJPepperPizza; 5 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.Pizza; 6 | 7 | public class BJPizzaFactory implements AbsPizzaFactory { 8 | @Override 9 | public Pizza createPizza(String orderType) { 10 | Pizza pizza = null; 11 | switch (orderType) { 12 | case "cheese": 13 | pizza = new BJCheesePizza(); 14 | break; 15 | case "pepper": 16 | pizza = new BJPepperPizza(); 17 | break; 18 | default: 19 | break; 20 | } 21 | return pizza; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/abstractfactory/pizzafactory/LDPizzaFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizzafactory; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.LDCheesePizza; 4 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.LDPepperPizza; 5 | import com.vectorx.pattern.t2_factory.pizzastore.abstractfactory.pizza.Pizza; 6 | 7 | public class LDPizzaFactory implements AbsPizzaFactory { 8 | @Override 9 | public Pizza createPizza(String orderType) { 10 | Pizza pizza = null; 11 | switch (orderType) { 12 | case "cheese": 13 | pizza = new LDCheesePizza(); 14 | break; 15 | case "pepper": 16 | pizza = new LDPepperPizza(); 17 | break; 18 | default: 19 | break; 20 | } 21 | return pizza; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/TV.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | /** 4 | * 电视机 5 | */ 6 | public class TV extends Colleague { 7 | public TV(Mediator mediator) { 8 | super(mediator); 9 | this.getMediator().registerColleague(this); 10 | } 11 | 12 | /** 13 | * 打开电视 14 | */ 15 | public void openTV() { 16 | System.out.println(">>>打开电视..."); 17 | sendMsg(1); 18 | } 19 | 20 | /** 21 | * 关闭电视 22 | */ 23 | public void closeTV() { 24 | System.out.println(">>>关闭电视..."); 25 | sendMsg(0); 26 | } 27 | 28 | /** 29 | * 切换频道 30 | */ 31 | public void switchChannel(Integer state) { 32 | System.out.println(">>>切换频道:" + state); 33 | sendMsg(state); 34 | try { 35 | //模拟看电视耗时 36 | Thread.sleep(3000); 37 | } catch (InterruptedException e) { 38 | e.printStackTrace(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/observer/CurrentConditions.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.observer; 2 | 3 | /** 4 | * 观察者实现 5 | */ 6 | public class CurrentConditions implements Observer { 7 | private Float temperature; 8 | private Float pressure; 9 | private Float humidity; 10 | 11 | @Override 12 | public void update(Float temperature, Float pressure, Float humidity) { 13 | // 更新最新天气数据 14 | this.temperature = temperature; 15 | this.pressure = pressure; 16 | this.humidity = humidity; 17 | // 展示最新天气数据 18 | display(); 19 | } 20 | 21 | /** 22 | * 公告板展示天气情况 23 | */ 24 | public void display() { 25 | System.out.println("============最新天气============"); 26 | System.out.println("*** 当前温度:" + this.temperature + " ℃ ***"); 27 | System.out.println("*** 当前气压:" + this.pressure + " kPa ***"); 28 | System.out.println("*** 当前湿度:" + this.humidity + " %RH ***"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t17_mediator/Curtain.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t17_mediator; 2 | 3 | /** 4 | * 窗帘 5 | */ 6 | public class Curtain extends Colleague { 7 | public Curtain(Mediator mediator) { 8 | super(mediator); 9 | this.getMediator().registerColleague(this); 10 | } 11 | 12 | /** 13 | * 拉起窗帘 14 | */ 15 | public void upCurtain() { 16 | System.out.println(">>>拉起窗帘..."); 17 | sendMsg(1); 18 | try { 19 | //模拟拉起窗帘耗时 20 | Thread.sleep(3000); 21 | } catch (InterruptedException e) { 22 | e.printStackTrace(); 23 | } 24 | } 25 | 26 | /** 27 | * 拉下窗帘 28 | */ 29 | public void downCurtain() { 30 | System.out.println(">>>拉下窗帘..."); 31 | sendMsg(0); 32 | try { 33 | //模拟拉下窗帘耗时 34 | Thread.sleep(3000); 35 | } catch (InterruptedException e) { 36 | e.printStackTrace(); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t4_builder/improve/BuilderTest.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t4_builder.improve; 2 | 3 | import com.vectorx.pattern.t4_builder.improve.builder.HighRiseBuilder; 4 | import com.vectorx.pattern.t4_builder.improve.builder.NormalRoomBuilder; 5 | import com.vectorx.pattern.t4_builder.improve.builder.VillaBuilder; 6 | import com.vectorx.pattern.t4_builder.improve.director.HouseDirector; 7 | import com.vectorx.pattern.t4_builder.improve.product.House; 8 | 9 | public class BuilderTest { 10 | public static void main(String[] args) { 11 | HouseDirector houseDirector = new HouseDirector(); 12 | House house; 13 | 14 | houseDirector.setHouseBuilder(new NormalRoomBuilder()); 15 | house = houseDirector.buildHouse(); 16 | houseDirector.setHouseBuilder(new HighRiseBuilder()); 17 | house = houseDirector.buildHouse(); 18 | houseDirector.setHouseBuilder(new VillaBuilder()); 19 | house = houseDirector.buildHouse(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t12_template/SoyaMilk.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t12_template; 2 | 3 | /** 4 | * 抽象类 5 | */ 6 | public abstract class SoyaMilk { 7 | /** 8 | * 模板方法,定义为final禁止覆写 9 | */ 10 | public final void make() { 11 | System.out.println(">>>>>>豆浆制作开始<<<<<<"); 12 | useSoyBean(); 13 | if (customAddIngredients()) { 14 | addIngredients(); 15 | } 16 | soak(); 17 | mash(); 18 | System.out.println(">>>>>>豆浆制作结束<<<<<<"); 19 | } 20 | 21 | protected void useSoyBean() { 22 | System.out.println("Step1. 选用上好的黄豆."); 23 | } 24 | 25 | protected abstract void addIngredients(); 26 | 27 | protected void soak() { 28 | System.out.println("Step3. 对黄豆和配料进行水洗浸泡."); 29 | } 30 | 31 | protected void mash() { 32 | System.out.println("Step4. 将充分浸泡过的黄豆和配料放入豆浆机中,开始打豆浆."); 33 | } 34 | 35 | protected Boolean customAddIngredients() { 36 | return true; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/deepclone1/DeepClonableTarget.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t3_prototype.deepclone1; 2 | 3 | import java.io.Serializable; 4 | 5 | public class DeepClonableTarget implements Serializable, Cloneable { 6 | private String cloneName; 7 | private String cloneClass; 8 | 9 | public DeepClonableTarget(String cloneName, String cloneClass) { 10 | this.cloneName = cloneName; 11 | this.cloneClass = cloneClass; 12 | } 13 | 14 | public String getCloneName() { 15 | return cloneName; 16 | } 17 | 18 | public void setCloneName(String cloneName) { 19 | this.cloneName = cloneName; 20 | } 21 | 22 | public String getCloneClass() { 23 | return cloneClass; 24 | } 25 | 26 | public void setCloneClass(String cloneClass) { 27 | this.cloneClass = cloneClass; 28 | } 29 | 30 | @Override 31 | protected Object clone() throws CloneNotSupportedException { 32 | return super.clone(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t8_composite/College.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t8_composite; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class College extends OrganizationComponent { 7 | List organizationComponentList = new ArrayList<>(); 8 | 9 | public College(String name) { 10 | super(name); 11 | } 12 | 13 | @Override 14 | public void add(OrganizationComponent organizationComponent) { 15 | organizationComponentList.add(organizationComponent); 16 | } 17 | 18 | @Override 19 | public void remove(OrganizationComponent organizationComponent) { 20 | organizationComponent.remove(organizationComponent); 21 | } 22 | 23 | @Override 24 | public void print() { 25 | System.out.println("=============" + getName() + "============="); 26 | for (OrganizationComponent organizationComponent : organizationComponentList) { 27 | organizationComponent.print(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/DispenseState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state; 2 | 3 | /** 4 | * 发放奖品状态类 5 | */ 6 | public class DispenseState implements State { 7 | private RaffleActivity raffleActivity; 8 | 9 | public DispenseState(RaffleActivity raffleActivity) { 10 | this.raffleActivity = raffleActivity; 11 | } 12 | 13 | @Override 14 | public Boolean reduceMoney() { 15 | System.out.println("已经进行过抽奖啦!"); 16 | return false; 17 | } 18 | 19 | @Override 20 | public Boolean raffle() { 21 | System.out.println("已经进行过抽奖啦!"); 22 | return false; 23 | } 24 | 25 | @Override 26 | public Boolean dispensePrize() { 27 | if (raffleActivity.getCount() <= 0) { 28 | raffleActivity.setDispenseOutState(); 29 | System.out.println("今日奖品已领完,明天再来吧~"); 30 | return false; 31 | } 32 | raffleActivity.setNoRaffleState(); 33 | System.out.println("奖品领取成功~"); 34 | return true; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/game/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.game; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | System.out.println("======大战前状态======"); 6 | GameRole gameRole = new GameRole(); 7 | gameRole.setVit(100); 8 | gameRole.setDef(100); 9 | Caretaker caretaker = new Caretaker(); 10 | caretaker.setMemento(gameRole.createMemento()); 11 | gameRole.display(); 12 | 13 | System.out.println("======大战后状态======"); 14 | gameRole.setVit(10); 15 | gameRole.setDef(10); 16 | gameRole.display(); 17 | 18 | System.out.println("======从备忘录对象恢复到大战前的状态======"); 19 | gameRole.recoverMemento(caretaker.getMemento()); 20 | gameRole.display(); 21 | 22 | //======大战前状态====== 23 | //游戏角色当前攻击力:100,当前防御力:100 24 | //======大战后状态====== 25 | //游戏角色当前攻击力:10,当前防御力:10 26 | //======从备忘录对象恢复到大战前的状态====== 27 | //游戏角色当前攻击力:100,当前防御力:100 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t7_decorator/client/CoffeeBar.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t7_decorator.client; 2 | 3 | import com.vectorx.pattern.t7_decorator.component.Drink; 4 | import com.vectorx.pattern.t7_decorator.concreatedecorator.Chocolate; 5 | import com.vectorx.pattern.t7_decorator.concreatedecorator.Milk; 6 | import com.vectorx.pattern.t7_decorator.concretecomponent.Espresso; 7 | 8 | public class CoffeeBar { 9 | public static void main(String[] args) { 10 | Drink drink = new Espresso(); 11 | System.out.println("意大利浓咖:" + drink.cost() + "美元"); // 意大利浓咖:30.0美元 12 | 13 | drink = new Milk(drink); 14 | System.out.println("意大利浓咖 + 1份牛奶:" + drink.cost() + "美元"); // 意大利浓咖 + 1份牛奶:33.0美元 15 | 16 | drink = new Chocolate(drink); 17 | System.out.println("意大利浓咖 + 1份牛奶 + 1份巧克力:" + drink.cost() + "美元"); // 意大利浓咖 + 1份牛奶 + 1份巧克力:38.0美元 18 | 19 | drink = new Chocolate(drink); 20 | System.out.println("意大利浓咖 + 1份牛奶 + 2份巧克力:" + drink.cost() + "美元"); // 意大利浓咖 + 1份牛奶 + 2份巧克力:43.0美元 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t8_composite/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t8_composite; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | //大学 6 | OrganizationComponent university = new University("清华大学"); 7 | //学院 8 | OrganizationComponent computerCollege = new College("计算机学院"); 9 | OrganizationComponent infoEngineerCollege = new College("信息工程学院"); 10 | //专业 11 | computerCollege.add(new Major("软件工程")); 12 | computerCollege.add(new Major("网络工程")); 13 | computerCollege.add(new Major("计算机科学与技术")); 14 | infoEngineerCollege.add(new Major("通信工程")); 15 | infoEngineerCollege.add(new Major("信息工程")); 16 | 17 | university.add(computerCollege); 18 | university.add(infoEngineerCollege); 19 | university.print(); 20 | //=============计算机学院============= 21 | //软件工程 22 | //网络工程 23 | //计算机科学与技术 24 | //=============信息工程学院============= 25 | //通信工程 26 | //信息工程 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/NoRaffleState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state; 2 | 3 | /** 4 | * 不能抽奖状态类 5 | */ 6 | public class NoRaffleState implements State { 7 | private RaffleActivity raffleActivity; 8 | // 模拟数据库积分值 9 | private int integral = 100; 10 | 11 | public NoRaffleState(RaffleActivity raffleActivity) { 12 | this.raffleActivity = raffleActivity; 13 | } 14 | 15 | @Override 16 | public Boolean reduceMoney() { 17 | if (integral < 50) { 18 | System.out.println("您的积分余额不足~"); 19 | return false; 20 | } 21 | integral -= 50; 22 | raffleActivity.setCanRaffleState(); 23 | System.out.println("已扣除50积分,可以进行抽奖啦~"); 24 | return true; 25 | } 26 | 27 | @Override 28 | public Boolean raffle() { 29 | System.out.println("当前无法进行抽奖~"); 30 | return false; 31 | } 32 | 33 | @Override 34 | public Boolean dispensePrize() { 35 | System.out.println("当前无法领取奖品~"); 36 | return false; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/order/PizzaFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza.CheesePizza; 4 | import com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza.GreekPizza; 5 | import com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza.PepperPizza; 6 | import com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza.Pizza; 7 | 8 | public class PizzaFactory { 9 | public Pizza createPizza(String orderType) { 10 | Pizza pizza = null; 11 | switch (orderType) { 12 | case "cheese": 13 | pizza = new CheesePizza(); 14 | break; 15 | case "greek": 16 | pizza = new GreekPizza(); 17 | break; 18 | case "pepper": 19 | pizza = new PepperPizza(); 20 | break; 21 | default: 22 | break; 23 | } 24 | return pizza; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/CanRaffleState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state; 2 | 3 | import java.util.Random; 4 | 5 | /** 6 | * 可以抽奖状态类 7 | */ 8 | public class CanRaffleState implements State { 9 | private RaffleActivity raffleActivity; 10 | 11 | public CanRaffleState(RaffleActivity raffleActivity) { 12 | this.raffleActivity = raffleActivity; 13 | } 14 | 15 | @Override 16 | public Boolean reduceMoney() { 17 | System.out.println("已扣除50积分,可以进行抽奖啦~"); 18 | return false; 19 | } 20 | 21 | @Override 22 | public Boolean raffle() { 23 | if (new Random().nextInt(10) == 0) { 24 | raffleActivity.setDispenseState(); 25 | System.out.println("恭喜您,中奖了~"); 26 | return true; 27 | } 28 | raffleActivity.setNoRaffleState(); 29 | System.out.println("很遗憾,您没有中奖~"); 30 | return false; 31 | } 32 | 33 | @Override 34 | public Boolean dispensePrize() { 35 | System.out.println("尚未进行抽奖,无法领取奖品!"); 36 | return false; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/order/PizzaFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza.CheesePizza; 4 | import com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza.GreekPizza; 5 | import com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza.PepperPizza; 6 | import com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza.Pizza; 7 | 8 | public class PizzaFactory { 9 | public static Pizza createPizza(String orderType) { 10 | Pizza pizza = null; 11 | switch (orderType) { 12 | case "cheese": 13 | pizza = new CheesePizza(); 14 | break; 15 | case "greek": 16 | pizza = new GreekPizza(); 17 | break; 18 | case "pepper": 19 | pizza = new PepperPizza(); 20 | break; 21 | default: 22 | break; 23 | } 24 | return pizza; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/generalization/generalization.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | com.vectorx.uml.generalization 5 | 6 | com.vectorx.uml.generalization.DaoSupport 7 | com.vectorx.uml.generalization.PersonServiceBean 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Fields 20 | Inner Classes 21 | Methods 22 | Properties 23 | 24 | All 25 | private 26 | 27 | 28 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/implementation/implementation.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | com.vectorx.uml.implementation 5 | 6 | com.vectorx.uml.implementation.PersonService 7 | com.vectorx.uml.implementation.PersonServiceBean 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Fields 20 | Inner Classes 21 | Methods 22 | Properties 23 | 24 | All 25 | private 26 | 27 | 28 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t6_bridge/client/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t6_bridge.client; 2 | 3 | import com.vectorx.pattern.t6_bridge.abstraction.FlipPhone; 4 | import com.vectorx.pattern.t6_bridge.abstraction.Phone; 5 | import com.vectorx.pattern.t6_bridge.abstraction.UprightPhone; 6 | import com.vectorx.pattern.t6_bridge.implementor.Huawei; 7 | import com.vectorx.pattern.t6_bridge.implementor.Xiaomi; 8 | import com.vectorx.pattern.t6_bridge.implementor.iPhone; 9 | 10 | public class Client { 11 | public static void main(String[] args) { 12 | Phone phone = new FlipPhone(new Huawei()); 13 | phone.open(); 14 | phone.call(); 15 | phone.close(); 16 | 17 | System.out.println("======================"); 18 | phone = new FlipPhone(new Xiaomi()); 19 | phone.open(); 20 | phone.call(); 21 | phone.close(); 22 | 23 | System.out.println("======================"); 24 | phone = new UprightPhone(new iPhone()); 25 | phone.open(); 26 | phone.call(); 27 | phone.close(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t18_memento/theory/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t18_memento.theory; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Originator originator = new Originator(); 6 | Caretaker caretaker = new Caretaker(); 7 | originator.setState("当前状态:" + " 状态#1 血量 100 "); 8 | caretaker.addMemento(originator.createMementor()); 9 | System.out.println(originator.getState()); 10 | originator.setState("当前状态:" + " 状态#2 血量 80 "); 11 | caretaker.addMemento(originator.createMementor()); 12 | System.out.println(originator.getState()); 13 | originator.setState("当前状态:" + " 状态#3 血量 60 "); 14 | caretaker.addMemento(originator.createMementor()); 15 | System.out.println(originator.getState()); 16 | 17 | // 恢复到状态1 18 | originator.revertStateFromMementor(caretaker.getMemento(0)); 19 | System.out.println("恢复状态:" + originator.getState()); 20 | 21 | //当前状态: 状态#1 血量 100 22 | //当前状态: 状态#2 血量 80 23 | //当前状态: 状态#3 血量 60 24 | //恢复状态:当前状态: 状态#1 血量 100 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/State.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 状态接口 5 | */ 6 | public interface State { 7 | /** 8 | * 电审 9 | * 10 | * @param context 11 | */ 12 | void electronicAudit(Context context); 13 | 14 | /** 15 | * 电审失败 16 | * 17 | * @param context 18 | */ 19 | void electronicAuditFail(Context context); 20 | 21 | /** 22 | * 定价发布 23 | * 24 | * @param context 25 | */ 26 | void releasePricing(Context context); 27 | 28 | /** 29 | * 接单 30 | * 31 | * @param context 32 | */ 33 | void acceptOrder(Context context); 34 | 35 | /** 36 | * 接单失败 37 | * 38 | * @param context 39 | */ 40 | void acceptOrderFail(Context context); 41 | 42 | /** 43 | * 付款 44 | * 45 | * @param context 46 | */ 47 | void payMoney(Context context); 48 | 49 | /** 50 | * 反馈【下款 或 拒贷】 51 | * 52 | * @param context 53 | */ 54 | void feedback(Context context); 55 | 56 | String getCurrentState(); 57 | } 58 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t22_responsibilitychain/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t22_responsibilitychain; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | //创建一个请求 6 | PurchaseRequest purchaseRequest = new PurchaseRequest(1, 31000.0f); 7 | 8 | //创建相关的审批人 9 | TeachDirectorApprover teachDirectorApprover = new TeachDirectorApprover("童主任"); 10 | DepartmentHeadApprover departmentHeadApprover = new DepartmentHeadApprover("王院长"); 11 | ViceChancellorApprover viceChancellorApprover = new ViceChancellorApprover("钱副校长"); 12 | ChancellorApprover chancellorApprover = new ChancellorApprover("郑校长"); 13 | 14 | //设置后继者(处理人形成环形) 15 | teachDirectorApprover.setNextApprover(departmentHeadApprover); 16 | departmentHeadApprover.setNextApprover(viceChancellorApprover); 17 | viceChancellorApprover.setNextApprover(chancellorApprover); 18 | chancellorApprover.setNextApprover(teachDirectorApprover); 19 | 20 | //发起一个请求 21 | teachDirectorApprover.processRequest(purchaseRequest); //请求编号:1,处理人:郑校长 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/unidirectional121/unidirectional121.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | com.vectorx.uml.association.unidirectional121 5 | 6 | com.vectorx.uml.association.unidirectional121.Person 7 | com.vectorx.uml.association.unidirectional121.IDCard 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Fields 20 | Inner Classes 21 | Methods 22 | Properties 23 | 24 | All 25 | private 26 | 27 | 28 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t13_command/RemoteController.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t13_command; 2 | 3 | /** 4 | * 调用者 5 | */ 6 | public class RemoteController { 7 | private Command[] onCommands; 8 | private Command[] offCommands; 9 | private Command restoreCommand; 10 | 11 | public RemoteController() { 12 | onCommands = new Command[5]; 13 | offCommands = new Command[5]; 14 | for (int i = 0; i < 5; i++) { 15 | onCommands[i] = new NonCommand(); 16 | offCommands[i] = new NonCommand(); 17 | } 18 | } 19 | 20 | public void setCommands(int no, Command onCommand, Command offCommand) { 21 | onCommands[no] = onCommand; 22 | offCommands[no] = offCommand; 23 | } 24 | 25 | public void onBtnCommand(int no) { 26 | restoreCommand = onCommands[no]; 27 | restoreCommand.execute(); 28 | } 29 | 30 | public void offBtnCommand(int no) { 31 | restoreCommand = offCommands[no]; 32 | restoreCommand.execute(); 33 | } 34 | 35 | public void undoBtnCommand() { 36 | restoreCommand.undo(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/improve/improve.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | com.vectorx.pattern.t3_prototype.improve 5 | 6 | com.vectorx.pattern.t3_prototype.improve.Sheep 7 | com.vectorx.pattern.t3_prototype.improve.Client 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Constructors 20 | Fields 21 | Inner Classes 22 | Methods 23 | Properties 24 | 25 | All 26 | private 27 | 28 | 29 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t20_state/lendingplatform/AbstractState.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t20_state.lendingplatform; 2 | 3 | /** 4 | * 抽象状态类,默认实现 5 | */ 6 | public abstract class AbstractState implements State { 7 | private static final RuntimeException EXCEPTION = new RuntimeException("操作流程有误"); 8 | 9 | @Override 10 | public void electronicAudit(Context context) { 11 | throw EXCEPTION; 12 | } 13 | 14 | @Override 15 | public void electronicAuditFail(Context context) { 16 | throw EXCEPTION; 17 | 18 | } 19 | 20 | @Override 21 | public void releasePricing(Context context) { 22 | throw EXCEPTION; 23 | } 24 | 25 | @Override 26 | public void acceptOrder(Context context) { 27 | throw EXCEPTION; 28 | } 29 | 30 | @Override 31 | public void acceptOrderFail(Context context) { 32 | throw EXCEPTION; 33 | } 34 | 35 | @Override 36 | public void payMoney(Context context) { 37 | throw EXCEPTION; 38 | } 39 | 40 | @Override 41 | public void feedback(Context context) { 42 | throw EXCEPTION; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/tradition/CurrentConditions.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.tradition; 2 | 3 | /** 4 | * 当前的天气情况:可以理解成是气象局的网站 5 | */ 6 | public class CurrentConditions { 7 | private Float temperature; 8 | private Float pressure; 9 | private Float humidity; 10 | 11 | /** 12 | * 更新天气情况,通过推送的方式,由 WeatherData 调用 13 | * 14 | * @param temperature 15 | * @param pressure 16 | * @param humidity 17 | */ 18 | public void update(Float temperature, Float pressure, Float humidity) { 19 | // 更新最新天气数据 20 | this.temperature = temperature; 21 | this.pressure = pressure; 22 | this.humidity = humidity; 23 | // 展示最新天气数据 24 | display(); 25 | } 26 | 27 | /** 28 | * 公告板展示天气情况 29 | */ 30 | public void display() { 31 | System.out.println("============最新天气============"); 32 | System.out.println("*** 当前温度:" + this.temperature + " ℃ ***"); 33 | System.out.println("*** 当前气压:" + this.pressure + " kPa ***"); 34 | System.out.println("*** 当前湿度:" + this.humidity + " %RH ***"); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/liskvosubstitution/LiskvoSubstitution1.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.liskvosubstitution; 2 | 3 | import org.junit.Test; 4 | 5 | public class LiskvoSubstitution1 { 6 | 7 | @Test 8 | public void test() { 9 | A a = new A(); 10 | System.out.println("11-3=" + a.func1(11, 3)); 11 | System.out.println("1-8=" + a.func1(1, 8)); 12 | System.out.println("---------------------"); 13 | 14 | B b = new B(); 15 | System.out.println("11-3=" + b.func1(11, 3)); 16 | System.out.println("1-8=" + b.func1(1, 8)); 17 | System.out.println("11+3+9=" + b.func2(11, 3)); 18 | } 19 | 20 | class A { 21 | //返回两个数的差 22 | public int func1(int num1, int num2) { 23 | return num1 - num2; 24 | } 25 | } 26 | 27 | class B extends A { 28 | @Override 29 | public int func1(int num1, int num2) { 30 | return num1 + num2; 31 | } 32 | 33 | //增加了一个新功能:完成两个数相加,然后和9求和 34 | public int func2(int num1, int num2) { 35 | return func1(num1, num2) + 9; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/trandition/trandition.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | com.vectorx.pattern.t3_prototype.trandition 5 | 6 | com.vectorx.pattern.t3_prototype.trandition.Client 7 | com.vectorx.pattern.t3_prototype.trandition.Sheep 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Constructors 20 | Fields 21 | Inner Classes 22 | Methods 23 | Properties 24 | 25 | All 26 | private 27 | 28 | 29 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/trandition/Sheep.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t3_prototype.trandition; 2 | 3 | public class Sheep { 4 | private String name; 5 | private Integer age; 6 | private String color; 7 | 8 | public Sheep(String name, Integer age, String color) { 9 | this.name = name; 10 | this.age = age; 11 | this.color = color; 12 | } 13 | 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public void setName(String name) { 19 | this.name = name; 20 | } 21 | 22 | public Integer getAge() { 23 | return age; 24 | } 25 | 26 | public void setAge(Integer age) { 27 | this.age = age; 28 | } 29 | 30 | public String getColor() { 31 | return color; 32 | } 33 | 34 | public void setColor(String color) { 35 | this.color = color; 36 | } 37 | 38 | @Override 39 | public String toString() { 40 | return "Sheep{" + 41 | "name='" + name + '\'' + 42 | ", age=" + age + 43 | ", color='" + color + '\'' + 44 | '}'; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/singleresponsibility/SingleResponsibility2.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.singleresponsibility; 2 | 3 | import org.junit.Test; 4 | 5 | public class SingleResponsibility2 { 6 | 7 | @Test 8 | public void test() { 9 | RoadVehicle roadVehicle = new RoadVehicle(); 10 | roadVehicle.run("汽车"); 11 | WaterVehicle waterVehicle = new WaterVehicle(); 12 | waterVehicle.run("轮船"); 13 | AirVehicle airVehicle = new AirVehicle(); 14 | airVehicle.run("飞机"); 15 | } 16 | 17 | /** 18 | * 方案2的分析 19 | * 1.遵守单一职责原则 20 | * 2.但是这样做的改动很大,即将类分解,同时修改客户端 21 | * 3.改进:直接修改Vehicle类,改动的代码会比较少=>方案3 22 | */ 23 | class RoadVehicle { 24 | public void run(String type) { 25 | System.out.println(type + "在公路上运行..."); 26 | } 27 | } 28 | 29 | class WaterVehicle { 30 | public void run(String type) { 31 | System.out.println(type + "在水面上运行..."); 32 | } 33 | } 34 | 35 | class AirVehicle { 36 | public void run(String type) { 37 | System.out.println(type + "在天空上运行..."); 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/observer/BaiDuWebSite.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.observer; 2 | 3 | /** 4 | * 新增的三方观察者对象——百度网 5 | */ 6 | public class BaiDuWebSite implements Observer { 7 | private Float temperature; 8 | private Float pressure; 9 | private Float humidity; 10 | 11 | /** 12 | * 更新天气情况,通过推送的方式,由 WeatherData 调用 13 | * 14 | * @param temperature 15 | * @param pressure 16 | * @param humidity 17 | */ 18 | @Override 19 | public void update(Float temperature, Float pressure, Float humidity) { 20 | // 更新最新天气数据 21 | this.temperature = temperature; 22 | this.pressure = pressure; 23 | this.humidity = humidity; 24 | // 展示最新天气数据 25 | display(); 26 | } 27 | 28 | /** 29 | * 公告板展示天气情况 30 | */ 31 | public void display() { 32 | System.out.println("============百度网-最新天气============"); 33 | System.out.println("*** 百度网-当前温度:" + this.temperature + " ℃ ***"); 34 | System.out.println("*** 百度网-当前气压:" + this.pressure + " kPa ***"); 35 | System.out.println("*** 百度网-当前湿度:" + this.humidity + " %RH ***"); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t16_observer/observer/SinaWebSite.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t16_observer.observer; 2 | 3 | /** 4 | * 新增的三方观察者对象——新浪网 5 | */ 6 | public class SinaWebSite implements Observer { 7 | private Float temperature; 8 | private Float pressure; 9 | private Float humidity; 10 | 11 | /** 12 | * 更新天气情况,通过推送的方式,由 WeatherData 调用 13 | * 14 | * @param temperature 15 | * @param pressure 16 | * @param humidity 17 | */ 18 | @Override 19 | public void update(Float temperature, Float pressure, Float humidity) { 20 | // 更新最新天气数据 21 | this.temperature = temperature; 22 | this.pressure = pressure; 23 | this.humidity = humidity; 24 | // 展示最新天气数据 25 | display(); 26 | } 27 | 28 | /** 29 | * 公告板展示天气情况 30 | */ 31 | public void display() { 32 | System.out.println("============新浪网-最新天气============"); 33 | System.out.println("*** 新浪网-当前温度:" + this.temperature + " ℃ ***"); 34 | System.out.println("*** 新浪网-当前气压:" + this.pressure + " kPa ***"); 35 | System.out.println("*** 新浪网-当前湿度:" + this.humidity + " %RH ***"); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t3_prototype/deepclone1/DeepPrototype.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t3_prototype.deepclone1; 2 | 3 | import java.io.Serializable; 4 | 5 | public class DeepPrototype implements Serializable, Cloneable { 6 | private String name; 7 | private DeepClonableTarget deepClonableTarget; 8 | 9 | public DeepPrototype() { 10 | } 11 | 12 | public String getName() { 13 | return name; 14 | } 15 | 16 | public void setName(String name) { 17 | this.name = name; 18 | } 19 | 20 | public DeepClonableTarget getDeepClonableTarget() { 21 | return deepClonableTarget; 22 | } 23 | 24 | public void setDeepClonableTarget(DeepClonableTarget deepClonableTarget) { 25 | this.deepClonableTarget = deepClonableTarget; 26 | } 27 | 28 | @Override 29 | protected Object clone() throws CloneNotSupportedException { 30 | //基本数据类型拷贝 31 | Object object = super.clone(); 32 | //引用类型拷贝 33 | DeepPrototype deepPrototype = (DeepPrototype) object; 34 | deepPrototype.deepClonableTarget = (DeepClonableTarget) deepClonableTarget.clone(); 35 | return object; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/staticfactory/order/OrderPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.staticfactory.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.staticfactory.pizza.Pizza; 4 | 5 | import java.io.BufferedReader; 6 | import java.io.IOException; 7 | import java.io.InputStreamReader; 8 | 9 | public class OrderPizza { 10 | 11 | public OrderPizza() { 12 | Pizza pizza; 13 | do { 14 | pizza = PizzaFactory.createPizza(getType()); 15 | if (pizza == null) { 16 | System.out.println("Failed to Order Pizza"); 17 | } else { 18 | pizza.prepare(); 19 | pizza.bake(); 20 | pizza.cut(); 21 | pizza.box(); 22 | } 23 | } while (true); 24 | } 25 | 26 | private String getType() { 27 | System.out.println("请输入披萨类型:"); 28 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 29 | try { 30 | return reader.readLine(); 31 | } catch (IOException e) { 32 | e.printStackTrace(); 33 | return ""; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/principle/dependencyinversion/DependencyInversion2.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.principle.dependencyinversion; 2 | 3 | import org.junit.Test; 4 | 5 | public class DependencyInversion2 { 6 | 7 | @Test 8 | public void test() { 9 | Person person = new Person(); 10 | person.receive(new Email()); 11 | person.receive(new Weixin()); 12 | person.receive(new ShortMessage()); 13 | } 14 | 15 | /** 16 | * 方式2分析 17 | */ 18 | 19 | interface IReceiver { 20 | String getInfo(); 21 | } 22 | 23 | class Email implements IReceiver { 24 | @Override 25 | public String getInfo() { 26 | return "电子邮件信息:Hello World!"; 27 | } 28 | } 29 | 30 | class Weixin implements IReceiver { 31 | @Override 32 | public String getInfo() { 33 | return "微信消息:Hello World!"; 34 | } 35 | } 36 | 37 | class ShortMessage implements IReceiver { 38 | @Override 39 | public String getInfo() { 40 | return "短信信息:Hello World!"; 41 | } 42 | } 43 | 44 | class Person { 45 | public void receive(IReceiver receiver) { 46 | System.out.println(receiver.getInfo()); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t11_proxy/dynamicproxy/TeacherFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t11_proxy.dynamicproxy; 2 | 3 | import java.lang.reflect.InvocationHandler; 4 | import java.lang.reflect.Method; 5 | import java.lang.reflect.Proxy; 6 | 7 | /** 8 | * 代理工厂 9 | */ 10 | public class TeacherFactory { 11 | /** 12 | * 目标对象 13 | */ 14 | private Object target; 15 | 16 | public TeacherFactory(Object target) { 17 | this.target = target; 18 | } 19 | 20 | public Object newProxyInstance() { 21 | return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { 22 | //1. ClassLoader loader:指定当前目标对象使用的类加载器,获取加载器的方法固定 23 | //2. Class[] interfaces:目标对象实现的接口类型,使用泛型方法确认类型 24 | //3. InvocationHandler h:事情处理,执行目标对象的方法时触发事情处理器方法,把当前执行的目标对象方法作为参数传入 25 | @Override 26 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 27 | System.out.println("JDK代理授课开始..."); 28 | Object returnVal = method.invoke(target, args); 29 | System.out.println("JDK代理授课结束..."); 30 | return returnVal; 31 | } 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/factorymethod/order/OrderPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.factorymethod.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.factorymethod.pizza.Pizza; 4 | 5 | import java.io.BufferedReader; 6 | import java.io.IOException; 7 | import java.io.InputStreamReader; 8 | 9 | public abstract class OrderPizza { 10 | 11 | public void orderPizza() { 12 | Pizza pizza = null; 13 | do { 14 | pizza = createPizza(getType()); 15 | if (pizza == null) { 16 | System.out.println("Failed to Order Pizza"); 17 | } else { 18 | pizza.prepare(); 19 | pizza.bake(); 20 | pizza.cut(); 21 | pizza.box(); 22 | } 23 | } while (true); 24 | } 25 | 26 | public abstract Pizza createPizza(String orderType); 27 | 28 | private String getType() { 29 | System.out.println("请输入披萨类型:"); 30 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 31 | try { 32 | return reader.readLine(); 33 | } catch (IOException e) { 34 | e.printStackTrace(); 35 | return ""; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/uml/association/bidirectional121/bidirectional121.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | com.vectorx.uml.association.bidirectional121 5 | 6 | com.vectorx.uml.association.bidirectional121.Person 7 | com.vectorx.uml.association.bidirectional121.IDCard 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Fields 24 | Inner Classes 25 | Methods 26 | Properties 27 | 28 | All 29 | private 30 | 31 | 32 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t21_strategy/improve/Client.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t21_strategy.improve; 2 | 3 | import com.vectorx.pattern.t21_strategy.improve.duck.Duck; 4 | import com.vectorx.pattern.t21_strategy.improve.duck.PekingDuck; 5 | import com.vectorx.pattern.t21_strategy.improve.duck.ToyDuck; 6 | import com.vectorx.pattern.t21_strategy.improve.duck.WildDuck; 7 | import com.vectorx.pattern.t21_strategy.improve.fly.NoFlyBehavior; 8 | 9 | public class Client { 10 | public static void main(String[] args) { 11 | Duck wildDuck = new WildDuck(); 12 | wildDuck.quark(); 13 | wildDuck.swim(); 14 | wildDuck.fly(); 15 | 16 | Duck pekingDuck = new PekingDuck(); 17 | pekingDuck.quark(); 18 | pekingDuck.swim(); 19 | pekingDuck.fly(); 20 | System.out.println("===改变策略==="); 21 | pekingDuck.setFlyBehavior(new NoFlyBehavior()); 22 | pekingDuck.fly(); 23 | 24 | Duck toyDuck = new ToyDuck(); 25 | toyDuck.quark(); 26 | toyDuck.swim(); 27 | toyDuck.fly(); 28 | 29 | //======野鸭子====== 30 | //咯咯叫~ 31 | //会游泳~ 32 | //很会飞~ 33 | //======北京鸭====== 34 | //嘎嘎叫~ 35 | //会游泳~ 36 | //不太会飞~ 37 | //===改变策略=== 38 | //不会飞~ 39 | //======玩具鸭====== 40 | //不会叫~ 41 | //不会游泳~ 42 | //不会飞~ 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern/t2_factory/pizzastore/simplefactory/order/OrderPizza.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern.t2_factory.pizzastore.simplefactory.order; 2 | 3 | import com.vectorx.pattern.t2_factory.pizzastore.simplefactory.pizza.Pizza; 4 | 5 | import java.io.BufferedReader; 6 | import java.io.IOException; 7 | import java.io.InputStreamReader; 8 | 9 | public class OrderPizza { 10 | private PizzaFactory pizzaFactory; 11 | 12 | public OrderPizza(PizzaFactory pizzaFactory) { 13 | this.pizzaFactory = pizzaFactory; 14 | orderPizza(); 15 | } 16 | 17 | public void orderPizza() { 18 | Pizza pizza = null; 19 | do { 20 | pizza = pizzaFactory.createPizza(getType()); 21 | if (pizza == null) { 22 | System.out.println("Failed to Order Pizza"); 23 | } else { 24 | pizza.prepare(); 25 | pizza.bake(); 26 | pizza.cut(); 27 | pizza.box(); 28 | } 29 | } while (true); 30 | } 31 | 32 | private String getType() { 33 | System.out.println("请输入披萨类型:"); 34 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 35 | try { 36 | return reader.readLine(); 37 | } catch (IOException e) { 38 | e.printStackTrace(); 39 | return ""; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /DesignPatternsDemo/src/main/java/com/vectorx/pattern_advance/t2_factory/phone/v1/impl/factory/X3PhoneComponentFactory.java: -------------------------------------------------------------------------------- 1 | package com.vectorx.pattern_advance.t2_factory.phone.v1.impl.factory; 2 | 3 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Battery; 4 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Camera; 5 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Chip; 6 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.component.Screen; 7 | import com.vectorx.pattern_advance.t2_factory.phone.v1.api.factory.PhoneComponentFactory; 8 | import com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.camera.SingleCamera; 9 | import com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.chip.KylinChip; 10 | import com.vectorx.pattern_advance.t2_factory.phone.v1.impl.component.screen.IpsScreen; 11 | 12 | /** 13 | * X3 14 | */ 15 | public class X3PhoneComponentFactory extends PhoneComponentFactory { 16 | @Override 17 | public Chip productChip() { 18 | return new KylinChip(); 19 | } 20 | 21 | @Override 22 | public Camera productCamera() { 23 | return new SingleCamera(); 24 | } 25 | 26 | @Override 27 | public Screen productScreen() { 28 | return new IpsScreen(); 29 | } 30 | 31 | @Override 32 | public Battery productBattery() { 33 | return new LithiumIonBattery(); 34 | } 35 | } 36 | --------------------------------------------------------------------------------