├── cor ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── cor │ │ │ ├── demo01 │ │ │ ├── Request.java │ │ │ ├── Response.java │ │ │ ├── IHandler.java │ │ │ ├── Sender.java │ │ │ └── Chain.java │ │ │ ├── demo02 │ │ │ ├── Member.java │ │ │ ├── Activity.java │ │ │ ├── IVerification.java │ │ │ └── IVerificationService.java │ │ │ ├── demo03 │ │ │ ├── Response.java │ │ │ ├── IVerificationHandler.java │ │ │ ├── Request.java │ │ │ └── IVerificationServiceV2.java │ │ │ ├── CorApplication.java │ │ │ └── demo04 │ │ │ ├── IVerificationServiceV3.java │ │ │ ├── ActivityContext.java │ │ │ └── ActivityControllerV3_verification.puml │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── cor │ │ ├── CorApplicationTests.java │ │ └── demo01 │ │ └── SenderTest.java └── .gitignore ├── adapter-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── adapter │ │ │ ├── demo01 │ │ │ ├── IAdaptee.java │ │ │ ├── ITarget.java │ │ │ ├── Client.java │ │ │ ├── AdapterB.java │ │ │ ├── AdapterA.java │ │ │ └── AdapteeA.java │ │ │ ├── demo02 │ │ │ ├── IPayment.java │ │ │ ├── PaymentService.java │ │ │ ├── PayInfo.java │ │ │ ├── Alipay.java │ │ │ └── WeChatPay.java │ │ │ └── AdapterPatternApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── adapter │ │ └── AdapterAPatternApplicationTests.java └── .gitignore ├── bridge-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── bridge │ │ │ ├── demo02 │ │ │ ├── ISingleDimensionalA.java │ │ │ ├── IMutiDimensional.java │ │ │ ├── Client.java │ │ │ ├── ConcreteSingleDimensionalB.java │ │ │ ├── ConcreteSingleDimensionalA.java │ │ │ ├── ConcreteMultiDimensionalB.java │ │ │ └── ConcreteMultiDimensionalA.java │ │ │ ├── demo01 │ │ │ ├── Implementor.java │ │ │ ├── Abstraction.java │ │ │ ├── ConcreteImplementorA.java │ │ │ ├── ConcreteImplementorB.java │ │ │ └── RefinedAbstraction.java │ │ │ ├── demo03 │ │ │ ├── ISqlExport.java │ │ │ ├── IExcelExport.java │ │ │ ├── IFileExport.java │ │ │ ├── OracleExport.java │ │ │ ├── MysqlExport.java │ │ │ ├── Excel2007Export.java │ │ │ ├── Excel2003Export.java │ │ │ └── SKU.java │ │ │ └── BridgePatternApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── bridge │ │ └── BridgePatternApplicationTests.java └── .gitignore ├── iterator-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── iterator │ │ │ ├── demo01 │ │ │ └── Iterator.java │ │ │ └── IteratorPatternApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── iterator │ │ └── IteratorPatternApplicationTests.java └── .gitignore ├── memento-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── memento │ │ │ ├── demo01 │ │ │ ├── IMementoRole.java │ │ │ ├── Caretaker.java │ │ │ └── MementoCreatorRole.java │ │ │ ├── demo02 │ │ │ └── ISnapshot.java │ │ │ └── MementoPatternApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── memento │ │ └── MementoPatternApplicationTests.java └── .gitignore ├── observer-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── observer │ │ │ ├── demo04 │ │ │ ├── IObserver.java │ │ │ ├── Message.java │ │ │ ├── IObservable.java │ │ │ ├── ConcreteObservableA.java │ │ │ ├── ConcreteObserverA.java │ │ │ └── ConcreteObserverB.java │ │ │ ├── demo01 │ │ │ ├── IOrderService.java │ │ │ ├── IBusinessService.java │ │ │ ├── OrderInfo.java │ │ │ ├── BookBusinessService.java │ │ │ └── MobileBusinessService.java │ │ │ ├── ObserverPatternApplication.java │ │ │ ├── demo02 │ │ │ └── IOrderServiceV2.java │ │ │ └── demo03 │ │ │ ├── Observable.uml │ │ │ ├── BookBusinessServiceV3.java │ │ │ └── MobileBusinessServiceV3.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── observer │ │ └── ObserverPatternApplicationTests.java └── .gitignore ├── visitor-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── visitor │ │ │ ├── demo01 │ │ │ ├── CloudFileType.java │ │ │ ├── FileInfo.java │ │ │ ├── ICloudFile.java │ │ │ ├── CloudImg.java │ │ │ ├── CloudTxt.java │ │ │ └── CloudFileService.java │ │ │ ├── demo05 │ │ │ ├── IVisitableV2.java │ │ │ ├── IVisitorV2.java │ │ │ ├── ConcreteVisitableAV2.java │ │ │ ├── ConcreteVisitableBV2.java │ │ │ └── VisitableObjectStructureV2.java │ │ │ ├── demo04 │ │ │ ├── IVisitable.java │ │ │ ├── IVisitor.java │ │ │ ├── ConcreteVisitableA.java │ │ │ ├── ConcreteVisitableB.java │ │ │ ├── VisitableObjectStructure.java │ │ │ ├── ConcreteVisitorA.java │ │ │ └── ConcreteVisitorB.java │ │ │ ├── demo03 │ │ │ └── ICloudFileVisitorV3.java │ │ │ ├── VisitorPatternApplication.java │ │ │ └── demo02 │ │ │ ├── ICloudFileVisitorV2.java │ │ │ ├── ICloudFileV2.java │ │ │ └── CountCloudFileVisitorV2.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── visitor │ │ └── VisitorPatternApplicationTests.java └── .gitignore ├── composite-pattern ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── composite │ │ │ ├── demo02 │ │ │ ├── ILeafCategoryV2.java │ │ │ ├── IGoodsServiceV2.java │ │ │ ├── ICategory.java │ │ │ ├── IBranchCategoryV2.java │ │ │ └── GoodsServiceV2.java │ │ │ ├── demo04 │ │ │ ├── IShape.java │ │ │ ├── ShapeEditor.java │ │ │ ├── AbstractShape.java │ │ │ ├── Line.java │ │ │ └── Circle.java │ │ │ ├── demo05 │ │ │ ├── IUnifiedObject.java │ │ │ ├── Client.java │ │ │ ├── AbstractUnifiedObject.java │ │ │ └── IndividualObject.java │ │ │ ├── demo03 │ │ │ ├── IGoodsServiceV3.java │ │ │ ├── ICategoryV3.java │ │ │ └── GoodsServiceV3.java │ │ │ ├── demo01 │ │ │ ├── IGoodsService.java │ │ │ ├── ILeafCategory.java │ │ │ ├── IBranchCategory.java │ │ │ └── GoodsService.java │ │ │ └── CompositePatternApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── composite │ │ └── CompositePatternApplicationTests.java └── .gitignore ├── united-command-memento ├── src │ ├── main │ │ ├── resources │ │ │ └── application.properties │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── united │ │ │ ├── demo01 │ │ │ ├── IMemento.java │ │ │ ├── SetCommand.java │ │ │ ├── DelCommand.java │ │ │ └── IRedisCommand.java │ │ │ └── UnitedCommandMementoApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── united │ │ └── UnitedCommandMementoApplicationTests.java └── .gitignore ├── flyweight-pattern └── src │ └── main │ ├── java │ ├── META-INF │ │ └── MANIFEST.MF │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ ├── demo0301 │ │ ├── Area.java │ │ └── IMobilePool.java │ │ └── demo0305 │ │ ├── UnsharedFlyweightRole.java │ │ ├── FlyweightRole.java │ │ └── FineGrainedRole.java │ └── resources │ └── log4j2.xml ├── README.md ├── state-pattern ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ ├── demo0204 │ │ │ ├── StateEnum.java │ │ │ ├── ISpecificStateServerRole.java │ │ │ ├── IStateServerRole.java │ │ │ ├── StateClientRole.java │ │ │ ├── TestStateClientRole.java │ │ │ ├── AbstractSpecificStateServerRole.java │ │ │ └── SpecificStateServerRole01.java │ │ │ ├── demo0205 │ │ │ ├── ISpecificStateServerRole.java │ │ │ ├── SpecificStateServerRoleForState01.java │ │ │ └── SpecificStateServerRoleForState02.java │ │ │ ├── demo0201 │ │ │ ├── OrderInfo.java │ │ │ └── OrderStateEnum.java │ │ │ ├── demo0203 │ │ │ ├── IReminderStateService.java │ │ │ └── ReminderStateEnum.java │ │ │ └── demo0202 │ │ │ └── DeletedOrderStateService.java │ │ └── resources │ │ └── log4j2.xml └── pom.xml ├── factory-method-pattern ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── factorymethod │ │ │ ├── demo03 │ │ │ ├── FileType.java │ │ │ ├── IExcelExportFactory.java │ │ │ ├── IExcelExport.java │ │ │ ├── Excel2003Export.java │ │ │ ├── Excel2007Export.java │ │ │ ├── AbstractExcelExportFactory.java │ │ │ ├── Excel2003ExportFactory.java │ │ │ └── Excel2007ExportFactory.java │ │ │ ├── demo01 │ │ │ ├── IProduct.java │ │ │ ├── IFactory.java │ │ │ ├── AbstractFactory.java │ │ │ ├── ConcreteProductA.java │ │ │ ├── ConcreteProductB.java │ │ │ ├── ConcreteFactoryA.java │ │ │ ├── ConcreteFactoryB.java │ │ │ ├── TestFactoryMethod.java │ │ │ └── ClientRole.java │ │ │ ├── demo02 │ │ │ ├── IProductA.java │ │ │ ├── IProductB.java │ │ │ ├── IFactory.java │ │ │ └── AbstractFactory.java │ │ │ └── demo04 │ │ │ ├── ITotalRow.java │ │ │ ├── ITableTitleRow.java │ │ │ ├── IDataRow.java │ │ │ ├── IExcelFile.java │ │ │ └── IFileTitleRow.java │ │ └── resources │ │ └── log4j2.xml ├── target │ └── classes │ │ └── log4j2.xml └── pom.xml ├── simple-factory-pattern ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── simplefactory │ │ │ ├── demo03 │ │ │ ├── FileType.java │ │ │ ├── IExcelExport.java │ │ │ ├── Excel2003Export.java │ │ │ └── Excel2007Export.java │ │ │ ├── demo01 │ │ │ ├── ProductType.java │ │ │ ├── IProductRole.java │ │ │ ├── ProductA.java │ │ │ ├── ProductB.java │ │ │ └── SimpleFactoryRole.java │ │ │ └── demo04 │ │ │ └── FileExportServiceV2.java │ │ └── resources │ │ └── log4j2.xml ├── target │ └── classes │ │ └── log4j2.xml └── pom.xml ├── proxy-pattern └── src │ ├── main │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── proxy │ │ └── demo01 │ │ ├── IOriginal.java │ │ ├── Client.java │ │ ├── ConreteOriginal.java │ │ └── AbstractProxy.java │ └── test │ └── java │ └── com │ └── geekarchitect │ └── patterns │ └── proxy │ └── demo01 │ └── ClientTest.java ├── decorator-pattern └── src │ ├── main │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── decorator │ │ ├── demo01 │ │ ├── IOriginal.java │ │ ├── Client.java │ │ ├── ConreteOriginal.java │ │ ├── AbstractDecorator.java │ │ └── ConcreteDecoratorA.java │ │ └── demo02 │ │ ├── TestCopillot.java │ │ └── FileManager.java │ └── test │ └── java │ └── com │ └── geekarchitect │ └── patterns │ └── decorator │ └── demo01 │ └── ClientTest.java ├── mediator-pattern ├── src │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── mediator │ │ │ ├── demo01 │ │ │ ├── IColleague.java │ │ │ ├── IMediator.java │ │ │ ├── Colleague.java │ │ │ ├── ConcreteColleagueA.java │ │ │ ├── ConcreteColleagueB.java │ │ │ ├── ConcreteColleagueC.java │ │ │ └── ConcreteMediator.java │ │ │ ├── demo02 │ │ │ └── StateBarComp.java │ │ │ ├── demo03 │ │ │ └── StateBarCompColleague.java │ │ │ └── MediatorPatternApplication.java │ └── test │ │ └── java │ │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── mediator │ │ └── MediatorPatternApplicationTests.java └── .gitignore ├── prototype-pattern └── src │ └── main │ ├── java │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── prototype │ │ ├── demo01 │ │ └── IProduct.java │ │ ├── demo02 │ │ ├── SKU01.java │ │ └── SKU011.java │ │ └── demo03 │ │ └── SKU01.java │ └── resources │ └── log4j2.xml ├── command-pattern └── src │ └── main │ └── java │ └── com │ └── geekarchitect │ └── patterns │ └── command │ ├── demo02 │ ├── IAppClient.java │ ├── IDegradeService.java │ ├── ReviewAppImpl.java │ ├── RecommendAppImpl.java │ ├── DegradeController_offline.puml │ └── DegradeController.java │ ├── demo03 │ ├── ICommand.java │ ├── IDegradeServiceV2.java │ ├── IAppClientV2.java │ ├── RecommendAppImplV2.java │ ├── ReviewAppImplV2.java │ └── DegradeControllerV2.java │ ├── demo01 │ ├── ICommandRole.java │ ├── IExecutorRole.java │ ├── AbstractCommandRole.java │ ├── InvokerRole.java │ ├── AbstractExecutorRole.java │ ├── ConcreteExecutorRole.java │ ├── CommandCreatorRole.java │ ├── ConcreteCommandRoleA.java │ └── ConcreteCommandRoleB.java │ └── demo04 │ ├── IDegradeServiceV3.java │ ├── ICommandManager.java │ ├── CommandManagerImpl_startTimeJob.puml │ └── DegradeControllerV3.java ├── abstract-factory-pattern ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── abstractfactory │ │ │ ├── demo01 │ │ │ ├── AbstractFactory.java │ │ │ ├── IProductTypeA.java │ │ │ ├── IProductTypeB.java │ │ │ ├── IFactory.java │ │ │ ├── ProductTypeAOfFamilyA.java │ │ │ ├── ProductTypeAOfFamilyB.java │ │ │ ├── ProductTypeBOfFamilyA.java │ │ │ ├── ProductTypeBOfFamilyB.java │ │ │ ├── FamilyAFactory.java │ │ │ ├── FamilyBFactory.java │ │ │ └── ClientRole.java │ │ │ ├── demo02 │ │ │ ├── FileType.java │ │ │ ├── AbstractFileExportFactory.java │ │ │ ├── ISqlExport.java │ │ │ ├── IExcelExport.java │ │ │ ├── ChinaOracleExport.java │ │ │ ├── RussiaMysqlExport.java │ │ │ ├── RussiaOracleExport.java │ │ │ ├── IFileExportFactory.java │ │ │ ├── RussiaExcel2007Export.java │ │ │ ├── ChinaExcel2007Export.java │ │ │ ├── RussiaExcel2003Export.java │ │ │ ├── ChinaMysqlExport.java │ │ │ └── ChinaExcel2003Export.java │ │ │ └── demo03 │ │ │ ├── AbstractFileExportFactory.java │ │ │ ├── IPDFExport.java │ │ │ ├── ISqlExport.java │ │ │ ├── IExcelExport.java │ │ │ ├── ChinaPDFExport.java │ │ │ ├── RussiaPDFExport.java │ │ │ ├── ChinaOracleExport.java │ │ │ ├── FranceOracleExport.java │ │ │ ├── RussiaMysqlExport.java │ │ │ ├── RussiaOracleExport.java │ │ │ ├── RussiaExcel2007Export.java │ │ │ ├── ChinaExcel2007Export.java │ │ │ ├── FranceExcel2007Export.java │ │ │ ├── RussiaExcel2003Export.java │ │ │ ├── FileType.java │ │ │ ├── IFileExportFactory.java │ │ │ ├── FrancePDFExport.java │ │ │ ├── ChinaMysqlExport.java │ │ │ ├── FranceMysqlExport.java │ │ │ ├── ChinaExcel2003Export.java │ │ │ └── FranceExcel2003Export.java │ │ └── resources │ │ └── log4j2.xml └── pom.xml ├── strategy-pattern ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ ├── demo0101 │ │ │ ├── ISettlementService.java │ │ │ ├── CartItem.java │ │ │ ├── Cart.java │ │ │ ├── Member.java │ │ │ ├── SKU.java │ │ │ └── Utils.java │ │ │ ├── demo0105 │ │ │ ├── IStrategyServerRole.java │ │ │ ├── StrategyServerRole2.java │ │ │ ├── StrategyServerRole1.java │ │ │ └── IStrategyDelegateRole.java │ │ │ ├── demo0103 │ │ │ └── IPromotionStrategy.java │ │ │ └── demo0104 │ │ │ └── IPromotionService.java │ │ └── resources │ │ └── log4j2.xml └── pom.xml ├── united-strategy-template ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── geekarchitect │ │ │ └── patterns │ │ │ └── demo9901 │ │ │ ├── ISettlementService.java │ │ │ ├── CartItem.java │ │ │ ├── Cart.java │ │ │ ├── IPromotionService.java │ │ │ ├── NonePromotionStrategy.java │ │ │ ├── IPromotionStrategy.java │ │ │ ├── Member.java │ │ │ ├── SKU.java │ │ │ └── Utils.java │ │ └── resources │ │ └── log4j2.xml └── pom.xml ├── singleton-pattern └── src │ └── main │ ├── java │ └── com │ │ └── geekarchitect │ │ └── patterns │ │ └── singleton │ │ ├── demo01 │ │ └── ILocalCache.java │ │ └── demo03 │ │ └── InstanceClientRole.java │ └── resources │ └── log4j2.xml ├── .gitignore └── template-method-pattern ├── src └── main │ ├── resources │ └── log4j2.xml │ └── java │ └── com │ └── geekarchitect │ └── patterns │ ├── demo0003 │ ├── IRoleService.java │ ├── AbstractTemplateRoleService.java │ └── IndividuationRoleService1.java │ ├── demo0001 │ ├── TestOrderService.java │ └── OrderInfo.java │ └── demo0002 │ └── OrderInfo.java └── pom.xml /cor/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /iterator-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /memento-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /observer-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /composite-pattern/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /united-command-memento/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /flyweight-pattern/src/main/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.geekarchitect.patterns.demo0304.TestOnServer 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DesignPatterns 2 | 该项目包含极客架构师-码农老吴在B站,头条等自媒体平台分享的《架构师基本功之设计模式》相关文章和视频的源代码及相关资料。 3 | # 极客架构师 4 | [文章及视频合集](https://geek-architect.github.io/) 5 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/StateEnum.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | public enum StateEnum { 4 | STATE01, STATE02 5 | } 6 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo01/CloudFileType.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo01; 2 | 3 | public enum CloudFileType { 4 | DIR, TXT, IMG, ZIP 5 | } 6 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/FileType.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | public enum FileType { 4 | EXCEL_2003, EXCEL_2007 5 | } 6 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo03/FileType.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo03; 2 | 3 | public enum FileType { 4 | EXCEL_2003,EXCEL_2007; 5 | } 6 | -------------------------------------------------------------------------------- /proxy-pattern/src/main/java/com/geekarchitect/patterns/proxy/demo01/IOriginal.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.proxy.demo01; 2 | 3 | /** 4 | * 原角色:接口 5 | */ 6 | public interface IOriginal { 7 | void service(); 8 | } 9 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo01/ProductType.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo01; 2 | 3 | public enum ProductType { 4 | PRODUCT_A,PRODUCT_B; 5 | } 6 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo01/IOriginal.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo01; 2 | 3 | /** 4 | * 原角色:接口 5 | */ 6 | public interface IOriginal { 7 | void service(); 8 | } 9 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo02/TestCopillot.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo02; 2 | 3 | public class TestCopillot { 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo01/Request.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo01; 2 | 3 | /** 4 | * 请求角色 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/9/15 8 | */ 9 | public class Request { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo01/Response.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo01; 2 | 3 | /** 4 | * 处理结果角色 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/9/15 8 | */ 9 | public class Response { 10 | } 11 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/IColleague.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | public interface IColleague { 4 | void send(String message); 5 | 6 | void receive(String message); 7 | } 8 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo02/FileManager.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo02; 2 | 3 | public class FileManager { 4 | //使用DataInputStream读取文件并保存 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo01/IAdaptee.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/16 6 | */ 7 | public interface IAdaptee { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo01/ITarget.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/16 6 | */ 7 | public interface ITarget { 8 | void service(); 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo02/ILeafCategoryV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/2/8 6 | */ 7 | public interface ILeafCategoryV2 extends ICategory { 8 | } 9 | -------------------------------------------------------------------------------- /memento-pattern/src/main/java/com/geekarchitect/patterns/memento/demo01/IMementoRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.memento.demo01; 2 | 3 | /** 4 | * 备忘录角色接口:无需任何方法 5 | * @author 极客架构师@吴念 6 | * @createTime 2022/9/6 7 | */ 8 | public interface IMementoRole { 9 | } 10 | -------------------------------------------------------------------------------- /prototype-pattern/src/main/java/com/geekarchitect/patterns/prototype/demo01/IProduct.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.prototype.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/7/18 6 | */ 7 | public interface IProduct extends Cloneable{ 8 | 9 | } 10 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo02/IPayment.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/16 6 | */ 7 | public interface IPayment { 8 | void pay(PayInfo payInfo); 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo04/IShape.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/2/10 6 | */ 7 | public interface IShape { 8 | void doDraw(String color); 9 | } 10 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/IMediator.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | public interface IMediator { 4 | void send(String message, IColleague colleague); 5 | 6 | void addColleague(IColleague iColleague); 7 | } 8 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo02/ISingleDimensionalA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/28 6 | */ 7 | public interface ISingleDimensionalA { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo05/IUnifiedObject.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/2 6 | */ 7 | public interface IUnifiedObject { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/IProduct.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IProduct { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo04/IObserver.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/23 6 | */ 7 | public interface IObserver { 8 | void update(Message message); 9 | } 10 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo05/IVisitableV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public interface IVisitableV2 { 8 | String getVisitableInfo(); 9 | } 10 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo02/IAppClient.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo02; 2 | 3 | /** 4 | * app客户端 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/8/31 8 | */ 9 | public interface IAppClient { 10 | void offline(); 11 | } 12 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo02/IDegradeService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/8/29 6 | */ 7 | public interface IDegradeService { 8 | void offline(int appCode); 9 | } 10 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo03/ICommand.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo03; 2 | 3 | /** 4 | * 应用下线命令接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/8/29 8 | */ 9 | public interface ICommand { 10 | void execute(); 11 | } 12 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo02/Member.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo02; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 会员 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/9/16 9 | */ 10 | @Data 11 | public class Member { 12 | private Long id; 13 | } 14 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo03/Response.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo03; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/9/16 8 | */ 9 | @Data 10 | public class Response { 11 | private Boolean isOk; 12 | } 13 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo02/IProductA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IProductA { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo02/IProductB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IProductB { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /memento-pattern/src/main/java/com/geekarchitect/patterns/memento/demo02/ISnapshot.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.memento.demo02; 2 | 3 | /** 4 | * 快照接口 5 | * 备忘录角色:Memento role 6 | * 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/9/6 9 | */ 10 | public interface ISnapshot { 11 | } 12 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo01/IProductRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IProductRole { 8 | void service(); 9 | } 10 | -------------------------------------------------------------------------------- /united-command-memento/src/main/java/com/geekarchitect/patterns/united/demo01/IMemento.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.united.demo01; 2 | 3 | /** 4 | * 快照接口 5 | * 备忘录角色:Memento role 6 | * 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/9/6 9 | */ 10 | public interface IMemento { 11 | } 12 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo05/IVisitorV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public interface IVisitorV2 { 8 | void visit(IVisitableV2 visitableV2); 9 | } 10 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/AbstractFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/22 6 | */ 7 | public abstract class AbstractFactory implements IFactory { 8 | } 9 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/ICommandRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | /** 4 | * 命令接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/8/26 8 | */ 9 | public interface ICommandRole { 10 | void execute(); 11 | } 12 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo03/IDegradeServiceV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo03; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/8/29 6 | */ 7 | public interface IDegradeServiceV2 { 8 | void offline(int appCode); 9 | } 10 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo04/IDegradeServiceV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/8/29 6 | */ 7 | public interface IDegradeServiceV3 { 8 | void offline(int appCode); 9 | } 10 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo02/Activity.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo02; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 营销活动 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/9/16 9 | */ 10 | @Data 11 | public class Activity { 12 | private Long id; 13 | } 14 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo01/IOrderService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/17 6 | */ 7 | public interface IOrderService { 8 | void pay(OrderInfo orderInfo); 9 | } 10 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/IProductTypeA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IProductTypeA { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/IProductTypeB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IProductTypeB { 8 | void doService(); 9 | } 10 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo01/Implementor.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo01; 2 | 3 | /** 4 | * 具体对象角色接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/3/28 8 | */ 9 | public interface Implementor { 10 | void operationImpl(); 11 | } 12 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo02/StateBarComp.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo02; 2 | 3 | import javax.swing.*; 4 | 5 | public class StateBarComp extends JLabel { 6 | public StateBarComp() { 7 | super.setText("状态栏"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo02/IGoodsServiceV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/2/8 6 | */ 7 | public interface IGoodsServiceV2 { 8 | void printDetails(ICategory category); 9 | } 10 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo01/IBusinessService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/17 6 | */ 7 | public interface IBusinessService { 8 | void doService(OrderInfo orderInfo); 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo03/IGoodsServiceV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo03; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/2/8 6 | */ 7 | public interface IGoodsServiceV3 { 8 | void printDetails(ICategoryV3 category); 9 | } 10 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo04/ITotalRow.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo04; 2 | 3 | /** 4 | * 抽象产品 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/18 8 | */ 9 | public interface ITotalRow { 10 | int getSKUCount(); 11 | } 12 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo04/Message.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo04; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/23 8 | */ 9 | @Data 10 | public class Message { 11 | private String state; 12 | } 13 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0101/ISettlementService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0101; 2 | 3 | /** 4 | * 结算服务接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/3/24 8 | */ 9 | public interface ISettlementService { 10 | void settlement(Cart cart); 11 | } 12 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo02/IMutiDimensional.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo02; 2 | 3 | /** 4 | * 多维度角色接口 5 | */ 6 | public interface IMutiDimensional { 7 | void service(); 8 | void setSingleDimensionalA(ISingleDimensionalA singleDimensionalA); 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo01/IGoodsService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/2/8 6 | */ 7 | public interface IGoodsService { 8 | void printDetails(IBranchCategory branchCategory); 9 | } 10 | -------------------------------------------------------------------------------- /iterator-pattern/src/main/java/com/geekarchitect/patterns/iterator/demo01/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.iterator.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/12 6 | */ 7 | public interface Iterator { 8 | public boolean hasNext(); 9 | public Object next(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/ISettlementService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | /** 4 | * 结算服务接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/3/24 8 | */ 9 | public interface ISettlementService { 10 | void settlement(Cart cart); 11 | } 12 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/IFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | /** 4 | * 抽象工厂:接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/13 8 | */ 9 | public interface IFactory { 10 | IProduct createProduct(); 11 | } 12 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/FileType.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | public enum FileType { 4 | CHINA_EXCEL_2003, CHINA_EXCEL_2007, RUSSIA_EXCEL_2003, RUSSIA_EXCEL_2007, 5 | CHINA_MYSQL, CHINA_ORACLE, RUSSIA_MYSQL, RUSSIA_ORACLE 6 | } 7 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo01/Client.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/16 6 | */ 7 | public class Client { 8 | public void service(ITarget target) { 9 | target.service(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/AbstractFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | /** 4 | * 抽象工厂:抽象类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/22 8 | */ 9 | public abstract class AbstractFactory implements IFactory { 10 | } 11 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo04/IVisitable.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public interface IVisitable { 8 | String getVisitableInfo(); 9 | 10 | void accept(IVisitor visitor); 11 | } 12 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo03/StateBarCompColleague.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo03; 2 | 3 | import javax.swing.*; 4 | 5 | public class StateBarCompColleague extends JLabel { 6 | public StateBarCompColleague() { 7 | super.setText("状态栏"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0105/IStrategyServerRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0105; 2 | 3 | /** 4 | * 策略服务方接口 5 | * @author 极客架构师@吴念 6 | * @createTime 2022/3/30 7 | */ 8 | public interface IStrategyServerRole { 9 | void server(IStrategyDelegateRole strategyDelegateRole); 10 | } 11 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/IExecutorRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | /** 4 | * 命令执行者接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/8/26 8 | */ 9 | public interface IExecutorRole { 10 | void doExecute01(); 11 | 12 | void doExecute02(); 13 | } 14 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/ISqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 单维度角色:接口 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface ISqlExport { 12 | void exportSql(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo01/ILeafCategory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/2/8 6 | */ 7 | public interface ILeafCategory { 8 | int getId(); 9 | 10 | String getName(); 11 | 12 | String getDetails(); 13 | } 14 | -------------------------------------------------------------------------------- /cor/src/test/java/com/geekarchitect/patterns/cor/CorApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class CorApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo03/IExcelExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/13 8 | */ 9 | public interface IExcelExport { 10 | void exportExcel(List skuList); 11 | } 12 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0101/CartItem.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0101; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 购物项 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/26 10 | */ 11 | @Data 12 | public class CartItem { 13 | private SKU sku; 14 | private int quantity; 15 | } 16 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/IExcelExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 单维度角色:接口 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface IExcelExport { 12 | void exportExcel(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo04/ShapeEditor.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/2 6 | */ 7 | public class ShapeEditor { 8 | public void draw(IShape shape, String color) { 9 | shape.doDraw(color); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo05/Client.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/2 6 | */ 7 | public class Client { 8 | public void service(IUnifiedObject unifiedObject) { 9 | unifiedObject.doService(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/IExcelExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | /** 4 | * 抽象工厂:接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/15 8 | */ 9 | public interface IExcelExportFactory { 10 | IExcelExport createExcelExport(); 11 | } 12 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/CartItem.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 购物项 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/26 10 | */ 11 | @Data 12 | public class CartItem { 13 | private SKU sku; 14 | private int quantity; 15 | } 16 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo03/IAppClientV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo03; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * app客户端 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/8/31 10 | */ 11 | public interface IAppClientV2 { 12 | void offline(Map para); 13 | } 14 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo01/ProductA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ProductA implements IProductRole{ 8 | 9 | @Override 10 | public void service() { 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo01/ProductB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ProductB implements IProductRole{ 8 | 9 | @Override 10 | public void service() { 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/IFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public interface IFactory { 8 | IProductTypeA createProductTypeA(); 9 | 10 | IProductTypeB createProductTypeB(); 11 | } 12 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/AbstractFileExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | /** 4 | * 抽象工厂:抽象类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/21 8 | */ 9 | public abstract class AbstractFileExportFactory implements IFileExportFactory { 10 | } 11 | -------------------------------------------------------------------------------- /singleton-pattern/src/main/java/com/geekarchitect/patterns/singleton/demo01/ILocalCache.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.singleton.demo01; 2 | 3 | /** 4 | * 本地缓存接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/5/30 8 | */ 9 | public interface ILocalCache { 10 | void put(String key, String value); 11 | 12 | String get(String key); 13 | } 14 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0205/ISpecificStateServerRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0205; 2 | 3 | /** 4 | * 特定状态服务方-接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/18 8 | */ 9 | public interface ISpecificStateServerRole { 10 | /** 11 | * 状态控方法1 12 | */ 13 | void stateServer4(); 14 | } 15 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/AbstractFileExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | /** 4 | * 抽象工厂:抽象类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/21 8 | */ 9 | public abstract class AbstractFileExportFactory implements IFileExportFactory { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo04/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public interface IVisitor { 8 | void visit(ConcreteVisitableA concreteVisitableA); 9 | 10 | void visit(ConcreteVisitableB concreteVisitableB); 11 | } 12 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/ISqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 抽象产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface ISqlExport { 12 | void exportSql(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/IPDFExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 抽象产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface IPDFExport { 12 | void exportPDF(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/ISqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 抽象产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface ISqlExport { 12 | void exportSql(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/IExcelExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 抽象产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface IExcelExport { 12 | void exportExcel(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/IExcelExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 抽象产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface IExcelExport { 12 | void exportExcel(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/IExcelExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 抽象产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public interface IExcelExport { 12 | void exportExcel(List skuList); 13 | } 14 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo04/ICommandManager.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo04; 2 | 3 | import com.geekarchitect.patterns.command.demo03.ICommand; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/8/30 8 | */ 9 | public interface ICommandManager { 10 | void addCommand(ICommand offlineCommand); 11 | } 12 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo01/IHandler.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo01; 2 | 3 | /** 4 | * 请求处理者角色接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/9/15 8 | */ 9 | public interface IHandler { 10 | void handleRequest(Request request, Response response); 11 | 12 | void setSuccessor(IHandler requestHandlerRole); 13 | } 14 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo03/IVerificationHandler.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo03; 2 | 3 | 4 | /** 5 | * @author 极客架构师@吴念 6 | * @createTime 2022/9/16 7 | */ 8 | public interface IVerificationHandler { 9 | Response handleRequest(Request request); 10 | 11 | void setSuccessor(IVerificationHandler verificationHandler); 12 | } 13 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo04/ITableTitleRow.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo04; 2 | 3 | /** 4 | * 抽象产品 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/18 8 | */ 9 | public interface ITableTitleRow { 10 | int getColumnSize(); 11 | 12 | String getColumnTitle(int columnIndex); 13 | } 14 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo01/OrderInfo.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo01; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/17 8 | */ 9 | @Data 10 | public class OrderInfo { 11 | private Long ID; 12 | private Long MemberID; 13 | private int orderType; 14 | } 15 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo02/ICategory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/2/9 8 | */ 9 | public interface ICategory { 10 | int getId(); 11 | 12 | String getName(); 13 | 14 | 15 | String getDetails(); 16 | } 17 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo01/FileInfo.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo01; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/2 8 | */ 9 | @Data 10 | public class FileInfo { 11 | private int total; 12 | 13 | public void increase() { 14 | total++; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/ProductTypeAOfFamilyA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ProductTypeAOfFamilyA implements IProductTypeA { 8 | @Override 9 | public void doService() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/ProductTypeAOfFamilyB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ProductTypeAOfFamilyB implements IProductTypeB { 8 | @Override 9 | public void doService() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/ProductTypeBOfFamilyA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ProductTypeBOfFamilyA implements IProductTypeA { 8 | @Override 9 | public void doService() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/ProductTypeBOfFamilyB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ProductTypeBOfFamilyB implements IProductTypeB { 8 | @Override 9 | public void doService() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /bridge-pattern/src/test/java/com/geekarchitect/patterns/bridge/BridgePatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class BridgePatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo01/AdapterB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo01; 2 | 3 | /** 4 | * 对象适配器 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/3/16 8 | */ 9 | public class AdapterB extends AdapteeA implements ITarget { 10 | @Override 11 | public void service() { 12 | super.doService(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /adapter-pattern/src/test/java/com/geekarchitect/patterns/adapter/AdapterAPatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class AdapterAPatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /memento-pattern/src/test/java/com/geekarchitect/patterns/memento/MementoPatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.memento; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class MementoPatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /visitor-pattern/src/test/java/com/geekarchitect/patterns/visitor/VisitorPatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class VisitorPatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo02/IBranchCategoryV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/2/8 8 | */ 9 | public interface IBranchCategoryV2 extends ICategory { 10 | void add(ICategory category); 11 | 12 | List getSubCategories(); 13 | } 14 | -------------------------------------------------------------------------------- /iterator-pattern/src/test/java/com/geekarchitect/patterns/iterator/IteratorPatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.iterator; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class IteratorPatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mediator-pattern/src/test/java/com/geekarchitect/patterns/mediator/MediatorPatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class MediatorPatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /observer-pattern/src/test/java/com/geekarchitect/patterns/observer/ObserverPatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class ObserverPatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /composite-pattern/src/test/java/com/geekarchitect/patterns/composite/CompositePatternApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class CompositePatternApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo04/AbstractShape.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/2 6 | */ 7 | public abstract class AbstractShape implements IShape { 8 | protected String name; 9 | 10 | public AbstractShape(String name) { 11 | this.name = name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /united-command-memento/src/test/java/com/geekarchitect/patterns/united/UnitedCommandMementoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.united; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class UnitedCommandMementoApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo02/IVerification.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/9/16 6 | */ 7 | public interface IVerification { 8 | Boolean isPlus(Member member); 9 | 10 | Boolean hasFollowedShop(Member member, Activity activity); 11 | 12 | Boolean HasBought(Member member, Activity activity); 13 | } 14 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo05/ConcreteVisitableAV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public class ConcreteVisitableAV2 implements IVisitableV2 { 8 | 9 | @Override 10 | public String getVisitableInfo() { 11 | return "ConcreteVisitableAV2"; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo05/ConcreteVisitableBV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public class ConcreteVisitableBV2 implements IVisitableV2 { 8 | 9 | @Override 10 | public String getVisitableInfo() { 11 | return "ConcreteVisitableBV2"; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/ChinaPDFExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class ChinaPDFExport implements IPDFExport { 12 | public void exportPDF(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/RussiaPDFExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaPDFExport implements IPDFExport { 12 | public void exportPDF(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo02/PaymentService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo02; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/3/16 8 | */ 9 | @Data 10 | public class PaymentService { 11 | private IPayment payment; 12 | 13 | public void pay(PayInfo payInfo) { 14 | payment.pay(payInfo); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo04/IObservable.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/23 6 | */ 7 | public interface IObservable { 8 | void add(IObserver observer); 9 | 10 | void remove(IObserver observer); 11 | 12 | void notifyObservers(Message message); 13 | 14 | void service(); 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/ChinaOracleExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class ChinaOracleExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/RussiaMysqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaMysqlExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/RussiaOracleExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaOracleExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/ChinaOracleExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class ChinaOracleExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/FranceOracleExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class FranceOracleExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/RussiaMysqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaMysqlExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/RussiaOracleExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaOracleExport implements ISqlExport { 12 | public void exportSql(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo01/ICloudFile.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public interface ICloudFile { 8 | String getName(); 9 | 10 | String getPath(); 11 | 12 | ICloudFile getParent(); 13 | 14 | CloudFileType getCloudFileType(); 15 | 16 | boolean isDir(); 17 | } 18 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/IFileExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | /** 4 | * 抽象工厂:接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/21 8 | */ 9 | public interface IFileExportFactory { 10 | IExcelExport createExcelExport(FileType fileType); 11 | 12 | ISqlExport createSqlExport(FileType fileType); 13 | } 14 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/RussiaExcel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaExcel2007Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/RussiaExcel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaExcel2007Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/ChinaExcel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class ChinaExcel2007Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/RussiaExcel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaExcel2003Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/ChinaExcel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class ChinaExcel2007Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/FranceExcel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class FranceExcel2007Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/RussiaExcel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 具体产品 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/13 10 | */ 11 | public class RussiaExcel2003Export implements IExcelExport { 12 | public void exportExcel(List skuList) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo02/PayInfo.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo02; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2023/3/16 10 | */ 11 | @Data 12 | public class PayInfo { 13 | private Long memberID; 14 | private Double price; 15 | private Long orderID; 16 | private Date payDate; 17 | } 18 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo05/AbstractUnifiedObject.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo05; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2023/3/2 6 | */ 7 | public abstract class AbstractUnifiedObject implements IUnifiedObject { 8 | protected String name; 9 | 10 | public AbstractUnifiedObject(String name) { 11 | this.name = name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo02/Client.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo02; 2 | 3 | 4 | public class Client { 5 | private IMutiDimensional mutiDimensional; 6 | public void service(){ 7 | mutiDimensional.service(); 8 | } 9 | 10 | public void setMutiDimensional(IMutiDimensional mutiDimensional) { 11 | this.mutiDimensional = mutiDimensional; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/CorApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class CorApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(CorApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo03/Request.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo03; 2 | 3 | import com.geekarchitect.patterns.cor.demo02.Activity; 4 | import com.geekarchitect.patterns.cor.demo02.Member; 5 | import lombok.Data; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/9/16 10 | */ 11 | @Data 12 | public class Request { 13 | private Member member; 14 | private Activity activity; 15 | } 16 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo04/ConcreteObservableA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/23 6 | */ 7 | public class ConcreteObservableA extends AbstractObservable { 8 | @Override 9 | public void service() { 10 | Message message = new Message(); 11 | this.notifyObservers(message); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/ISpecificStateServerRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | /** 4 | * 特定状态服务方-接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/18 8 | */ 9 | public interface ISpecificStateServerRole { 10 | /** 11 | * 状态控方法1 12 | */ 13 | void stateServer1(); 14 | 15 | /** 16 | * 状态控方法2 17 | */ 18 | void stateServer2(); 19 | } 20 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo02/IVerificationService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo02; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/9/16 6 | */ 7 | public interface IVerificationService { 8 | /** 9 | * 是否有资格参加活动 10 | * 11 | * @param member 12 | * @param activity 13 | * @return 14 | */ 15 | Boolean isLegalMember(Member member, Activity activity); 16 | } 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | /.idea/ 25 | /target/ 26 | *.iml 27 | /.mvn/ 28 | 29 | .mvn/ 30 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo04/IDataRow.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo04; 2 | 3 | import com.geekarchitect.patterns.factorymethod.demo03.SKU; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 抽象产品 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/6/18 12 | */ 13 | public interface IDataRow { 14 | int getRowCount(); 15 | 16 | List getData(); 17 | } 18 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0201/OrderInfo.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0201; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 订单信息 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/4/16 10 | */ 11 | @Data 12 | public class OrderInfo { 13 | /** 14 | * 订单id 15 | */ 16 | private String ID; 17 | /** 18 | * 订单状态 19 | */ 20 | private OrderStateEnum orderStateEnum; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo03/ICloudFileVisitorV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo03; 2 | 3 | import com.geekarchitect.patterns.visitor.demo01.FileInfo; 4 | import com.geekarchitect.patterns.visitor.demo01.ICloudFile; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/3 9 | */ 10 | public interface ICloudFileVisitorV3 { 11 | void visit(ICloudFile cloudFile, FileInfo fileInfo); 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/FileType.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | public enum FileType { 4 | CHINA_EXCEL_2003, CHINA_EXCEL_2007, RUSSIA_EXCEL_2003, RUSSIA_EXCEL_2007, 5 | FRANCE_EXCEL_2003, FRANCE_EXCEL_2007, 6 | CHINA_MYSQL, CHINA_ORACLE, RUSSIA_MYSQL, RUSSIA_ORACLE, 7 | FRANCE_MYSQL, FRANCE_ORACLE, 8 | CHINA_PDF, RUSSIA_PDF, FRANCE_PDF 9 | } 10 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo03/ICategoryV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/2/9 8 | */ 9 | public interface ICategoryV3 { 10 | int getId(); 11 | 12 | String getName(); 13 | 14 | void add(ICategoryV3 category); 15 | 16 | List getSubCategories(); 17 | 18 | String getDetails(); 19 | } 20 | -------------------------------------------------------------------------------- /flyweight-pattern/src/main/java/com/geekarchitect/patterns/demo0301/Area.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0301; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/5/3 8 | */ 9 | @Data 10 | public class Area { 11 | private long cityCode; 12 | private String cityName; 13 | private long cityId; 14 | private long provinceCode; 15 | private String provinceName; 16 | private long provinceId; 17 | } 18 | -------------------------------------------------------------------------------- /proxy-pattern/src/main/java/com/geekarchitect/patterns/proxy/demo01/Client.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.proxy.demo01; 2 | 3 | public class Client { 4 | private IOriginal original; 5 | public void service(){ 6 | original.service(); 7 | } 8 | 9 | public IOriginal getOriginal() { 10 | return original; 11 | } 12 | 13 | public void setOriginal(IOriginal original) { 14 | this.original = original; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/IFileExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | /** 4 | * 抽象工厂:接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/21 8 | */ 9 | public interface IFileExportFactory { 10 | IExcelExport createExcelExport(FileType fileType); 11 | 12 | ISqlExport createSqlExport(FileType fileType); 13 | 14 | IPDFExport createPDFExport(); 15 | } 16 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo01/Client.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo01; 2 | 3 | public class Client { 4 | private IOriginal original; 5 | public void service(){ 6 | original.service(); 7 | } 8 | 9 | public IOriginal getOriginal() { 10 | return original; 11 | } 12 | 13 | public void setOriginal(IOriginal original) { 14 | this.original = original; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /flyweight-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /prototype-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /singleton-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /state-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /factory-method-pattern/target/classes/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /simple-factory-pattern/target/classes/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0101/Cart.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0101; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 购物车 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/3/26 12 | */ 13 | @Data 14 | public class Cart { 15 | /** 16 | * 购物项列表 17 | */ 18 | private List cartItemList; 19 | /** 20 | * 会员信息 21 | */ 22 | private Member member; 23 | } 24 | 25 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/BridgePatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class BridgePatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(BridgePatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /proxy-pattern/src/main/java/com/geekarchitect/patterns/proxy/demo01/ConreteOriginal.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.proxy.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 原角色:具体类 8 | */ 9 | public class ConreteOriginal implements IOriginal{ 10 | private static final Logger LOG = LoggerFactory.getLogger(ConreteOriginal.class); 11 | @Override 12 | public void service() { 13 | LOG.info("原角色:service()"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /template-method-pattern/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /united-command-memento/src/main/java/com/geekarchitect/patterns/united/demo01/SetCommand.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.united.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/9/10 6 | */ 7 | public class SetCommand extends AbstractRedisCommand { 8 | public SetCommand(RedisServer redisServer) { 9 | super(redisServer, "set"); 10 | } 11 | 12 | @Override 13 | public void doExecute() { 14 | redisServer.set(key, value); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/Cart.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 购物车 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/3/26 12 | */ 13 | @Data 14 | public class Cart { 15 | /** 16 | * 购物项列表 17 | */ 18 | private List cartItemList; 19 | /** 20 | * 会员信息 21 | */ 22 | private Member member; 23 | } 24 | 25 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/AdapterPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class AdapterPatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(AdapterPatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /memento-pattern/src/main/java/com/geekarchitect/patterns/memento/MementoPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.memento; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class MementoPatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(MementoPatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/VisitorPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class VisitorPatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(VisitorPatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /iterator-pattern/src/main/java/com/geekarchitect/patterns/iterator/IteratorPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.iterator; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class IteratorPatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(IteratorPatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/MediatorPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class MediatorPatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(MediatorPatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/ObserverPatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ObserverPatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ObserverPatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/CompositePatternApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class CompositePatternApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(CompositePatternApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo01/ConreteOriginal.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 原角色:具体类 8 | */ 9 | public class ConreteOriginal implements IOriginal{ 10 | private static final Logger LOG = LoggerFactory.getLogger(ConreteOriginal.class); 11 | @Override 12 | public void service() { 13 | LOG.info("原角色:service()"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /memento-pattern/src/main/java/com/geekarchitect/patterns/memento/demo01/Caretaker.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.memento.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/9/6 6 | */ 7 | public class Caretaker { 8 | private IMementoRole mementoRole; 9 | 10 | public IMementoRole getMementoRole() { 11 | return mementoRole; 12 | } 13 | 14 | public void setMementoRole(IMementoRole mementoRole) { 15 | this.mementoRole = mementoRole; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /united-command-memento/src/main/java/com/geekarchitect/patterns/united/demo01/DelCommand.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.united.demo01; 2 | 3 | /** 4 | * 删除key 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/9/10 8 | */ 9 | public class DelCommand extends AbstractRedisCommand { 10 | public DelCommand(RedisServer redisServer) { 11 | super(redisServer, "del"); 12 | } 13 | 14 | @Override 15 | public void doExecute() { 16 | redisServer.del(key); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo02/Alipay.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.Map; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2023/3/16 11 | */ 12 | public class Alipay { 13 | private static final Logger LOG = LoggerFactory.getLogger(Alipay.class); 14 | 15 | void payTo(Map payMap) { 16 | LOG.info("支付宝"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo04/IExcelFile.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo04; 2 | 3 | /** 4 | * 抽象产品:接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/18 8 | */ 9 | public interface IExcelFile { 10 | void addFileTitleRow(IFileTitleRow fileTitleRow); 11 | 12 | void addTableTitleRow(ITableTitleRow tableTitleRow); 13 | 14 | void addDataRow(IDataRow dataRow); 15 | 16 | void addTotalRow(ITotalRow totalRow); 17 | } 18 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo01/AdapterA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo01; 2 | 3 | /** 4 | * 对象适配器 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/3/16 8 | */ 9 | public class AdapterA implements ITarget { 10 | private final IAdaptee adaptee; 11 | 12 | public AdapterA(IAdaptee adaptee) { 13 | this.adaptee = adaptee; 14 | } 15 | 16 | @Override 17 | public void service() { 18 | adaptee.doService(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo04/IFileTitleRow.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo04; 2 | 3 | /** 4 | * 抽象产品 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/18 8 | */ 9 | public interface IFileTitleRow { 10 | /** 11 | * 获取标题长度 12 | * 13 | * @return 14 | */ 15 | int getTitleLength(); 16 | 17 | /** 18 | * 获取未格式化的标题内容 19 | * 20 | * @return 21 | */ 22 | String getRawContent(); 23 | } 24 | -------------------------------------------------------------------------------- /united-command-memento/src/main/java/com/geekarchitect/patterns/united/UnitedCommandMementoApplication.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.united; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class UnitedCommandMementoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(UnitedCommandMementoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo04/ConcreteVisitableA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public class ConcreteVisitableA implements IVisitable { 8 | 9 | @Override 10 | public String getVisitableInfo() { 11 | return "ConcreteVisitableA"; 12 | } 13 | 14 | @Override 15 | public void accept(IVisitor visitor) { 16 | visitor.visit(this); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo04/ConcreteVisitableB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo04; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/11/2 6 | */ 7 | public class ConcreteVisitableB implements IVisitable { 8 | 9 | @Override 10 | public String getVisitableInfo() { 11 | return "ConcreteVisitableB"; 12 | } 13 | 14 | @Override 15 | public void accept(IVisitor visitor) { 16 | visitor.visit(this); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo02/WeChatPay.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2023/3/16 9 | */ 10 | public class WeChatPay implements IPayment { 11 | private static final Logger LOG = LoggerFactory.getLogger(WeChatPay.class); 12 | 13 | @Override 14 | public void pay(PayInfo payInfo) { 15 | LOG.info("微信支付"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/IFileExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 多维度对象角色:接口 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/6/21 10 | */ 11 | public interface IFileExport { 12 | void exportExcel(List skuList); 13 | 14 | void exportSql(List skuList); 15 | 16 | public void setExcelExport(IExcelExport excelExport); 17 | 18 | public void setSqlExport(ISqlExport sqlExport); 19 | } 20 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/Colleague.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | public abstract class Colleague implements IColleague { 4 | private IMediator mediator; 5 | 6 | public Colleague(IMediator m) { 7 | mediator = m; 8 | } 9 | 10 | //send a message via the mediator 11 | public void send(String message) { 12 | mediator.send(message, this); 13 | } 14 | 15 | public abstract void receive(String message); 16 | } 17 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/IPromotionService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | 4 | import java.math.BigDecimal; 5 | 6 | /** 7 | * 促销服务接口 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/3/26 11 | */ 12 | public interface IPromotionService { 13 | BigDecimal doCalculate(CartItem cartItem, Member member); 14 | 15 | IPromotionStrategy getPromotionStrategy(); 16 | 17 | void setPromotionStrategy(IPromotionStrategy promotionStrategy); 18 | } 19 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/NonePromotionStrategy.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.math.BigDecimal; 7 | 8 | /** 9 | * 促销策略:无促销策略 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/3/26 13 | */ 14 | public class NonePromotionStrategy extends AbstractPromotionStrategy { 15 | private static final Logger LOG = LoggerFactory.getLogger(NonePromotionStrategy.class); 16 | } 17 | -------------------------------------------------------------------------------- /adapter-pattern/src/main/java/com/geekarchitect/patterns/adapter/demo01/AdapteeA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.adapter.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2023/3/16 9 | */ 10 | public class AdapteeA implements IAdaptee { 11 | private static final Logger LOG = LoggerFactory.getLogger(AdapteeA.class); 12 | 13 | @Override 14 | public void doService() { 15 | LOG.info("源对象AdapteeA-doService()"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo01/IBranchCategory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo01; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/2/8 8 | */ 9 | public interface IBranchCategory { 10 | int getId(); 11 | 12 | String getName(); 13 | 14 | void add(IBranchCategory branchCategory); 15 | 16 | void add(ILeafCategory leafCategory); 17 | 18 | List getSubCategories(); 19 | 20 | String getDetails(); 21 | } 22 | -------------------------------------------------------------------------------- /united-command-memento/src/main/java/com/geekarchitect/patterns/united/demo01/IRedisCommand.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.united.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/9/10 6 | */ 7 | public interface IRedisCommand { 8 | void execute(); 9 | 10 | void backupMemento(IMemento beforeMemento, IMemento afterMemento); 11 | 12 | IMemento getBeforeMemento(); 13 | 14 | IMemento getAfterMemento(); 15 | 16 | void setKey(String key); 17 | 18 | void setValue(String value); 19 | } 20 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo02/ICloudFileVisitorV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo02; 2 | 3 | import com.geekarchitect.patterns.visitor.demo01.FileInfo; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/3 8 | */ 9 | public interface ICloudFileVisitorV2 { 10 | void visit(CloudDirV2 cloudDirV2, FileInfo fileInfo); 11 | 12 | void visit(CloudTxtV2 cloudTxtV2, FileInfo fileInfo); 13 | 14 | void visit(CloudImgV2 cloudImgV2, FileInfo fileInfo); 15 | } 16 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/IPromotionStrategy.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | import java.math.BigDecimal; 4 | 5 | /** 6 | * 促销策略接口 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/26 10 | */ 11 | public interface IPromotionStrategy { 12 | /** 13 | * 计算促销金额 14 | * 15 | * @author: 极客架构师@吴念 16 | * @date: 2022/3/26 17 | * @param: 18 | * @return: 19 | */ 20 | BigDecimal calculate(CartItem cartItem, Member member); 21 | } 22 | -------------------------------------------------------------------------------- /cor/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/FamilyAFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class FamilyAFactory extends AbstractFactory { 8 | @Override 9 | public IProductTypeA createProductTypeA() { 10 | return new ProductTypeAOfFamilyA(); 11 | } 12 | 13 | @Override 14 | public IProductTypeB createProductTypeB() { 15 | return new ProductTypeAOfFamilyB(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/FamilyBFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class FamilyBFactory extends AbstractFactory { 8 | @Override 9 | public IProductTypeA createProductTypeA() { 10 | return new ProductTypeBOfFamilyA(); 11 | } 12 | 13 | @Override 14 | public IProductTypeB createProductTypeB() { 15 | return new ProductTypeBOfFamilyB(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /adapter-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /bridge-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /iterator-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /mediator-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /memento-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /observer-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo01/Abstraction.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo01; 2 | 3 | /** 4 | * 抽象对象角色抽象类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2023/3/28 8 | */ 9 | public abstract class Abstraction { 10 | /** 11 | * 桥接点 12 | */ 13 | protected Implementor implementor; 14 | 15 | public Abstraction(Implementor implementor) { 16 | this.implementor = implementor; 17 | } 18 | 19 | public void operation() { 20 | implementor.operationImpl(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /composite-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo03/IVerificationServiceV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo03; 2 | 3 | import com.geekarchitect.patterns.cor.demo02.Activity; 4 | import com.geekarchitect.patterns.cor.demo02.Member; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/9/16 9 | */ 10 | public interface IVerificationServiceV2 { 11 | /** 12 | * 是否有资格参加活动 13 | * 14 | * @param member 15 | * @param activity 16 | * @return 17 | */ 18 | Boolean isLegalMember(Member member, Activity activity); 19 | } 20 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo04/IVerificationServiceV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo04; 2 | 3 | import com.geekarchitect.patterns.cor.demo02.Activity; 4 | import com.geekarchitect.patterns.cor.demo02.Member; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/9/16 9 | */ 10 | public interface IVerificationServiceV3 { 11 | /** 12 | * 是否有资格参加活动 13 | * 14 | * @param member 15 | * @param activity 16 | * @return 17 | */ 18 | Boolean isLegalMember(Member member, Activity activity); 19 | } 20 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0203/IReminderStateService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0203; 2 | 3 | import com.geekarchitect.patterns.demo0201.OrderInfo; 4 | 5 | /** 6 | * 催单方法的特定状态服务方-接口 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/4/18 10 | */ 11 | public interface IReminderStateService { 12 | /** 13 | * 催单 14 | * 15 | * @author: 极客架构师@吴念 16 | * @date: 2022/4/15 17 | * @param: [orderID, message] 18 | * @return: void 19 | */ 20 | boolean reminder(OrderInfo orderInfo); 21 | } 22 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0101/Member.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0101; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/2 8 | */ 9 | @Data 10 | public class Member { 11 | private Long id; 12 | private String nickName; 13 | private boolean plus; 14 | 15 | public Member() { 16 | } 17 | 18 | public Member(Long id, String nickName, boolean plus) { 19 | this.id = id; 20 | this.nickName = nickName; 21 | this.plus = plus; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /united-command-memento/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/OracleExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 单维度角色:具体类 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class OracleExport implements ISqlExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(MysqlExport.class); 16 | public void exportSql(List skuList) { 17 | LOG.info("导出Oracle文件"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo04/ConcreteObserverA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo04; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/23 9 | */ 10 | public class ConcreteObserverA implements IObserver { 11 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteObserverA.class); 12 | 13 | @Override 14 | public void update(Message message) { 15 | LOG.info("Observer:ConcreteObserverA"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo04/ConcreteObserverB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo04; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/23 9 | */ 10 | public class ConcreteObserverB implements IObserver { 11 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteObserverB.class); 12 | 13 | @Override 14 | public void update(Message message) { 15 | LOG.info("Observer:ConcreteObserverB"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /visitor-pattern/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | /.mvn/ 35 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/MysqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 单维度角色:具体类 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class MysqlExport implements ISqlExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(MysqlExport.class); 16 | 17 | public void exportSql(List skuList) { 18 | LOG.info("导出mysql文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/AbstractCommandRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 抽象命令 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/26 11 | */ 12 | public abstract class AbstractCommandRole implements ICommandRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(AbstractCommandRole.class); 14 | 15 | @Override 16 | public void execute() { 17 | LOG.info("默认execute方法"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/IStateServerRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | /** 4 | * 状态服务方-接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/18 8 | */ 9 | public interface IStateServerRole { 10 | /** 11 | * 状态控方法1 12 | */ 13 | void stateServer1(); 14 | 15 | /** 16 | * 状态控方法2 17 | */ 18 | void stateServer2(); 19 | 20 | /** 21 | * 非状态控方法 22 | */ 23 | void unStateServer(); 24 | 25 | /** 26 | * 改变状态 27 | */ 28 | void changeState(); 29 | } 30 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/Member.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/2 8 | */ 9 | @Data 10 | public class Member { 11 | private Long id; 12 | private String nickName; 13 | private boolean plus; 14 | 15 | public Member() { 16 | } 17 | 18 | public Member(Long id, String nickName, boolean plus) { 19 | this.id = id; 20 | this.nickName = nickName; 21 | this.plus = plus; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo02/IFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo02; 2 | 3 | /** 4 | * 抽象工厂:接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/13 8 | */ 9 | public interface IFactory { 10 | /** 11 | * 工厂方法 12 | * 13 | * @return 14 | */ 15 | IProductA createProductA(); 16 | 17 | /** 18 | * 工厂方法 19 | * 20 | * @return 21 | */ 22 | IProductB createProductB(); 23 | 24 | /** 25 | * 模板方法 26 | */ 27 | void templateMethod(); 28 | } 29 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/Excel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 单维度角色:具体类 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class Excel2007Export implements IExcelExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(Excel2007Export.class); 16 | public void exportExcel(List skuList) { 17 | LOG.info("导出Excel2007文件"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/ConcreteProductA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 具体产品 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class ConcreteProductA implements IProduct { 13 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteProductA.class); 14 | 15 | @Override 16 | public void doService() { 17 | LOG.info("具体产品:ConcreteProductA 提供服务"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/ConcreteProductB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 具体产品 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class ConcreteProductB implements IProduct { 13 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteProductB.class); 14 | 15 | @Override 16 | public void doService() { 17 | LOG.info("具体产品:ConcreteProductB 提供服务"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /template-method-pattern/src/main/java/com/geekarchitect/patterns/demo0003/IRoleService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0003; 2 | 3 | /** 4 | * 角色服务接口 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/3/4 8 | */ 9 | public interface IRoleService { 10 | /** 11 | * 模板方法 12 | */ 13 | void templateMethod(); 14 | 15 | /** 16 | * 个性化方法1 17 | */ 18 | void individuationMethod1(); 19 | 20 | /** 21 | * 个性化方法2 22 | */ 23 | void individuationMethod2(); 24 | 25 | /** 26 | * 钩子方法 27 | */ 28 | void hookMethod(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo03/Excel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 单维度角色:具体类 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class Excel2003Export implements IExcelExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(Excel2003Export.class); 16 | 17 | public void exportExcel(List skuList) { 18 | LOG.info("导出excel2003文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo04/Line.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo04; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2023/2/10 9 | */ 10 | public class Line extends AbstractShape { 11 | private static final Logger LOG = LoggerFactory.getLogger(Line.class); 12 | 13 | public Line(String name) { 14 | super(name); 15 | } 16 | 17 | @Override 18 | public void doDraw(String color) { 19 | LOG.info("用{}颜色画{}", color, name); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo03/Excel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class Excel2003Export implements IExcelExport{ 13 | private static final Logger LOG = LoggerFactory.getLogger(Excel2003Export.class); 14 | @Override 15 | public void exportExcel(List skuList) { 16 | LOG.info("导出商品:excel2003"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo03/Excel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class Excel2007Export implements IExcelExport{ 13 | private static final Logger LOG = LoggerFactory.getLogger(Excel2007Export.class); 14 | @Override 15 | public void exportExcel(List skuList) { 16 | LOG.info("导出商品:excel2007"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/FrancePDFExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class FrancePDFExport implements IPDFExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(FrancePDFExport.class); 16 | 17 | public void exportPDF(List skuList) { 18 | LOG.info("导出法国-PDF文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /cor/src/test/java/com/geekarchitect/patterns/cor/demo01/SenderTest.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo01; 2 | 3 | import org.junit.jupiter.api.AfterEach; 4 | import org.junit.jupiter.api.BeforeEach; 5 | import org.junit.jupiter.api.Test; 6 | 7 | import static org.junit.jupiter.api.Assertions.*; 8 | 9 | class SenderTest { 10 | 11 | private Sender sender; 12 | 13 | @BeforeEach 14 | void setUp() { 15 | sender=new Sender(); 16 | } 17 | 18 | @AfterEach 19 | void tearDown() { 20 | } 21 | 22 | @Test 23 | void service() { 24 | sender.service(); 25 | } 26 | } -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/StateClientRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 状态客户方 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/4/18 10 | */ 11 | public class StateClientRole { 12 | private static final Logger LOG = LoggerFactory.getLogger(StateClientRole.class); 13 | 14 | public void clientMethod() { 15 | LOG.info("状态模式通用代码"); 16 | IStateServerRole stateServerRole = new StateServerRole(); 17 | stateServerRole.stateServer1(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/ChinaMysqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class ChinaMysqlExport implements ISqlExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(ChinaMysqlExport.class); 16 | 17 | public void exportSql(List skuList) { 18 | LOG.info("导出中国-mysql文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/ChinaMysqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class ChinaMysqlExport implements ISqlExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(ChinaMysqlExport.class); 16 | 17 | public void exportSql(List skuList) { 18 | LOG.info("导出中国-mysql文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo01/ConcreteImplementorA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 具体对象角色实现类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2023/3/28 11 | */ 12 | public class ConcreteImplementorA implements Implementor { 13 | 14 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteImplementorA.class); 15 | 16 | @Override 17 | public void operationImpl() { 18 | LOG.info("具体实现对象:ConcreteImplementorA operationImpl()"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo01/ConcreteImplementorB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 具体对象角色实现类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2023/3/28 11 | */ 12 | public class ConcreteImplementorB implements Implementor { 13 | 14 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteImplementorB.class); 15 | 16 | @Override 17 | public void operationImpl() { 18 | LOG.info("具体实现对象:ConcreteImplementorB operationImpl()"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo04/Circle.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo04; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2023/2/10 9 | */ 10 | public class Circle extends AbstractShape { 11 | private static final Logger LOG = LoggerFactory.getLogger(Circle.class); 12 | 13 | public Circle(String name) { 14 | super(name); 15 | } 16 | 17 | @Override 18 | public void doDraw(String color) { 19 | LOG.info("用{}颜色画{}", color, name); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/Excel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class Excel2003Export implements IExcelExport { 13 | private static final Logger LOG = LoggerFactory.getLogger(Excel2003Export.class); 14 | 15 | @Override 16 | public void exportExcel(List skuList) { 17 | LOG.info("具体产品:导出excel2003"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/Excel2007Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class Excel2007Export implements IExcelExport { 13 | private static final Logger LOG = LoggerFactory.getLogger(Excel2007Export.class); 14 | 15 | @Override 16 | public void exportExcel(List skuList) { 17 | LOG.info("具体产品:导出excel2007"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/FranceMysqlExport.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class FranceMysqlExport implements ISqlExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(FranceMysqlExport.class); 16 | 17 | public void exportSql(List skuList) { 18 | LOG.info("导出法国-mysql文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo02/ReviewAppImpl.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/8/29 10 | */ 11 | @Component("reviewApp") 12 | public class ReviewAppImpl implements IAppClient { 13 | private static final Logger LOG = LoggerFactory.getLogger(ReviewAppImpl.class); 14 | 15 | public void offline() { 16 | LOG.info("RPC层"); 17 | LOG.info("下线商品评价应用"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /proxy-pattern/src/main/java/com/geekarchitect/patterns/proxy/demo01/AbstractProxy.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.proxy.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public abstract class AbstractProxy implements IOriginal{ 7 | private static final Logger LOG = LoggerFactory.getLogger(AbstractProxy.class); 8 | private IOriginal original; 9 | 10 | public AbstractProxy(IOriginal original) { 11 | this.original = original; 12 | } 13 | 14 | @Override 15 | public void service() { 16 | LOG.info("代理类默认操作"); 17 | original.service(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo02/RecommendAppImpl.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/8/29 10 | */ 11 | @Component("recommendApp") 12 | public class RecommendAppImpl implements IAppClient { 13 | private static final Logger LOG = LoggerFactory.getLogger(RecommendAppImpl.class); 14 | 15 | public void offline() { 16 | LOG.info("RPC层"); 17 | LOG.info("下线商品推荐应用"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/TestStateClientRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | /** 4 | * 测试类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/20 8 | */ 9 | public class TestStateClientRole { 10 | 11 | public static void main(String[] args) { 12 | TestStateClientRole testStateClientRole = new TestStateClientRole(); 13 | testStateClientRole.testStateServer01(); 14 | } 15 | 16 | public void testStateServer01() { 17 | StateClientRole stateClientRole = new StateClientRole(); 18 | stateClientRole.clientMethod(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0105/StrategyServerRole2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0105; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 策略服务方类 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/30 10 | */ 11 | public class StrategyServerRole2 implements IStrategyServerRole { 12 | private static final Logger LOG = LoggerFactory.getLogger(StrategyServerRole2.class); 13 | @Override 14 | public void server(IStrategyDelegateRole strategyDelegateRole) { 15 | //策略2 16 | LOG.info("策略服务方:StrategyServerRole2,执行策略2"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo02/ChinaExcel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class ChinaExcel2003Export implements IExcelExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(ChinaExcel2003Export.class); 16 | 17 | public void exportExcel(List skuList) { 18 | LOG.info("导出中国-excel2003文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/ChinaExcel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class ChinaExcel2003Export implements IExcelExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(ChinaExcel2003Export.class); 16 | 17 | public void exportExcel(List skuList) { 18 | LOG.info("导出中国-excel2003文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo02/GoodsServiceV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Service; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2023/2/8 10 | */ 11 | @Service 12 | public class GoodsServiceV2 implements IGoodsServiceV2 { 13 | private static final Logger LOG = LoggerFactory.getLogger(GoodsServiceV2.class); 14 | 15 | @Override 16 | public void printDetails(ICategory category) { 17 | LOG.info(category.getDetails()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/ConcreteColleagueA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class ConcreteColleagueA extends Colleague { 7 | public ConcreteColleagueA(IMediator m) { 8 | super(m); 9 | m.addColleague(this); 10 | } 11 | 12 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteColleagueA.class); 13 | 14 | @Override 15 | public void receive(String message) { 16 | LOG.info("ConcreteColleagueA: message={}", message); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/ConcreteColleagueB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class ConcreteColleagueB extends Colleague { 7 | public ConcreteColleagueB(IMediator m) { 8 | super(m); 9 | m.addColleague(this); 10 | } 11 | 12 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteColleagueB.class); 13 | 14 | @Override 15 | public void receive(String message) { 16 | LOG.info("ConcreteColleagueB: message={}", message); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/ConcreteColleagueC.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class ConcreteColleagueC extends Colleague { 7 | public ConcreteColleagueC(IMediator m) { 8 | super(m); 9 | m.addColleague(this); 10 | } 11 | 12 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteColleagueC.class); 13 | 14 | @Override 15 | public void receive(String message) { 16 | LOG.info("ConcreteColleagueC: message={}", message); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0105/StrategyServerRole1.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0105; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 策略服务方实现类 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/30 10 | */ 11 | public class StrategyServerRole1 implements IStrategyServerRole { 12 | private static final Logger LOG = LoggerFactory.getLogger(StrategyServerRole1.class); 13 | @Override 14 | public void server(IStrategyDelegateRole strategyDelegateRole) { 15 | //策略1 16 | LOG.info("策略服务方:StrategyServerRole1,执行策略1"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo03/FranceExcel2003Export.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 具体产品 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/6/13 13 | */ 14 | public class FranceExcel2003Export implements IExcelExport { 15 | private static final Logger LOG = LoggerFactory.getLogger(FranceExcel2003Export.class); 16 | 17 | public void exportExcel(List skuList) { 18 | LOG.info("导出法国-excel2003文件"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo03/GoodsServiceV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Service; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2023/2/8 10 | */ 11 | @Service 12 | public class GoodsServiceV3 implements IGoodsServiceV3 { 13 | private static final Logger LOG = LoggerFactory.getLogger(GoodsServiceV3.class); 14 | 15 | @Override 16 | public void printDetails(ICategoryV3 category) { 17 | LOG.info(category.getDetails()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/AbstractExcelExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/6/15 9 | */ 10 | public abstract class AbstractExcelExportFactory implements IExcelExportFactory { 11 | private static final Logger LOG = LoggerFactory.getLogger(Excel2003Export.class); 12 | 13 | @Override 14 | public IExcelExport createExcelExport() { 15 | LOG.info("抽象工厂类,提供一个默认操作"); 16 | return null; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /prototype-pattern/src/main/java/com/geekarchitect/patterns/prototype/demo02/SKU01.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.prototype.demo02; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 商品SKU 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/26 10 | */ 11 | @Data 12 | public class SKU01 { 13 | private String id; 14 | private String name; 15 | /** 16 | * 库存数量 17 | */ 18 | private int quantity; 19 | 20 | public SKU01() { 21 | } 22 | 23 | public SKU01(String id, String name, int quantity) { 24 | this.id = id; 25 | this.name = name; 26 | this.quantity = quantity; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo04/VisitableObjectStructure.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo04; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/2 9 | */ 10 | public class VisitableObjectStructure { 11 | public List visitableList = new ArrayList<>(); 12 | 13 | public void addItem(IVisitable visitable) { 14 | visitableList.add(visitable); 15 | } 16 | 17 | public void service(IVisitor visitor) { 18 | visitableList.forEach(item -> item.accept(visitor)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /abstract-factory-pattern/src/main/java/com/geekarchitect/patterns/abstractfactory/demo01/ClientRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.abstractfactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class ClientRole { 8 | public static void main(String[] args) { 9 | 10 | } 11 | 12 | public void demo01() { 13 | IFactory factory = new FamilyAFactory(); 14 | IProductTypeA productTypeA = factory.createProductTypeA(); 15 | IProductTypeB productTypeB = factory.createProductTypeB(); 16 | productTypeA.doService(); 17 | productTypeB.doService(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo02/ConcreteSingleDimensionalB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 其他维度对象具体类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2023/3/28 11 | */ 12 | public class ConcreteSingleDimensionalB implements ISingleDimensionalA { 13 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteSingleDimensionalB.class); 14 | 15 | @Override 16 | public void doService() { 17 | LOG.info("ConcreteOtherDimensionObjectB doServiceBySecondDimension()"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo01/GoodsService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Service; 6 | 7 | /** 8 | * @author 极客架构师@吴念 9 | * @createTime 2023/2/8 10 | */ 11 | @Service 12 | public class GoodsService implements IGoodsService { 13 | private static final Logger LOG = LoggerFactory.getLogger(GoodsService.class); 14 | 15 | @Override 16 | public void printDetails(IBranchCategory branchCategory) { 17 | LOG.info(branchCategory.getDetails()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0103/IPromotionStrategy.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0103; 2 | 3 | import com.geekarchitect.patterns.demo0101.CartItem; 4 | import com.geekarchitect.patterns.demo0101.Member; 5 | 6 | import java.math.BigDecimal; 7 | 8 | /** 9 | * 促销策略接口 10 | * 11 | * @author 极客架构师@吴念 12 | * @createTime 2022/3/26 13 | */ 14 | public interface IPromotionStrategy { 15 | /** 16 | * 计算促销金额 17 | * 18 | * @author: 极客架构师@吴念 19 | * @date: 2022/3/26 20 | * @param: 21 | * @return: 22 | */ 23 | BigDecimal calculate(CartItem cartItem, Member member); 24 | } 25 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo02/ICloudFileV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo02; 2 | 3 | import com.geekarchitect.patterns.visitor.demo01.CloudFileType; 4 | import com.geekarchitect.patterns.visitor.demo01.FileInfo; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/2 9 | */ 10 | public interface ICloudFileV2 { 11 | String getName(); 12 | 13 | String getPath(); 14 | 15 | ICloudFileV2 getParent(); 16 | 17 | CloudFileType getCloudFileType(); 18 | 19 | boolean isDir(); 20 | 21 | void accept(ICloudFileVisitorV2 cloudFileVisitor, FileInfo fileInfo); 22 | } 23 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo05/VisitableObjectStructureV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo05; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/2 9 | */ 10 | public class VisitableObjectStructureV2 { 11 | public List visitableList = new ArrayList<>(); 12 | 13 | public void addItem(IVisitableV2 visitable) { 14 | visitableList.add(visitable); 15 | } 16 | 17 | public void service(IVisitorV2 visitor) { 18 | visitableList.forEach(item -> visitor.visit(item)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/ConcreteFactoryA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 具体工厂:用于生产ConcreteProductA产品 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class ConcreteFactoryA extends AbstractFactory { 13 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteFactoryA.class); 14 | 15 | public IProduct createProduct() { 16 | LOG.info("具体工厂:用于生产ConcreteProductA产品"); 17 | return new ConcreteProductA(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/ConcreteFactoryB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 具体工厂:用于生产ConcreteProductB产品 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class ConcreteFactoryB extends AbstractFactory { 13 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteFactoryB.class); 14 | 15 | public IProduct createProduct() { 16 | LOG.info("具体工厂:用于生产ConcreteProductB产品"); 17 | return new ConcreteProductB(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo02/IOrderServiceV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo02; 2 | 3 | import com.geekarchitect.patterns.observer.demo01.IBusinessService; 4 | import com.geekarchitect.patterns.observer.demo01.OrderInfo; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/11/17 9 | */ 10 | public interface IOrderServiceV2 { 11 | void pay(OrderInfo orderInfo); 12 | 13 | void addBusinessService(IBusinessService businessService); 14 | 15 | void removeBusinessService(IBusinessService businessService); 16 | 17 | void notifyAllBusinessService(OrderInfo orderInfo); 18 | } 19 | -------------------------------------------------------------------------------- /composite-pattern/src/main/java/com/geekarchitect/patterns/composite/demo05/IndividualObject.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.composite.demo05; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2023/3/2 9 | */ 10 | public class IndividualObject extends AbstractUnifiedObject { 11 | private static final Logger LOG = LoggerFactory.getLogger(IndividualObject.class); 12 | 13 | public IndividualObject(String name) { 14 | super(name); 15 | } 16 | 17 | 18 | @Override 19 | public void doService() { 20 | LOG.info("单体对象:{} 业务方法", name); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo01/AbstractDecorator.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public abstract class AbstractDecorator implements IOriginal{ 7 | private static final Logger LOG = LoggerFactory.getLogger(AbstractDecorator.class); 8 | private IOriginal original; 9 | 10 | public AbstractDecorator(IOriginal original) { 11 | this.original = original; 12 | } 13 | 14 | @Override 15 | public void service() { 16 | LOG.info("装饰器默认操作"); 17 | original.service(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/Excel2003ExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/6/15 9 | */ 10 | public class Excel2003ExportFactory extends AbstractExcelExportFactory { 11 | private static final Logger LOG = LoggerFactory.getLogger(Excel2003ExportFactory.class); 12 | 13 | @Override 14 | public IExcelExport createExcelExport() { 15 | LOG.info("具体工厂:创建Excel2003Export对象"); 16 | return new Excel2003Export(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo03/Excel2007ExportFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/6/15 9 | */ 10 | public class Excel2007ExportFactory extends AbstractExcelExportFactory { 11 | private static final Logger LOG = LoggerFactory.getLogger(Excel2007ExportFactory.class); 12 | 13 | @Override 14 | public IExcelExport createExcelExport() { 15 | LOG.info("具体工厂:创建Excel2007Export对象"); 16 | return new Excel2007Export(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0202/DeletedOrderStateService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0202; 2 | 3 | import com.geekarchitect.patterns.demo0201.IOrderService; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | /** 8 | * 已删除订单状态服务 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/4/18 12 | */ 13 | public class DeletedOrderStateService extends AbstractOrderStateService { 14 | private static final Logger LOG = LoggerFactory.getLogger(DeletedOrderStateService.class); 15 | 16 | public DeletedOrderStateService(IOrderService orderService) { 17 | super(orderService); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo01/BookBusinessService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * 手机业务服务 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/11/17 12 | */ 13 | @Component 14 | public class BookBusinessService implements IBusinessService { 15 | private static final Logger LOG = LoggerFactory.getLogger(BookBusinessService.class); 16 | 17 | @Override 18 | public void doService(OrderInfo orderInfo) { 19 | LOG.info("垂直业务部门:图书业务服务"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo01/SimpleFactoryRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo01; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/13 6 | */ 7 | public class SimpleFactoryRole { 8 | public static IProductRole createProduct(ProductType productType){ 9 | IProductRole productRole=null; 10 | switch (productType){ 11 | case PRODUCT_A: 12 | productRole=new ProductA(); 13 | break; 14 | case PRODUCT_B: 15 | productRole=new ProductB(); 16 | } 17 | return productRole; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0105/IStrategyDelegateRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0105; 2 | 3 | /** 4 | * 策略代理方接口 5 | * @author 极客架构师@吴念 6 | * @createTime 2022/3/30 7 | */ 8 | public interface IStrategyDelegateRole { 9 | /** 10 | * 11 | * @author: 极客架构师@吴念 12 | * @date: 2022/4/4 13 | * @param: [strategyServerRole] 14 | * @return: void 15 | */ 16 | void setStrategyDelegate(IStrategyServerRole strategyServerRole); 17 | /** 18 | * 19 | * @author: 极客架构师@吴念 20 | * @date: 2022/4/4 21 | * @param: [] 22 | * @return: void 23 | */ 24 | void doServer(); 25 | } 26 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo04/ActivityContext.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo04; 2 | 3 | 4 | import com.geekarchitect.patterns.cor.demo02.Activity; 5 | import com.geekarchitect.patterns.cor.demo02.Member; 6 | import lombok.Data; 7 | import org.apache.commons.chain.impl.ContextBase; 8 | 9 | /** 10 | * 请求角色: 11 | * 既封装请求参数,又封装处理结果 12 | * 13 | * @author 极客架构师@吴念 14 | * @createTime 2022/9/16 15 | */ 16 | @Data 17 | public class ActivityContext extends ContextBase { 18 | public static String MEMBER_KEY="member"; 19 | private Member member; 20 | private Activity activity; 21 | //处理结果 22 | private boolean result; 23 | } 24 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo01/MobileBusinessService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * 手机业务服务 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/11/17 12 | */ 13 | @Component 14 | public class MobileBusinessService implements IBusinessService { 15 | private static final Logger LOG = LoggerFactory.getLogger(MobileBusinessService.class); 16 | 17 | @Override 18 | public void doService(OrderInfo orderInfo) { 19 | LOG.info("垂直业务部门:手机业务服务"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo03/Observable.uml: -------------------------------------------------------------------------------- 1 | 2 | 3 | JAVA 4 | java.util.Observable 5 | 6 | java.util.Observer 7 | java.util.Observable 8 | 9 | 10 | 11 | 12 | 13 | 14 | Methods 15 | 16 | All 17 | private 18 | 19 | 20 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo01/RefinedAbstraction.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 扩展的抽象对象角色具体类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2023/3/28 11 | */ 12 | public class RefinedAbstraction extends Abstraction { 13 | 14 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteImplementorA.class); 15 | 16 | public RefinedAbstraction(Implementor implementor) { 17 | super(implementor); 18 | } 19 | 20 | public void refinedOperation() { 21 | LOG.info("扩展的抽象对象:refinedOperation()"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/InvokerRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 命令调用者角色 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/26 11 | */ 12 | public class InvokerRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(InvokerRole.class); 14 | private final ICommandRole command; 15 | 16 | public InvokerRole(ICommandRole command) { 17 | this.command = command; 18 | } 19 | 20 | public void action() { 21 | LOG.info("命令调用者角色:action()"); 22 | this.command.execute(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0104/IPromotionService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0104; 2 | 3 | import com.geekarchitect.patterns.demo0101.CartItem; 4 | import com.geekarchitect.patterns.demo0101.Member; 5 | import com.geekarchitect.patterns.demo0103.IPromotionStrategy; 6 | 7 | import java.math.BigDecimal; 8 | 9 | /** 10 | * 促销服务接口 11 | * 12 | * @author 极客架构师@吴念 13 | * @createTime 2022/3/26 14 | */ 15 | public interface IPromotionService { 16 | BigDecimal doCalculate(CartItem cartItem, Member member); 17 | 18 | IPromotionStrategy getPromotionStrategy(); 19 | 20 | void setPromotionStrategy(IPromotionStrategy promotionStrategy); 21 | } 22 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/AbstractExecutorRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 命令执行者抽象类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/26 11 | */ 12 | public abstract class AbstractExecutorRole implements IExecutorRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(AbstractExecutorRole.class); 14 | 15 | @Override 16 | public void doExecute01() { 17 | LOG.info("默认doExecute01"); 18 | } 19 | 20 | @Override 21 | public void doExecute02() { 22 | LOG.info("默认doExecute02"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo04/ActivityControllerV3_verification.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | header 极客架构师 3 | footer 专注架构师成长 4 | title 用户资格校验-apache-commons-chain版 5 | autonumber 6 | participant 用户 7 | 用户 -> ActivityControllerV3 : verification 8 | activate ActivityControllerV3 9 | ActivityControllerV3 -> IVerificationServiceV3 : isLegalMember 10 | activate IVerificationServiceV3 11 | IVerificationServiceV3 -> VerificationServiceImplV3 : isLegalMember 12 | activate VerificationServiceImplV3 13 | VerificationServiceImplV3 --> IVerificationServiceV3 14 | deactivate VerificationServiceImplV3 15 | IVerificationServiceV3 --> ActivityControllerV3 16 | deactivate IVerificationServiceV3 17 | return 18 | @enduml -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo03/RecommendAppImplV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/8/29 12 | */ 13 | @Component(value = "recommendAppImplV2") 14 | public class RecommendAppImplV2 implements IAppClientV2 { 15 | private static final Logger LOG = LoggerFactory.getLogger(RecommendAppImplV2.class); 16 | 17 | public void offline(Map para) { 18 | LOG.info("RPC层"); 19 | LOG.info("下线商品推荐应用"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /cor/src/main/java/com/geekarchitect/patterns/cor/demo01/Sender.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.cor.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 请求发送者角色 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/9/15 11 | */ 12 | public class Sender { 13 | private static final Logger LOG = LoggerFactory.getLogger(Sender.class); 14 | 15 | public void service() { 16 | LOG.info("请求发送者角色:Sender"); 17 | LOG.info("封装请求对象"); 18 | Request request = new Request(); 19 | Response response = new Response(); 20 | Chain chain = new Chain(); 21 | chain.getFirstHandler().handleRequest(request, response); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /flyweight-pattern/src/main/java/com/geekarchitect/patterns/demo0305/UnsharedFlyweightRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0305; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 非共享的元角色:它里面包含所有状态,所以无法共享,与细粒度对象fineGrainedRole作用完全一样,不同之处是,它强调了非共享性。 7 | * 一般很少使用。 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/5/7 11 | */ 12 | @Data 13 | public class UnsharedFlyweightRole { 14 | private String intrinsicState1; 15 | private String intrinsicState2; 16 | private FineGrainedRole fineGrainedRole; 17 | 18 | public UnsharedFlyweightRole(FineGrainedRole fineGrainedRole) { 19 | this.fineGrainedRole = fineGrainedRole; 20 | } 21 | 22 | public void server() { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo02/ConcreteSingleDimensionalA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo02; 2 | 3 | import com.geekarchitect.patterns.bridge.demo01.ConcreteImplementorA; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | /** 8 | * 其他维度对象具体类 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2023/3/28 12 | */ 13 | public class ConcreteSingleDimensionalA implements ISingleDimensionalA { 14 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteImplementorA.class); 15 | 16 | @Override 17 | public void doService() { 18 | LOG.info("ConcreteOtherDimensionObjectA doServiceBySecondDimension()"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo03/ReviewAppImplV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/8/29 12 | */ 13 | @Component(value = "reviewAppImplV2") 14 | public class ReviewAppImplV2 implements IAppClientV2 { 15 | private static final Logger LOG = LoggerFactory.getLogger(ReviewAppImplV2.class); 16 | 17 | @Override 18 | public void offline(Map para) { 19 | LOG.info("RPC层"); 20 | LOG.info("下线商品评价应用"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo02/AbstractFactory.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo02; 2 | 3 | /** 4 | * 抽象工厂:抽象类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/6/22 8 | */ 9 | public abstract class AbstractFactory implements IFactory { 10 | /** 11 | * 钩子方法,提供默认实现。 12 | * 13 | * @return 14 | */ 15 | @Override 16 | public IProductA createProductA() { 17 | return null; 18 | } 19 | 20 | /** 21 | * 模板方法,依赖其他的工厂方法,相当于工厂模式里面的客户方角色 22 | */ 23 | @Override 24 | public final void templateMethod() { 25 | createProductA(); 26 | createProductB(); 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /template-method-pattern/src/main/java/com/geekarchitect/patterns/demo0003/AbstractTemplateRoleService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0003; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/3/4 6 | */ 7 | public abstract class AbstractTemplateRoleService implements IRoleService { 8 | @Override 9 | public final void templateMethod() { 10 | individuationMethod1(); 11 | individuationMethod2(); 12 | hookMethod(); 13 | } 14 | 15 | /** 16 | * 钩子方法,可以被重定义 17 | * 18 | * @author: 极客架构师@吴念 19 | * @date: 2022/3/4 20 | * @param: [] 21 | * @return: void 22 | */ 23 | @Override 24 | public void hookMethod() { 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/ConcreteExecutorRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 命令执行者具体类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/26 11 | */ 12 | public class ConcreteExecutorRole extends AbstractExecutorRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteExecutorRole.class); 14 | 15 | @Override 16 | public void doExecute01() { 17 | LOG.info("命令执行者具体类 doExecute01"); 18 | } 19 | 20 | @Override 21 | public void doExecute02() { 22 | LOG.info("命令执行者具体类 doExecute02"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo02/DegradeController_offline.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | header 极客架构师 3 | footer 专注架构师成长 4 | title 降级模块-无设计模式 5 | autonumber 6 | participant 用户 7 | 用户 -> DegradeController : offline 8 | activate DegradeController 9 | DegradeController -> IDegradeService : offline 10 | activate IDegradeService 11 | IDegradeService -> DegradeServiceImpl : offline 12 | activate DegradeServiceImpl 13 | DegradeServiceImpl -> IAppClient : offline 14 | activate IAppClient 15 | IAppClient --> DegradeServiceImpl 16 | deactivate IAppClient 17 | DegradeServiceImpl --> IDegradeService 18 | deactivate DegradeServiceImpl 19 | IDegradeService --> DegradeController 20 | deactivate IDegradeService 21 | return 22 | @enduml -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/AbstractSpecificStateServerRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | /** 4 | * 特定状态服务方-抽象类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/4/20 8 | */ 9 | public abstract class AbstractSpecificStateServerRole implements ISpecificStateServerRole { 10 | protected IStateServerRole stateServerRole; 11 | 12 | public AbstractSpecificStateServerRole(IStateServerRole stateServerRole) { 13 | this.stateServerRole = stateServerRole; 14 | } 15 | 16 | @Override 17 | public void stateServer1() { 18 | //默认实现 19 | } 20 | 21 | @Override 22 | public void stateServer2() { 23 | //默认实现 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0205/SpecificStateServerRoleForState01.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0205; 2 | 3 | import com.geekarchitect.patterns.demo0204.IStateServerRole; 4 | 5 | /** 6 | * 状态01对应的特定状态服务方对象 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/4/27 10 | */ 11 | public class SpecificStateServerRoleForState01 extends AbstractSpecificStateServerRole { 12 | 13 | public SpecificStateServerRoleForState01(IStateServerRole stateServerRole, StateServer4Helper stateServer4Helper) { 14 | super(stateServerRole, stateServer4Helper); 15 | } 16 | 17 | @Override 18 | public void stateServer4() { 19 | stateServer4Helper.stateServer4ForBiz01(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0205/SpecificStateServerRoleForState02.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0205; 2 | 3 | import com.geekarchitect.patterns.demo0204.IStateServerRole; 4 | 5 | /** 6 | * 状态01对应的特定状态服务方对象 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/4/27 10 | */ 11 | public class SpecificStateServerRoleForState02 extends AbstractSpecificStateServerRole { 12 | 13 | public SpecificStateServerRoleForState02(IStateServerRole stateServerRole, StateServer4Helper stateServer4Helper) { 14 | super(stateServerRole, stateServer4Helper); 15 | } 16 | 17 | @Override 18 | public void stateServer4() { 19 | stateServer4Helper.stateServer4ForBiz02(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo01/CloudImg.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo01; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/2 8 | */ 9 | @Data 10 | public class CloudImg implements ICloudFile { 11 | private String name; 12 | private String path; 13 | private CloudDir parent; 14 | 15 | public CloudImg(String name, String path) { 16 | this.name = name; 17 | this.path = path; 18 | } 19 | 20 | @Override 21 | public CloudFileType getCloudFileType() { 22 | return CloudFileType.IMG; 23 | } 24 | 25 | @Override 26 | public boolean isDir() { 27 | return false; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo01/CloudTxt.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo01; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/2 8 | */ 9 | @Data 10 | public class CloudTxt implements ICloudFile { 11 | private String name; 12 | private String path; 13 | private CloudDir parent; 14 | 15 | public CloudTxt(String name, String path) { 16 | this.name = name; 17 | this.path = path; 18 | } 19 | 20 | @Override 21 | public CloudFileType getCloudFileType() { 22 | return CloudFileType.TXT; 23 | } 24 | 25 | @Override 26 | public boolean isDir() { 27 | return false; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /proxy-pattern/src/test/java/com/geekarchitect/patterns/proxy/demo01/ClientTest.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.proxy.demo01; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import static org.junit.jupiter.api.Assertions.*; 8 | 9 | class ClientTest { 10 | 11 | private static final Logger LOG = LoggerFactory.getLogger(ClientTest.class); 12 | private Client client; 13 | @Test 14 | void service() { 15 | LOG.info("代理器模式通用代码"); 16 | IOriginal original=new ConreteOriginal(); 17 | IOriginal proxy=new ConcreteProxyA(original); 18 | client=new Client(); 19 | client.setOriginal(proxy); 20 | client.service(); 21 | } 22 | } -------------------------------------------------------------------------------- /template-method-pattern/src/main/java/com/geekarchitect/patterns/demo0001/TestOrderService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0001; 2 | 3 | /** 4 | * 测试类 5 | * 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/3/3 8 | */ 9 | public class TestOrderService { 10 | public static void main(String[] args) { 11 | IOrderSerivce orderSerivce = new BjMobileOrderService(); 12 | OrderInfo orderInfo = new OrderInfo(); 13 | orderInfo.setMemberID("1"); 14 | orderInfo.setMemberName("张三"); 15 | orderInfo.setMobileNumber("18702222387"); 16 | orderInfo.setMemberIdentityCard("142724000000003310"); 17 | orderInfo.setOperatorName("北京移动"); 18 | orderSerivce.createOrder(orderInfo); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo02/CountCloudFileVisitorV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo02; 2 | 3 | import com.geekarchitect.patterns.visitor.demo01.FileInfo; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/3 8 | */ 9 | public class CountCloudFileVisitorV2 implements ICloudFileVisitorV2 { 10 | @Override 11 | public void visit(CloudDirV2 cloudDirV2, FileInfo fileInfo) { 12 | 13 | } 14 | 15 | @Override 16 | public void visit(CloudTxtV2 cloudTxtV2, FileInfo fileInfo) { 17 | fileInfo.increase(); 18 | } 19 | 20 | @Override 21 | public void visit(CloudImgV2 cloudImgV2, FileInfo fileInfo) { 22 | fileInfo.increase(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mediator-pattern/src/main/java/com/geekarchitect/patterns/mediator/demo01/ConcreteMediator.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.mediator.demo01; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class ConcreteMediator implements IMediator { 7 | private List colleagueList = new ArrayList<>(); 8 | 9 | @Override 10 | public void send(String message, IColleague colleague) { 11 | for (IColleague item : colleagueList) { 12 | if (item != colleague) { 13 | item.receive(message); 14 | } 15 | } 16 | } 17 | 18 | @Override 19 | public void addColleague(IColleague iColleague) { 20 | this.colleagueList.add(iColleague); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /decorator-pattern/src/main/java/com/geekarchitect/patterns/decorator/demo01/ConcreteDecoratorA.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | public class ConcreteDecoratorA extends AbstractDecorator{ 7 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteDecoratorA.class); 8 | public ConcreteDecoratorA(IOriginal original) { 9 | super(original); 10 | } 11 | 12 | /** 13 | * 装饰器类增加的服务。 14 | */ 15 | void addedService(){ 16 | LOG.info("ConcreteDecoratorA addedService"); 17 | } 18 | 19 | @Override 20 | public void service() { 21 | super.service(); 22 | this.addedService(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /state-pattern/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | state-pattern 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /decorator-pattern/src/test/java/com/geekarchitect/patterns/decorator/demo01/ClientTest.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.decorator.demo01; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import static org.junit.jupiter.api.Assertions.*; 8 | 9 | class ClientTest { 10 | private static final Logger LOG = LoggerFactory.getLogger(ClientTest.class); 11 | private Client client; 12 | @Test 13 | void service() { 14 | LOG.info("装饰器模式通用代码"); 15 | IOriginal original=new ConreteOriginal(); 16 | IOriginal decorator=new ConcreteDecoratorA(original); 17 | client=new Client(); 18 | client.setOriginal(decorator); 19 | client.service(); 20 | } 21 | } -------------------------------------------------------------------------------- /prototype-pattern/src/main/java/com/geekarchitect/patterns/prototype/demo02/SKU011.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.prototype.demo02; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 商品SKU 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/26 10 | */ 11 | @Data 12 | public class SKU011 implements Cloneable { 13 | private String id; 14 | private String name; 15 | private int quantity; 16 | 17 | public SKU011() { 18 | } 19 | 20 | public SKU011(String id, String name, int quantity) { 21 | this.id = id; 22 | this.name = name; 23 | this.quantity = quantity; 24 | } 25 | 26 | @Override 27 | public Object clone() throws CloneNotSupportedException { 28 | return super.clone(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /strategy-pattern/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | strategy-pattern 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /prototype-pattern/src/main/java/com/geekarchitect/patterns/prototype/demo03/SKU01.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.prototype.demo03; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 商品SKU 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/26 10 | */ 11 | @Data 12 | public class SKU01 implements Cloneable { 13 | private String id; 14 | private String name; 15 | private transient int quantity; 16 | 17 | public SKU01() { 18 | } 19 | 20 | public SKU01(String id, String name, int quantity) { 21 | this.id = id; 22 | this.name = name; 23 | this.quantity = quantity; 24 | } 25 | 26 | @Override 27 | public Object clone() throws CloneNotSupportedException { 28 | return super.clone(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /flyweight-pattern/src/main/java/com/geekarchitect/patterns/demo0305/FlyweightRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0305; 2 | 3 | import lombok.Data; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | /** 8 | * 元角色:只保持内部状态信息 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/5/7 12 | */ 13 | @Data 14 | public class FlyweightRole { 15 | private static final Logger LOG = LoggerFactory.getLogger(FlyweightRole.class); 16 | private String intrinsicState1; 17 | private String intrinsicState2; 18 | 19 | public void server(FineGrainedRole fineGrainedRole) { 20 | LOG.info("内部状态:{} 外部状态:{}", intrinsicState1 + intrinsicState2, fineGrainedRole.getExtrinsicState1() + fineGrainedRole.getExtrinsicState2()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /factory-method-pattern/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | factory-method-pattern 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /simple-factory-pattern/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | simple-factory-pattern 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /simple-factory-pattern/src/main/java/com/geekarchitect/patterns/simplefactory/demo04/FileExportServiceV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.simplefactory.demo04; 2 | 3 | import com.geekarchitect.patterns.simplefactory.demo03.*; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/6/13 12 | */ 13 | public class FileExportServiceV2 { 14 | private static final Logger LOG = LoggerFactory.getLogger(FileExportServiceV2.class); 15 | public void exportFile(List skuList,FileType fileType){ 16 | LOG.info("文件导出服务"); 17 | IExcelExport excelExport=SimpleFactory.createExcelExport(fileType); 18 | excelExport.exportExcel(skuList); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0201/OrderStateEnum.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0201; 2 | 3 | public enum OrderStateEnum { 4 | UNPAID("未支付", 0), PAID("已支付", 1), DELIVERED("已发货", 2), DONE("已妥投", 3), DELETED("已删除", 4); 5 | 6 | private String name; 7 | private int code; 8 | 9 | OrderStateEnum(String name, int code) { 10 | this.name = name; 11 | this.code = code; 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 int getCode() { 23 | return code; 24 | } 25 | 26 | public void setCode(int code) { 27 | this.code = code; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0203/ReminderStateEnum.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0203; 2 | 3 | /** 4 | * 催单状态枚举 5 | */ 6 | public enum ReminderStateEnum { 7 | BEFORE_DELIVER("发货前", 0), AFTER_DELIVER("发货后", 1); 8 | 9 | private String name; 10 | private int code; 11 | 12 | ReminderStateEnum(String name, int code) { 13 | this.name = name; 14 | this.code = code; 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | } 24 | 25 | public int getCode() { 26 | return code; 27 | } 28 | 29 | public void setCode(int code) { 30 | this.code = code; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /state-pattern/src/main/java/com/geekarchitect/patterns/demo0204/SpecificStateServerRole01.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0204; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 特定状态服务方实现类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/4/18 11 | */ 12 | public class SpecificStateServerRole01 extends AbstractSpecificStateServerRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(SpecificStateServerRole01.class); 14 | 15 | public SpecificStateServerRole01(IStateServerRole stateServerRole) { 16 | super(stateServerRole); 17 | } 18 | 19 | @Override 20 | public void stateServer1() { 21 | LOG.info("特定状态服务方:SpecificStateServerRole01,执行stateServer1方法"); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0101/SKU.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0101; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | /** 8 | * 商品SKU 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/3/26 12 | */ 13 | @Data 14 | public class SKU { 15 | 16 | private String name; 17 | private BigDecimal price; 18 | private PromotionStrategyEnum promotionStrategy; 19 | private String id; 20 | 21 | public SKU() { 22 | } 23 | 24 | public SKU(String name, BigDecimal price, PromotionStrategyEnum promotionStrategy, String id) { 25 | this.name = name; 26 | this.price = price; 27 | this.promotionStrategy = promotionStrategy; 28 | this.id = id; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /template-method-pattern/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | template-method-pattern 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /template-method-pattern/src/main/java/com/geekarchitect/patterns/demo0001/OrderInfo.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0001; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 会员订单信息 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/3 10 | */ 11 | @Data 12 | public class OrderInfo { 13 | /** 14 | * 会员id 15 | */ 16 | public String memberID; 17 | /** 18 | * 会员选购的手机号码 19 | */ 20 | public String mobileNumber; 21 | /** 22 | * 会员姓名 23 | */ 24 | public String memberName; 25 | /** 26 | * 会员身份证号码 27 | */ 28 | public String memberIdentityCard; 29 | /** 30 | * 运营商名称 31 | */ 32 | public String operatorName; 33 | /** 34 | * 运营商编号 35 | */ 36 | public String operatorID; 37 | } 38 | -------------------------------------------------------------------------------- /abstract-factory-pattern/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | abstract-factory-pattern 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /template-method-pattern/src/main/java/com/geekarchitect/patterns/demo0002/OrderInfo.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0002; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 会员订单信息 7 | * 8 | * @author 极客架构师@吴念 9 | * @createTime 2022/3/3 10 | */ 11 | @Data 12 | public class OrderInfo { 13 | /** 14 | * 会员id 15 | */ 16 | private String memberID; 17 | /** 18 | * 会员选购的手机号码 19 | */ 20 | private String mobileNumber; 21 | /** 22 | * 会员姓名 23 | */ 24 | private String memberName; 25 | /** 26 | * 会员身份证号码 27 | */ 28 | private String memberIdentityCard; 29 | /** 30 | * 运营商名称 31 | */ 32 | private String operatorName; 33 | /** 34 | * 运营商编号 35 | */ 36 | private String operatorID; 37 | } 38 | -------------------------------------------------------------------------------- /united-strategy-template/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | DesignPatterns 7 | com.geekarchitect.patterns 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | united-strategy-template 13 | 14 | 15 | 8 16 | 8 17 | 18 | 19 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo01/CommandCreatorRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 命令创建者 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/26 11 | */ 12 | public class CommandCreatorRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(CommandCreatorRole.class); 14 | 15 | public void service() { 16 | LOG.info("命令创建者角色:service"); 17 | IExecutorRole executorRole = new ConcreteExecutorRole(); 18 | ICommandRole commandRoleA = new ConcreteCommandRoleA(executorRole); 19 | InvokerRole invokerRole = new InvokerRole(commandRoleA); 20 | invokerRole.action(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo02/DegradeController.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/29 11 | */ 12 | @Controller 13 | public class DegradeController { 14 | private static final Logger LOG = LoggerFactory.getLogger(DegradeController.class); 15 | @Autowired 16 | private IDegradeService degradeService; 17 | 18 | public void offline(int appCode) { 19 | LOG.info("Controller层——DegradeController"); 20 | degradeService.offline(appCode); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /united-strategy-template/src/main/java/com/geekarchitect/patterns/demo9901/SKU.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo9901; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | /** 8 | * 商品SKU 9 | * 10 | * @author 极客架构师@吴念 11 | * @createTime 2022/3/26 12 | */ 13 | @Data 14 | public class SKU { 15 | 16 | private String name; 17 | private BigDecimal price; 18 | private PromotionStrategyEnum promotionStrategy; 19 | private String id; 20 | 21 | public SKU() { 22 | } 23 | 24 | public SKU(String name, BigDecimal price, PromotionStrategyEnum promotionStrategy, String id) { 25 | this.name = name; 26 | this.price = price; 27 | this.promotionStrategy = promotionStrategy; 28 | this.id = id; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /visitor-pattern/src/main/java/com/geekarchitect/patterns/visitor/demo01/CloudFileService.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.visitor.demo01; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author 极客架构师@吴念 7 | * @createTime 2022/11/2 8 | */ 9 | public class CloudFileService { 10 | public void countFile(ICloudFile ICloudFile, FileInfo fileInfo) { 11 | if (!ICloudFile.isDir()) { 12 | throw new IllegalArgumentException(); 13 | } 14 | List childList = ((CloudDir) ICloudFile).getChildList(); 15 | childList.forEach(file -> { 16 | if (file.isDir()) { 17 | countFile(file, fileInfo); 18 | } else { 19 | fileInfo.increase(); 20 | } 21 | }); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /bridge-pattern/src/main/java/com/geekarchitect/patterns/bridge/demo02/ConcreteMultiDimensionalB.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.bridge.demo02; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 第一维对象对象具体类 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2023/3/28 11 | */ 12 | public class ConcreteMultiDimensionalB extends AbstractMultiDimensional { 13 | 14 | private static final Logger LOG = LoggerFactory.getLogger(ConcreteMultiDimensionalB.class); 15 | 16 | public ConcreteMultiDimensionalB(ISingleDimensionalA otherDimensionObject) { 17 | super(otherDimensionObject); 18 | } 19 | 20 | public void refinedService() { 21 | //扩展代码 22 | LOG.info("ConcreteMultiDimensionalB refinedService()"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /singleton-pattern/src/main/java/com/geekarchitect/patterns/singleton/demo03/InstanceClientRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.singleton.demo03; 2 | 3 | /** 4 | * @author 极客架构师@吴念 5 | * @createTime 2022/6/1 6 | */ 7 | public class InstanceClientRole { 8 | public static void main(String[] args) { 9 | InstanceClientRole instanceClientRole=new InstanceClientRole(); 10 | instanceClientRole.service01(); 11 | instanceClientRole.service02(); 12 | } 13 | public void service01(){ 14 | EarlyInstance earlyInstance=EarlyInstance.getInstance(); 15 | earlyInstance.doService(); 16 | } 17 | public void service02(){ 18 | LazyInstance lazyInstance=LazyInstance.getInstance(); 19 | lazyInstance.doService(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo03/DegradeControllerV2.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo03; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/29 11 | */ 12 | @Controller 13 | public class DegradeControllerV2 { 14 | private static final Logger LOG = LoggerFactory.getLogger(DegradeControllerV2.class); 15 | @Autowired 16 | private IDegradeServiceV2 degradeServiceV2; 17 | 18 | public void offline(int appCode) { 19 | LOG.info("Controller层——DegradeController"); 20 | degradeServiceV2.offline(appCode); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo04/CommandManagerImpl_startTimeJob.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | header 极客架构师 3 | footer 专注架构师成长 4 | title 降级模块-命令模式(执行命令阶段) 5 | autonumber 6 | participant 用户 7 | 用户 -> CommandManagerImpl : startTimeJob 8 | activate CommandManagerImpl 9 | CommandManagerImpl -> Anonymous : run 10 | activate Anonymous 11 | Anonymous -> ICommand : execute 12 | activate ICommand 13 | ICommand -> CommandImpl : execute 14 | activate CommandImpl 15 | CommandImpl -> IAppClientV2 : offline 16 | activate IAppClientV2 17 | IAppClientV2 --> CommandImpl 18 | deactivate IAppClientV2 19 | CommandImpl --> ICommand 20 | deactivate CommandImpl 21 | ICommand --> Anonymous 22 | deactivate ICommand 23 | Anonymous --> CommandManagerImpl 24 | deactivate Anonymous 25 | return 26 | @enduml -------------------------------------------------------------------------------- /command-pattern/src/main/java/com/geekarchitect/patterns/command/demo04/DegradeControllerV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.command.demo04; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | 8 | /** 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/8/29 11 | */ 12 | @Controller 13 | public class DegradeControllerV3 { 14 | private static final Logger LOG = LoggerFactory.getLogger(DegradeControllerV3.class); 15 | @Autowired 16 | private IDegradeServiceV3 degradeServiceV3; 17 | 18 | public void offline(int appCode) { 19 | LOG.info("Controller层——DegradeController"); 20 | degradeServiceV3.offline(appCode); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/TestFactoryMethod.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/6/22 9 | */ 10 | public class TestFactoryMethod { 11 | private static final Logger LOG = LoggerFactory.getLogger(TestFactoryMethod.class); 12 | 13 | public static void main(String[] args) { 14 | TestFactoryMethod testFactoryMethod = new TestFactoryMethod(); 15 | testFactoryMethod.demo01(); 16 | } 17 | 18 | public void demo01() { 19 | LOG.info("工厂方法模式-通用代码-普通形态"); 20 | ClientRole clientRole = new ClientRole(); 21 | clientRole.service(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /factory-method-pattern/src/main/java/com/geekarchitect/patterns/factorymethod/demo01/ClientRole.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.factorymethod.demo01; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | /** 7 | * 客户方角色 8 | * 9 | * @author 极客架构师@吴念 10 | * @createTime 2022/6/13 11 | */ 12 | public class ClientRole { 13 | private static final Logger LOG = LoggerFactory.getLogger(ClientRole.class); 14 | 15 | public void service() { 16 | LOG.info("客户方角色:提供服务"); 17 | IFactory factory = new ConcreteFactoryA(); 18 | IProduct product = factory.createProduct(); 19 | product.doService(); 20 | 21 | factory = new ConcreteFactoryB(); 22 | product = factory.createProduct(); 23 | product.doService(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /observer-pattern/src/main/java/com/geekarchitect/patterns/observer/demo03/BookBusinessServiceV3.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.observer.demo03; 2 | 3 | import com.geekarchitect.patterns.observer.demo01.OrderInfo; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.util.Observable; 8 | import java.util.Observer; 9 | 10 | /** 11 | * 手机业务服务 12 | * 13 | * @author 极客架构师@吴念 14 | * @createTime 2022/11/17 15 | */ 16 | public class BookBusinessServiceV3 implements Observer { 17 | private static final Logger LOG = LoggerFactory.getLogger(BookBusinessServiceV3.class); 18 | 19 | @Override 20 | public void update(Observable o, Object arg) { 21 | OrderInfo orderInfo = (OrderInfo) arg; 22 | LOG.info("垂直业务部门:图书业务服务,订单信息{}", orderInfo); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /strategy-pattern/src/main/java/com/geekarchitect/patterns/demo0101/Utils.java: -------------------------------------------------------------------------------- 1 | package com.geekarchitect.patterns.demo0101; 2 | 3 | import java.math.BigDecimal; 4 | import java.util.Random; 5 | 6 | /** 7 | * @author 极客架构师@吴念 8 | * @createTime 2022/4/2 9 | */ 10 | public class Utils { 11 | /** 12 | * 生成一个随机数X, 0<=X