From e4b69425255f6010f1f91a9b4853527f59d43515 Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 13:18:12 +0800 Subject: [PATCH 01/37] =?UTF-8?q?=E5=8C=85=E5=90=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/jarRepositories.xml | 20 + .idea/workspace.xml | 411 +++++++++++------- .../java/com/mashibing/dp/bridge/v1/Gift.java | 3 - .../java/com/mashibing/dp/bridge/v2/Gift.java | 3 - .../java/com/mashibing/dp/bridge/v3/Gift.java | 3 - .../com/mashibing/dp/bridge/v4/GiftImpl.java | 4 - .../dp/ASM/ClassPrinter.java | 4 +- .../dp/ASM/ClassTransformerTest.java | 13 +- .../dp/ASM/ClassWriteTest.java | 2 +- .../{mashibing => shenyy}/dp/ASM/Main.java | 2 +- .../dp/ASM/MyClassLoader.java | 2 +- .../com/{mashibing => shenyy}/dp/ASM/T1.java | 2 +- .../{mashibing => shenyy}/dp/ASM/Tank.java | 2 +- .../dp/ASM/TimeProxy.java | 2 +- .../dp/Iterator/v1/Main.java | 2 +- .../dp/Iterator/v2/Main.java | 2 +- .../dp/Iterator/v3/ArrayList_.java | 2 +- .../dp/Iterator/v3}/Collection_.java | 2 +- .../dp/Iterator/v3}/LinkedList_.java | 2 +- .../dp/Iterator/v3/Main.java | 2 +- .../dp/Iterator/v4/ArrayList_.java | 2 +- .../dp/Iterator/v4}/Collection_.java | 2 +- .../dp/Iterator/v4}/LinkedList_.java | 2 +- .../dp/Iterator/v4/Main.java | 2 +- .../dp/Iterator/v5/ArrayList_.java | 2 +- .../dp/Iterator/v5/Collection_.java | 2 +- .../dp/Iterator/v5/Iterator_.java | 2 +- .../dp/Iterator/v5}/LinkedList_.java | 2 +- .../dp/Iterator/v5/Main.java | 4 +- .../dp/Iterator/v6/Main.java | 2 +- .../dp/Iterator/v7/ArrayList_.java | 2 +- .../dp/Iterator/v7/Collection_.java | 2 +- .../dp/Iterator/v7/Iterator_.java | 2 +- .../dp/Iterator/v7}/LinkedList_.java | 2 +- .../dp/Iterator/v7/Main.java | 2 +- .../dp/TemplateMethod/Main.java | 2 +- .../com/{mashibing => shenyy}/dp/Test.java | 6 +- .../dp/abstractfactory/AK47.java | 2 +- .../dp/abstractfactory/AbastractFactory.java | 2 +- .../dp/abstractfactory/Bread.java | 2 +- .../dp/abstractfactory/Broom.java | 2 +- .../dp/abstractfactory/Car.java | 2 +- .../dp/abstractfactory/Food.java | 2 +- .../dp/abstractfactory/MagicFactory.java | 2 +- .../dp/abstractfactory/MagicStick.java | 2 +- .../dp/abstractfactory/Main.java | 4 +- .../dp/abstractfactory/ModernFactory.java | 2 +- .../dp/abstractfactory/MushRoom.java | 2 +- .../dp/abstractfactory/Vehicle.java | 2 +- .../dp/abstractfactory/Weapon.java | 2 +- .../dp/adapter/Main.java | 2 +- .../v3 => shenyy/dp/bridge/v1}/Book.java | 2 +- .../v2 => shenyy/dp/bridge/v1}/Flower.java | 2 +- .../bridge/v3 => shenyy/dp/bridge/v1}/GG.java | 2 +- .../java/com/shenyy/dp/bridge/v1/Gift.java | 3 + .../dp/bridge/v1/MM.java | 2 +- .../v1 => shenyy/dp/bridge/v2}/Book.java | 2 +- .../v3 => shenyy/dp/bridge/v2}/Flower.java | 2 +- .../bridge/v1 => shenyy/dp/bridge/v2}/GG.java | 2 +- .../java/com/shenyy/dp/bridge/v2/Gift.java | 3 + .../bridge/v3 => shenyy/dp/bridge/v2}/MM.java | 2 +- .../dp/bridge/v2/WarmGift.java | 2 +- .../dp/bridge/v2/WildGift.java | 2 +- .../{mashibing => shenyy}/dp/bridge/v2/readme | 0 .../v2 => shenyy/dp/bridge/v3}/Book.java | 2 +- .../v1 => shenyy/dp/bridge/v3}/Flower.java | 2 +- .../bridge/v2 => shenyy/dp/bridge/v3}/GG.java | 2 +- .../java/com/shenyy/dp/bridge/v3/Gift.java | 3 + .../bridge/v4 => shenyy/dp/bridge/v3}/MM.java | 2 +- .../dp/bridge/v3/WarmFlower.java | 2 +- .../dp/bridge/v3/WarmGift.java | 2 +- .../dp/bridge/v3/WildGift.java | 2 +- .../{mashibing => shenyy}/dp/bridge/v3/readme | 0 .../dp/bridge/v4/Book.java | 2 +- .../dp/bridge/v4/Flower.java | 2 +- .../dp/bridge/v4/GG.java | 2 +- .../dp/bridge/v4/Gift.java | 2 +- .../com/shenyy/dp/bridge/v4/GiftImpl.java | 4 + .../bridge/v2 => shenyy/dp/bridge/v4}/MM.java | 2 +- .../dp/bridge/v4/WarmGift.java | 2 +- .../dp/bridge/v4/WildGift.java | 2 +- .../{mashibing => shenyy}/dp/bridge/v4/readme | 0 .../dp/builder/ComplexTerrainBuilder.java | 2 +- .../dp/builder/Main.java | 2 +- .../dp/builder/Person.java | 2 +- .../dp/builder/Terrain.java | 2 +- .../dp/builder/TerrainBuilder.java | 2 +- .../{mashibing => shenyy}/dp/cglib/Main.java | 2 +- .../dp/command/Command.java | 2 +- .../dp/command/Content.java | 2 +- .../dp/command/CopyCommand.java | 2 +- .../dp/command/DeleteCommand.java | 2 +- .../dp/command/InsertCommand.java | 2 +- .../dp/command/Main.java | 2 +- .../dp/composite/Main.java | 2 +- .../{mashibing => shenyy}/dp/cor/Main.java | 2 +- .../dp/cor/Main.java.bak | 2 +- .../dp/cor/servlet/v1/Servlet_Main.java | 2 +- .../dp/cor/servlet/v2/Servlet_Main.java | 2 +- .../dp/cor/servlet/v2/readme | 0 .../dp/cor/servlet/v3/Servlet_Main.java | 2 +- .../dp/cor/servlet/v3/readme | 0 .../dp/cor/servlet/v4/Servlet_Main.java | 2 +- .../dp/cor/servlet/v4/readme | 0 .../dp/decorator/Main.java | 2 +- .../{mashibing => shenyy}/dp/decorator/readme | 0 .../dp/factorymethod/Broom.java | 2 +- .../dp/factorymethod/Car.java | 2 +- .../dp/factorymethod/CarFactory.java | 2 +- .../dp/factorymethod/Main.java | 2 +- .../dp/factorymethod/Moveable.java | 2 +- .../dp/factorymethod/Plane.java | 2 +- .../factorymethod/SimpleVehicleFactory.java | 2 +- .../dp/flyweight/BulletPool.java | 2 +- .../dp/flyweight/TestString.java | 2 +- .../dp/intepreter/readme | 0 .../{mashibing => shenyy}/dp/memento/readme | 0 .../dp/observer/v1/Main1.java | 2 +- .../dp/observer/v10/readme | 0 .../dp/observer/v11/readme | 0 .../dp/observer/v2/Main.java | 2 +- .../dp/observer/v3/Main.java | 2 +- .../dp/observer/v4/Main.java | 2 +- .../dp/observer/v5/Main.java | 2 +- .../dp/observer/v6/Main.java | 2 +- .../dp/observer/v7/Main.java | 2 +- .../dp/observer/v8/Main.java | 2 +- .../dp/observer/v9/Test.java | 2 +- .../dp/observer/v9/TestFrame.java | 2 +- .../dp/prototype/v1/Test.java | 2 +- .../dp/prototype/v2/Test.java | 2 +- .../dp/prototype/v3/Test.java | 2 +- .../dp/prototype/v4/Test.java | 2 +- .../dp/proxy/v01/Tank.java | 2 +- .../dp/proxy/v02/Tank.java | 2 +- .../dp/proxy/v03/Tank.java | 2 +- .../dp/proxy/v04/Tank.java | 2 +- .../dp/proxy/v05/Tank.java | 2 +- .../dp/proxy/v06/Tank.java | 2 +- .../dp/proxy/v07/Tank.java | 2 +- .../dp/proxy/v08/Tank.java | 2 +- .../dp/proxy/v09/Tank.java | 2 +- .../dp/proxy/v10/Tank.java | 3 +- .../dp/singleton/Main.java | 2 +- .../dp/singleton/Mgr01.java | 2 +- .../dp/singleton/Mgr02.java | 2 +- .../dp/singleton/Mgr03.java | 2 +- .../dp/singleton/Mgr04.java | 2 +- .../dp/singleton/Mgr05.java | 2 +- .../dp/singleton/Mgr06.java | 2 +- .../dp/singleton/Mgr07.java | 2 +- .../dp/singleton/Mgr08.java | 2 +- .../dp/spring/v1/Main.java | 2 +- .../v2 => shenyy/dp/spring/v1}/Tank.java | 2 +- .../dp/spring/v1/TimeProxy.java | 2 +- .../dp/spring/v2/Main.java | 2 +- .../v1 => shenyy/dp/spring/v2}/Tank.java | 5 +- .../dp/spring/v2/TimeProxy.java | 2 +- .../com/{mashibing => shenyy}/dp/state/readme | 0 .../dp/state/thread/Action.java | 2 +- .../dp/state/thread/NewState.java | 2 +- .../dp/state/thread/RunningState.java | 2 +- .../dp/state/thread/TerminatedState.java | 2 +- .../dp/state/thread/ThreadState_.java | 2 +- .../dp/state/thread/Thread_.java | 2 +- .../{mashibing => shenyy}/dp/state/v1/MM.java | 2 +- .../{mashibing => shenyy}/dp/state/v2/MM.java | 2 +- .../dp/state/v2/MMHappyState.java | 2 +- .../dp/state/v2/MMNervousState.java | 2 +- .../dp/state/v2/MMSadState.java | 2 +- .../dp/state/v2/MMState.java | 2 +- .../dp/strategy/Cat.java | 2 +- .../dp/strategy/CatHeightComparator.java | 2 +- .../dp/strategy/CatWeightComparator.java | 2 +- .../dp/strategy/Comparable.java | 2 +- .../dp/strategy/Comparator.java | 2 +- .../dp/strategy/Dog.java | 2 +- .../dp/strategy/DogComparator.java | 2 +- .../dp/strategy/Main.java | 2 +- .../dp/strategy/Sorter.java | 2 +- .../dp/visitor/Computer.java | 2 +- src/main/resources/app.xml | 10 +- src/main/resources/app_auto.xml | 10 +- 183 files changed, 463 insertions(+), 357 deletions(-) create mode 100644 .idea/jarRepositories.xml delete mode 100644 src/main/java/com/mashibing/dp/bridge/v1/Gift.java delete mode 100644 src/main/java/com/mashibing/dp/bridge/v2/Gift.java delete mode 100644 src/main/java/com/mashibing/dp/bridge/v3/Gift.java delete mode 100644 src/main/java/com/mashibing/dp/bridge/v4/GiftImpl.java rename src/main/java/com/{mashibing => shenyy}/dp/ASM/ClassPrinter.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/ClassTransformerTest.java (79%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/ClassWriteTest.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/Main.java (75%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/MyClassLoader.java (83%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/T1.java (82%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/Tank.java (78%) rename src/main/java/com/{mashibing => shenyy}/dp/ASM/TimeProxy.java (78%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v1/Main.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v2/Main.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v3/ArrayList_.java (94%) rename src/main/java/com/{mashibing/dp/Iterator/v4 => shenyy/dp/Iterator/v3}/Collection_.java (66%) rename src/main/java/com/{mashibing/dp/Iterator/v4 => shenyy/dp/Iterator/v3}/LinkedList_.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v3/Main.java (91%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v4/ArrayList_.java (94%) rename src/main/java/com/{mashibing/dp/Iterator/v3 => shenyy/dp/Iterator/v4}/Collection_.java (66%) rename src/main/java/com/{mashibing/dp/Iterator/v3 => shenyy/dp/Iterator/v4}/LinkedList_.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v4/Main.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v5/ArrayList_.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v5/Collection_.java (72%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v5/Iterator_.java (66%) rename src/main/java/com/{mashibing/dp/Iterator/v7 => shenyy/dp/Iterator/v5}/LinkedList_.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v5/Main.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v6/Main.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v7/ArrayList_.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v7/Collection_.java (72%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v7/Iterator_.java (81%) rename src/main/java/com/{mashibing/dp/Iterator/v5 => shenyy/dp/Iterator/v7}/LinkedList_.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/Iterator/v7/Main.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/TemplateMethod/Main.java (91%) rename src/main/java/com/{mashibing => shenyy}/dp/Test.java (73%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/AK47.java (73%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/AbastractFactory.java (78%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Bread.java (71%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Broom.java (74%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Car.java (73%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Food.java (59%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/MagicFactory.java (87%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/MagicStick.java (73%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Main.java (86%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/ModernFactory.java (87%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/MushRoom.java (72%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Vehicle.java (62%) rename src/main/java/com/{mashibing => shenyy}/dp/abstractfactory/Weapon.java (59%) rename src/main/java/com/{mashibing => shenyy}/dp/adapter/Main.java (93%) rename src/main/java/com/{mashibing/dp/bridge/v3 => shenyy/dp/bridge/v1}/Book.java (50%) rename src/main/java/com/{mashibing/dp/bridge/v2 => shenyy/dp/bridge/v1}/Flower.java (51%) rename src/main/java/com/{mashibing/dp/bridge/v3 => shenyy/dp/bridge/v1}/GG.java (81%) create mode 100644 src/main/java/com/shenyy/dp/bridge/v1/Gift.java rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v1/MM.java (51%) rename src/main/java/com/{mashibing/dp/bridge/v1 => shenyy/dp/bridge/v2}/Book.java (50%) rename src/main/java/com/{mashibing/dp/bridge/v3 => shenyy/dp/bridge/v2}/Flower.java (51%) rename src/main/java/com/{mashibing/dp/bridge/v1 => shenyy/dp/bridge/v2}/GG.java (81%) create mode 100644 src/main/java/com/shenyy/dp/bridge/v2/Gift.java rename src/main/java/com/{mashibing/dp/bridge/v3 => shenyy/dp/bridge/v2}/MM.java (51%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v2/WarmGift.java (52%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v2/WildGift.java (52%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v2/readme (100%) rename src/main/java/com/{mashibing/dp/bridge/v2 => shenyy/dp/bridge/v3}/Book.java (50%) rename src/main/java/com/{mashibing/dp/bridge/v1 => shenyy/dp/bridge/v3}/Flower.java (51%) rename src/main/java/com/{mashibing/dp/bridge/v2 => shenyy/dp/bridge/v3}/GG.java (81%) create mode 100644 src/main/java/com/shenyy/dp/bridge/v3/Gift.java rename src/main/java/com/{mashibing/dp/bridge/v4 => shenyy/dp/bridge/v3}/MM.java (51%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v3/WarmFlower.java (74%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v3/WarmGift.java (52%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v3/WildGift.java (52%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v3/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/Book.java (52%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/Flower.java (53%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/GG.java (85%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/Gift.java (58%) create mode 100644 src/main/java/com/shenyy/dp/bridge/v4/GiftImpl.java rename src/main/java/com/{mashibing/dp/bridge/v2 => shenyy/dp/bridge/v4}/MM.java (51%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/WarmGift.java (75%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/WildGift.java (75%) rename src/main/java/com/{mashibing => shenyy}/dp/bridge/v4/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/builder/ComplexTerrainBuilder.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/builder/Main.java (93%) rename src/main/java/com/{mashibing => shenyy}/dp/builder/Person.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/builder/Terrain.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/builder/TerrainBuilder.java (81%) rename src/main/java/com/{mashibing => shenyy}/dp/cglib/Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/command/Command.java (76%) rename src/main/java/com/{mashibing => shenyy}/dp/command/Content.java (65%) rename src/main/java/com/{mashibing => shenyy}/dp/command/CopyCommand.java (89%) rename src/main/java/com/{mashibing => shenyy}/dp/command/DeleteCommand.java (91%) rename src/main/java/com/{mashibing => shenyy}/dp/command/InsertCommand.java (91%) rename src/main/java/com/{mashibing => shenyy}/dp/command/Main.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/composite/Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/Main.java (98%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/Main.java.bak (98%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v1/Servlet_Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v2/Servlet_Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v2/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v3/Servlet_Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v3/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v4/Servlet_Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/cor/servlet/v4/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/decorator/Main.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/decorator/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/Broom.java (78%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/Car.java (75%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/CarFactory.java (77%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/Main.java (77%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/Moveable.java (53%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/Plane.java (76%) rename src/main/java/com/{mashibing => shenyy}/dp/factorymethod/SimpleVehicleFactory.java (85%) rename src/main/java/com/{mashibing => shenyy}/dp/flyweight/BulletPool.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/flyweight/TestString.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/intepreter/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/memento/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v1/Main1.java (85%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v10/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v11/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v2/Main.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v3/Main.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v4/Main.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v5/Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v6/Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v7/Main.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v8/Main.java (98%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v9/Test.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/observer/v9/TestFrame.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/prototype/v1/Test.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/prototype/v2/Test.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/prototype/v3/Test.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/prototype/v4/Test.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v01/Tank.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v02/Tank.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v03/Tank.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v04/Tank.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v05/Tank.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v06/Tank.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v07/Tank.java (98%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v08/Tank.java (98%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v09/Tank.java (98%) rename src/main/java/com/{mashibing => shenyy}/dp/proxy/v10/Tank.java (97%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Main.java (76%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr01.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr02.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr03.java (95%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr04.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr05.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr06.java (96%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr07.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/singleton/Mgr08.java (90%) rename src/main/java/com/{mashibing => shenyy}/dp/spring/v1/Main.java (91%) rename src/main/java/com/{mashibing/dp/spring/v2 => shenyy/dp/spring/v1}/Tank.java (91%) rename src/main/java/com/{mashibing => shenyy}/dp/spring/v1/TimeProxy.java (87%) rename src/main/java/com/{mashibing => shenyy}/dp/spring/v2/Main.java (91%) rename src/main/java/com/{mashibing/dp/spring/v1 => shenyy/dp/spring/v2}/Tank.java (71%) rename src/main/java/com/{mashibing => shenyy}/dp/spring/v2/TimeProxy.java (93%) rename src/main/java/com/{mashibing => shenyy}/dp/state/readme (100%) rename src/main/java/com/{mashibing => shenyy}/dp/state/thread/Action.java (51%) rename src/main/java/com/{mashibing => shenyy}/dp/state/thread/NewState.java (88%) rename src/main/java/com/{mashibing => shenyy}/dp/state/thread/RunningState.java (85%) rename src/main/java/com/{mashibing => shenyy}/dp/state/thread/TerminatedState.java (85%) rename src/main/java/com/{mashibing => shenyy}/dp/state/thread/ThreadState_.java (72%) rename src/main/java/com/{mashibing => shenyy}/dp/state/thread/Thread_.java (80%) rename src/main/java/com/{mashibing => shenyy}/dp/state/v1/MM.java (89%) rename src/main/java/com/{mashibing => shenyy}/dp/state/v2/MM.java (89%) rename src/main/java/com/{mashibing => shenyy}/dp/state/v2/MMHappyState.java (85%) rename src/main/java/com/{mashibing => shenyy}/dp/state/v2/MMNervousState.java (82%) rename src/main/java/com/{mashibing => shenyy}/dp/state/v2/MMSadState.java (82%) rename src/main/java/com/{mashibing => shenyy}/dp/state/v2/MMState.java (76%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/Cat.java (93%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/CatHeightComparator.java (87%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/CatWeightComparator.java (87%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/Comparable.java (63%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/Comparator.java (80%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/Dog.java (92%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/DogComparator.java (86%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/Main.java (94%) rename src/main/java/com/{mashibing => shenyy}/dp/strategy/Sorter.java (93%) rename src/main/java/com/{mashibing => shenyy}/dp/visitor/Computer.java (98%) diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 8cd27e0..74f182c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,34 +1,195 @@ + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + - - + @@ -561,6 +649,18 @@ + + + @@ -572,21 +672,18 @@ - file://$PROJECT_DIR$/src/main/java/com/mashibing/dp/spring/v2/Main.java + file://$PROJECT_DIR$/src/main/java/com/shenyy/dp/spring/v2/Main.java 12 - jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE-sources.jar!/org/springframework/beans/factory/support/AbstractBeanFactory.java 245 - jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/5.1.6.RELEASE/spring-beans-5.1.6.RELEASE-sources.jar!/org/springframework/beans/factory/support/AbstractBeanFactory.java 319 - diff --git a/src/main/java/com/mashibing/dp/bridge/v1/Gift.java b/src/main/java/com/mashibing/dp/bridge/v1/Gift.java deleted file mode 100644 index e825310..0000000 --- a/src/main/java/com/mashibing/dp/bridge/v1/Gift.java +++ /dev/null @@ -1,3 +0,0 @@ -package com.mashibing.dp.bridge.v1; - -public abstract class Gift {} diff --git a/src/main/java/com/mashibing/dp/bridge/v2/Gift.java b/src/main/java/com/mashibing/dp/bridge/v2/Gift.java deleted file mode 100644 index 438bd42..0000000 --- a/src/main/java/com/mashibing/dp/bridge/v2/Gift.java +++ /dev/null @@ -1,3 +0,0 @@ -package com.mashibing.dp.bridge.v2; - -public abstract class Gift {} diff --git a/src/main/java/com/mashibing/dp/bridge/v3/Gift.java b/src/main/java/com/mashibing/dp/bridge/v3/Gift.java deleted file mode 100644 index 1cbc188..0000000 --- a/src/main/java/com/mashibing/dp/bridge/v3/Gift.java +++ /dev/null @@ -1,3 +0,0 @@ -package com.mashibing.dp.bridge.v3; - -public abstract class Gift {} diff --git a/src/main/java/com/mashibing/dp/bridge/v4/GiftImpl.java b/src/main/java/com/mashibing/dp/bridge/v4/GiftImpl.java deleted file mode 100644 index 3a719c2..0000000 --- a/src/main/java/com/mashibing/dp/bridge/v4/GiftImpl.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mashibing.dp.bridge.v4; - -public class GiftImpl { -} diff --git a/src/main/java/com/mashibing/dp/ASM/ClassPrinter.java b/src/main/java/com/shenyy/dp/ASM/ClassPrinter.java similarity index 94% rename from src/main/java/com/mashibing/dp/ASM/ClassPrinter.java rename to src/main/java/com/shenyy/dp/ASM/ClassPrinter.java index a62b97d..a6aaa23 100644 --- a/src/main/java/com/mashibing/dp/ASM/ClassPrinter.java +++ b/src/main/java/com/shenyy/dp/ASM/ClassPrinter.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; @@ -41,7 +41,7 @@ public static void main(String[] args) throws IOException { ClassPrinter cp = new ClassPrinter(); //ClassReader cr = new ClassReader("java.lang.Runnable"); ClassReader cr = new ClassReader( - ClassPrinter.class.getClassLoader().getResourceAsStream("com/mashibing/dp/ASM/T1.class")); + ClassPrinter.class.getClassLoader().getResourceAsStream("com/shenyy/dp/ASM/T1.class")); cr.accept(cp, 0); diff --git a/src/main/java/com/mashibing/dp/ASM/ClassTransformerTest.java b/src/main/java/com/shenyy/dp/ASM/ClassTransformerTest.java similarity index 79% rename from src/main/java/com/mashibing/dp/ASM/ClassTransformerTest.java rename to src/main/java/com/shenyy/dp/ASM/ClassTransformerTest.java index a412322..db64d8d 100644 --- a/src/main/java/com/mashibing/dp/ASM/ClassTransformerTest.java +++ b/src/main/java/com/shenyy/dp/ASM/ClassTransformerTest.java @@ -1,17 +1,16 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; import org.objectweb.asm.*; import java.io.File; import java.io.FileOutputStream; -import java.io.OutputStream; import static org.objectweb.asm.Opcodes.*; public class ClassTransformerTest { public static void main(String[] args) throws Exception { ClassReader cr = new ClassReader( - ClassPrinter.class.getClassLoader().getResourceAsStream("com/mashibing/dp/ASM/Tank.class")); + ClassPrinter.class.getClassLoader().getResourceAsStream("com/shenyy/dp/ASM/Tank.class")); ClassWriter cw = new ClassWriter(0); ClassVisitor cv = new ClassVisitor(ASM4, cw) { @@ -22,7 +21,7 @@ public MethodVisitor visitMethod(int access, String name, String descriptor, Str return new MethodVisitor(ASM4, mv) { @Override public void visitCode() { - visitMethodInsn(INVOKESTATIC, "com/mashibing/dp/ASM/TimeProxy","before", "()V", false); + visitMethodInsn(INVOKESTATIC, "com/shenyy/dp/ASM/TimeProxy","before", "()V", false); super.visitCode(); } }; @@ -34,16 +33,16 @@ public void visitCode() { MyClassLoader cl = new MyClassLoader(); //Class c = cl.loadClass("com.mashibing.dp.ASM.Tank"); - cl.loadClass("com.mashibing.dp.ASM.TimeProxy"); + cl.loadClass("com.shenyy.dp.ASM.TimeProxy"); Class c2 = cl.defineClass("com.mashibing.dp.ASM.Tank", b2); c2.getConstructor().newInstance(); String path = (String)System.getProperties().get("user.dir"); - File f = new File(path + "/com/mashibing/dp/ASM/"); + File f = new File(path + "/com/shenyy/dp/ASM/"); f.mkdirs(); - FileOutputStream fos = new FileOutputStream(new File(path + "/com/mashibing/dp/ASM/Tank_0.class")); + FileOutputStream fos = new FileOutputStream(new File(path + "/com/shenyy/dp/ASM/Tank_0.class")); fos.write(b2); fos.flush(); fos.close(); diff --git a/src/main/java/com/mashibing/dp/ASM/ClassWriteTest.java b/src/main/java/com/shenyy/dp/ASM/ClassWriteTest.java similarity index 97% rename from src/main/java/com/mashibing/dp/ASM/ClassWriteTest.java rename to src/main/java/com/shenyy/dp/ASM/ClassWriteTest.java index dadd6bb..4210929 100644 --- a/src/main/java/com/mashibing/dp/ASM/ClassWriteTest.java +++ b/src/main/java/com/shenyy/dp/ASM/ClassWriteTest.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; import org.objectweb.asm.ClassWriter; diff --git a/src/main/java/com/mashibing/dp/ASM/Main.java b/src/main/java/com/shenyy/dp/ASM/Main.java similarity index 75% rename from src/main/java/com/mashibing/dp/ASM/Main.java rename to src/main/java/com/shenyy/dp/ASM/Main.java index 2542d85..3ba03a4 100644 --- a/src/main/java/com/mashibing/dp/ASM/Main.java +++ b/src/main/java/com/shenyy/dp/ASM/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/mashibing/dp/ASM/MyClassLoader.java b/src/main/java/com/shenyy/dp/ASM/MyClassLoader.java similarity index 83% rename from src/main/java/com/mashibing/dp/ASM/MyClassLoader.java rename to src/main/java/com/shenyy/dp/ASM/MyClassLoader.java index 9fa89f5..3bf4634 100644 --- a/src/main/java/com/mashibing/dp/ASM/MyClassLoader.java +++ b/src/main/java/com/shenyy/dp/ASM/MyClassLoader.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; class MyClassLoader extends ClassLoader { public Class defineClass(String name, byte[] b) { diff --git a/src/main/java/com/mashibing/dp/ASM/T1.java b/src/main/java/com/shenyy/dp/ASM/T1.java similarity index 82% rename from src/main/java/com/mashibing/dp/ASM/T1.java rename to src/main/java/com/shenyy/dp/ASM/T1.java index 1346670..1008c22 100644 --- a/src/main/java/com/mashibing/dp/ASM/T1.java +++ b/src/main/java/com/shenyy/dp/ASM/T1.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; /** * 光标必须位于类体内,View-Show ByteCode diff --git a/src/main/java/com/mashibing/dp/ASM/Tank.java b/src/main/java/com/shenyy/dp/ASM/Tank.java similarity index 78% rename from src/main/java/com/mashibing/dp/ASM/Tank.java rename to src/main/java/com/shenyy/dp/ASM/Tank.java index 7352e36..74d4545 100644 --- a/src/main/java/com/mashibing/dp/ASM/Tank.java +++ b/src/main/java/com/shenyy/dp/ASM/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; public class Tank { public void move(){ diff --git a/src/main/java/com/mashibing/dp/ASM/TimeProxy.java b/src/main/java/com/shenyy/dp/ASM/TimeProxy.java similarity index 78% rename from src/main/java/com/mashibing/dp/ASM/TimeProxy.java rename to src/main/java/com/shenyy/dp/ASM/TimeProxy.java index 03a7f4b..ff65c6f 100644 --- a/src/main/java/com/mashibing/dp/ASM/TimeProxy.java +++ b/src/main/java/com/shenyy/dp/ASM/TimeProxy.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.ASM; +package com.shenyy.dp.ASM; public class TimeProxy { diff --git a/src/main/java/com/mashibing/dp/Iterator/v1/Main.java b/src/main/java/com/shenyy/dp/Iterator/v1/Main.java similarity index 96% rename from src/main/java/com/mashibing/dp/Iterator/v1/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v1/Main.java index e46e7b1..3b8d49b 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v1/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v1/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v1; +package com.shenyy.dp.Iterator.v1; /** * 构建一个容器,可以添加对象 diff --git a/src/main/java/com/mashibing/dp/Iterator/v2/Main.java b/src/main/java/com/shenyy/dp/Iterator/v2/Main.java similarity index 96% rename from src/main/java/com/mashibing/dp/Iterator/v2/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v2/Main.java index 4c59d70..3bae897 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v2/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v2/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v2; +package com.shenyy.dp.Iterator.v2; /** * v1:构建一个容器,可以添加对象 diff --git a/src/main/java/com/mashibing/dp/Iterator/v3/ArrayList_.java b/src/main/java/com/shenyy/dp/Iterator/v3/ArrayList_.java similarity index 94% rename from src/main/java/com/mashibing/dp/Iterator/v3/ArrayList_.java rename to src/main/java/com/shenyy/dp/Iterator/v3/ArrayList_.java index c338fc0..3c309d8 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v3/ArrayList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v3/ArrayList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v3; +package com.shenyy.dp.Iterator.v3; /** diff --git a/src/main/java/com/mashibing/dp/Iterator/v4/Collection_.java b/src/main/java/com/shenyy/dp/Iterator/v3/Collection_.java similarity index 66% rename from src/main/java/com/mashibing/dp/Iterator/v4/Collection_.java rename to src/main/java/com/shenyy/dp/Iterator/v3/Collection_.java index 48a9cf8..42b0c31 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v4/Collection_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v3/Collection_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v4; +package com.shenyy.dp.Iterator.v3; public interface Collection_ { void add(Object o); diff --git a/src/main/java/com/mashibing/dp/Iterator/v4/LinkedList_.java b/src/main/java/com/shenyy/dp/Iterator/v3/LinkedList_.java similarity index 94% rename from src/main/java/com/mashibing/dp/Iterator/v4/LinkedList_.java rename to src/main/java/com/shenyy/dp/Iterator/v3/LinkedList_.java index 2238a46..0a536fe 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v4/LinkedList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v3/LinkedList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v4; +package com.shenyy.dp.Iterator.v3; /** * 相比数组,这个容器不用考虑边界问题,可以动态扩展 diff --git a/src/main/java/com/mashibing/dp/Iterator/v3/Main.java b/src/main/java/com/shenyy/dp/Iterator/v3/Main.java similarity index 91% rename from src/main/java/com/mashibing/dp/Iterator/v3/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v3/Main.java index 249b264..9003bdc 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v3/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v3/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v3; +package com.shenyy.dp.Iterator.v3; /** * v1:构建一个容器,可以添加对象 diff --git a/src/main/java/com/mashibing/dp/Iterator/v4/ArrayList_.java b/src/main/java/com/shenyy/dp/Iterator/v4/ArrayList_.java similarity index 94% rename from src/main/java/com/mashibing/dp/Iterator/v4/ArrayList_.java rename to src/main/java/com/shenyy/dp/Iterator/v4/ArrayList_.java index de0ed3f..8c0e120 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v4/ArrayList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v4/ArrayList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v4; +package com.shenyy.dp.Iterator.v4; /** diff --git a/src/main/java/com/mashibing/dp/Iterator/v3/Collection_.java b/src/main/java/com/shenyy/dp/Iterator/v4/Collection_.java similarity index 66% rename from src/main/java/com/mashibing/dp/Iterator/v3/Collection_.java rename to src/main/java/com/shenyy/dp/Iterator/v4/Collection_.java index f2dc146..9b4cc5d 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v3/Collection_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v4/Collection_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v3; +package com.shenyy.dp.Iterator.v4; public interface Collection_ { void add(Object o); diff --git a/src/main/java/com/mashibing/dp/Iterator/v3/LinkedList_.java b/src/main/java/com/shenyy/dp/Iterator/v4/LinkedList_.java similarity index 94% rename from src/main/java/com/mashibing/dp/Iterator/v3/LinkedList_.java rename to src/main/java/com/shenyy/dp/Iterator/v4/LinkedList_.java index 91debbc..89ff0bc 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v3/LinkedList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v4/LinkedList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v3; +package com.shenyy.dp.Iterator.v4; /** * 相比数组,这个容器不用考虑边界问题,可以动态扩展 diff --git a/src/main/java/com/mashibing/dp/Iterator/v4/Main.java b/src/main/java/com/shenyy/dp/Iterator/v4/Main.java similarity index 94% rename from src/main/java/com/mashibing/dp/Iterator/v4/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v4/Main.java index 452c5d1..7b51881 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v4/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v4/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v4; +package com.shenyy.dp.Iterator.v4; /** * v1:构建一个容器,可以添加对象 diff --git a/src/main/java/com/mashibing/dp/Iterator/v5/ArrayList_.java b/src/main/java/com/shenyy/dp/Iterator/v5/ArrayList_.java similarity index 96% rename from src/main/java/com/mashibing/dp/Iterator/v5/ArrayList_.java rename to src/main/java/com/shenyy/dp/Iterator/v5/ArrayList_.java index e08a533..d43ca43 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v5/ArrayList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v5/ArrayList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v5; +package com.shenyy.dp.Iterator.v5; /** diff --git a/src/main/java/com/mashibing/dp/Iterator/v5/Collection_.java b/src/main/java/com/shenyy/dp/Iterator/v5/Collection_.java similarity index 72% rename from src/main/java/com/mashibing/dp/Iterator/v5/Collection_.java rename to src/main/java/com/shenyy/dp/Iterator/v5/Collection_.java index 8366c43..534d355 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v5/Collection_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v5/Collection_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v5; +package com.shenyy.dp.Iterator.v5; public interface Collection_ { void add(Object o); diff --git a/src/main/java/com/mashibing/dp/Iterator/v5/Iterator_.java b/src/main/java/com/shenyy/dp/Iterator/v5/Iterator_.java similarity index 66% rename from src/main/java/com/mashibing/dp/Iterator/v5/Iterator_.java rename to src/main/java/com/shenyy/dp/Iterator/v5/Iterator_.java index f6c25d7..b33a8a6 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v5/Iterator_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v5/Iterator_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v5; +package com.shenyy.dp.Iterator.v5; public interface Iterator_ { boolean hasNext(); diff --git a/src/main/java/com/mashibing/dp/Iterator/v7/LinkedList_.java b/src/main/java/com/shenyy/dp/Iterator/v5/LinkedList_.java similarity index 95% rename from src/main/java/com/mashibing/dp/Iterator/v7/LinkedList_.java rename to src/main/java/com/shenyy/dp/Iterator/v5/LinkedList_.java index cbcad0f..f48d53f 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v7/LinkedList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v5/LinkedList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v7; +package com.shenyy.dp.Iterator.v5; /** * 相比数组,这个容器不用考虑边界问题,可以动态扩展 diff --git a/src/main/java/com/mashibing/dp/Iterator/v5/Main.java b/src/main/java/com/shenyy/dp/Iterator/v5/Main.java similarity index 92% rename from src/main/java/com/mashibing/dp/Iterator/v5/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v5/Main.java index b13ac67..9112314 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v5/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v5/Main.java @@ -1,6 +1,4 @@ -package com.mashibing.dp.Iterator.v5; - -import java.util.Iterator; +package com.shenyy.dp.Iterator.v5; /** * v1:构建一个容器,可以添加对象 diff --git a/src/main/java/com/mashibing/dp/Iterator/v6/Main.java b/src/main/java/com/shenyy/dp/Iterator/v6/Main.java similarity index 95% rename from src/main/java/com/mashibing/dp/Iterator/v6/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v6/Main.java index 203bf6c..7a8465a 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v6/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v6/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v6; +package com.shenyy.dp.Iterator.v6; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/com/mashibing/dp/Iterator/v7/ArrayList_.java b/src/main/java/com/shenyy/dp/Iterator/v7/ArrayList_.java similarity index 96% rename from src/main/java/com/mashibing/dp/Iterator/v7/ArrayList_.java rename to src/main/java/com/shenyy/dp/Iterator/v7/ArrayList_.java index ee3f611..0100837 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v7/ArrayList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v7/ArrayList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v7; +package com.shenyy.dp.Iterator.v7; /** diff --git a/src/main/java/com/mashibing/dp/Iterator/v7/Collection_.java b/src/main/java/com/shenyy/dp/Iterator/v7/Collection_.java similarity index 72% rename from src/main/java/com/mashibing/dp/Iterator/v7/Collection_.java rename to src/main/java/com/shenyy/dp/Iterator/v7/Collection_.java index 11a0158..81afc91 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v7/Collection_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v7/Collection_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v7; +package com.shenyy.dp.Iterator.v7; public interface Collection_ { void add(E o); diff --git a/src/main/java/com/mashibing/dp/Iterator/v7/Iterator_.java b/src/main/java/com/shenyy/dp/Iterator/v7/Iterator_.java similarity index 81% rename from src/main/java/com/mashibing/dp/Iterator/v7/Iterator_.java rename to src/main/java/com/shenyy/dp/Iterator/v7/Iterator_.java index 0784ff9..72a8a52 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v7/Iterator_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v7/Iterator_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v7; +package com.shenyy.dp.Iterator.v7; public interface Iterator_ { //Element //Type //K //Value V Tank boolean hasNext(); diff --git a/src/main/java/com/mashibing/dp/Iterator/v5/LinkedList_.java b/src/main/java/com/shenyy/dp/Iterator/v7/LinkedList_.java similarity index 95% rename from src/main/java/com/mashibing/dp/Iterator/v5/LinkedList_.java rename to src/main/java/com/shenyy/dp/Iterator/v7/LinkedList_.java index 2be7621..2d582eb 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v5/LinkedList_.java +++ b/src/main/java/com/shenyy/dp/Iterator/v7/LinkedList_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v5; +package com.shenyy.dp.Iterator.v7; /** * 相比数组,这个容器不用考虑边界问题,可以动态扩展 diff --git a/src/main/java/com/mashibing/dp/Iterator/v7/Main.java b/src/main/java/com/shenyy/dp/Iterator/v7/Main.java similarity index 95% rename from src/main/java/com/mashibing/dp/Iterator/v7/Main.java rename to src/main/java/com/shenyy/dp/Iterator/v7/Main.java index 2a4e7e4..fc246e5 100644 --- a/src/main/java/com/mashibing/dp/Iterator/v7/Main.java +++ b/src/main/java/com/shenyy/dp/Iterator/v7/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.Iterator.v7; +package com.shenyy.dp.Iterator.v7; /** * v1:构建一个容器,可以添加对象 diff --git a/src/main/java/com/mashibing/dp/TemplateMethod/Main.java b/src/main/java/com/shenyy/dp/TemplateMethod/Main.java similarity index 91% rename from src/main/java/com/mashibing/dp/TemplateMethod/Main.java rename to src/main/java/com/shenyy/dp/TemplateMethod/Main.java index 4a3a847..7cfb694 100644 --- a/src/main/java/com/mashibing/dp/TemplateMethod/Main.java +++ b/src/main/java/com/shenyy/dp/TemplateMethod/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.TemplateMethod; +package com.shenyy.dp.TemplateMethod; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/mashibing/dp/Test.java b/src/main/java/com/shenyy/dp/Test.java similarity index 73% rename from src/main/java/com/mashibing/dp/Test.java rename to src/main/java/com/shenyy/dp/Test.java index 090ebcc..ae31552 100644 --- a/src/main/java/com/mashibing/dp/Test.java +++ b/src/main/java/com/shenyy/dp/Test.java @@ -1,9 +1,5 @@ -package com.mashibing.dp; +package com.shenyy.dp; -import java.awt.*; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; import java.util.concurrent.locks.LockSupport; public class Test { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/AK47.java b/src/main/java/com/shenyy/dp/abstractfactory/AK47.java similarity index 73% rename from src/main/java/com/mashibing/dp/abstractfactory/AK47.java rename to src/main/java/com/shenyy/dp/abstractfactory/AK47.java index 68b49a9..a1c3ee7 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/AK47.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/AK47.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class AK47 extends Weapon{ public void shoot() { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/AbastractFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/AbastractFactory.java similarity index 78% rename from src/main/java/com/mashibing/dp/abstractfactory/AbastractFactory.java rename to src/main/java/com/shenyy/dp/abstractfactory/AbastractFactory.java index 43baad9..689ae1f 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/AbastractFactory.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/AbastractFactory.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public abstract class AbastractFactory { abstract Food createFood(); diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Bread.java b/src/main/java/com/shenyy/dp/abstractfactory/Bread.java similarity index 71% rename from src/main/java/com/mashibing/dp/abstractfactory/Bread.java rename to src/main/java/com/shenyy/dp/abstractfactory/Bread.java index cbd0989..29fade6 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Bread.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Bread.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class Bread extends Food{ public void printName() { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Broom.java b/src/main/java/com/shenyy/dp/abstractfactory/Broom.java similarity index 74% rename from src/main/java/com/mashibing/dp/abstractfactory/Broom.java rename to src/main/java/com/shenyy/dp/abstractfactory/Broom.java index 79c3358..e5afe89 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Broom.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Broom.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class Broom extends Vehicle{ public void go() { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Car.java b/src/main/java/com/shenyy/dp/abstractfactory/Car.java similarity index 73% rename from src/main/java/com/mashibing/dp/abstractfactory/Car.java rename to src/main/java/com/shenyy/dp/abstractfactory/Car.java index d589784..ccc8e10 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Car.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Car.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class Car extends Vehicle{ diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Food.java b/src/main/java/com/shenyy/dp/abstractfactory/Food.java similarity index 59% rename from src/main/java/com/mashibing/dp/abstractfactory/Food.java rename to src/main/java/com/shenyy/dp/abstractfactory/Food.java index 9d37d05..327712a 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Food.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Food.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public abstract class Food { abstract void printName(); diff --git a/src/main/java/com/mashibing/dp/abstractfactory/MagicFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/MagicFactory.java similarity index 87% rename from src/main/java/com/mashibing/dp/abstractfactory/MagicFactory.java rename to src/main/java/com/shenyy/dp/abstractfactory/MagicFactory.java index b1d0032..3897dda 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/MagicFactory.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/MagicFactory.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class MagicFactory extends AbastractFactory { @Override diff --git a/src/main/java/com/mashibing/dp/abstractfactory/MagicStick.java b/src/main/java/com/shenyy/dp/abstractfactory/MagicStick.java similarity index 73% rename from src/main/java/com/mashibing/dp/abstractfactory/MagicStick.java rename to src/main/java/com/shenyy/dp/abstractfactory/MagicStick.java index 2bfb0a7..5f3308a 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/MagicStick.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/MagicStick.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class MagicStick extends Weapon{ public void shoot() { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Main.java b/src/main/java/com/shenyy/dp/abstractfactory/Main.java similarity index 86% rename from src/main/java/com/mashibing/dp/abstractfactory/Main.java rename to src/main/java/com/shenyy/dp/abstractfactory/Main.java index 4437d69..8358955 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Main.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class Main { public static void main(String[] args) { @@ -11,4 +11,4 @@ public static void main(String[] args) { Food b = f.createFood(); b.printName(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/mashibing/dp/abstractfactory/ModernFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/ModernFactory.java similarity index 87% rename from src/main/java/com/mashibing/dp/abstractfactory/ModernFactory.java rename to src/main/java/com/shenyy/dp/abstractfactory/ModernFactory.java index 5bd7d8e..0c7b84d 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/ModernFactory.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/ModernFactory.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class ModernFactory extends AbastractFactory { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/MushRoom.java b/src/main/java/com/shenyy/dp/abstractfactory/MushRoom.java similarity index 72% rename from src/main/java/com/mashibing/dp/abstractfactory/MushRoom.java rename to src/main/java/com/shenyy/dp/abstractfactory/MushRoom.java index 95bf520..ad96fb2 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/MushRoom.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/MushRoom.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public class MushRoom extends Food{ public void printName() { diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Vehicle.java b/src/main/java/com/shenyy/dp/abstractfactory/Vehicle.java similarity index 62% rename from src/main/java/com/mashibing/dp/abstractfactory/Vehicle.java rename to src/main/java/com/shenyy/dp/abstractfactory/Vehicle.java index 9ca995a..c2b0200 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Vehicle.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Vehicle.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public abstract class Vehicle { //interface abstract void go(); diff --git a/src/main/java/com/mashibing/dp/abstractfactory/Weapon.java b/src/main/java/com/shenyy/dp/abstractfactory/Weapon.java similarity index 59% rename from src/main/java/com/mashibing/dp/abstractfactory/Weapon.java rename to src/main/java/com/shenyy/dp/abstractfactory/Weapon.java index e012003..46b7e84 100644 --- a/src/main/java/com/mashibing/dp/abstractfactory/Weapon.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/Weapon.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.abstractfactory; +package com.shenyy.dp.abstractfactory; public abstract class Weapon { abstract void shoot(); diff --git a/src/main/java/com/mashibing/dp/adapter/Main.java b/src/main/java/com/shenyy/dp/adapter/Main.java similarity index 93% rename from src/main/java/com/mashibing/dp/adapter/Main.java rename to src/main/java/com/shenyy/dp/adapter/Main.java index 021eca6..fe4a073 100644 --- a/src/main/java/com/mashibing/dp/adapter/Main.java +++ b/src/main/java/com/shenyy/dp/adapter/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.adapter; +package com.shenyy.dp.adapter; import java.io.BufferedReader; import java.io.FileInputStream; diff --git a/src/main/java/com/mashibing/dp/bridge/v3/Book.java b/src/main/java/com/shenyy/dp/bridge/v1/Book.java similarity index 50% rename from src/main/java/com/mashibing/dp/bridge/v3/Book.java rename to src/main/java/com/shenyy/dp/bridge/v1/Book.java index 2d2ca8e..59d1c17 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/Book.java +++ b/src/main/java/com/shenyy/dp/bridge/v1/Book.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v1; public class Book extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v2/Flower.java b/src/main/java/com/shenyy/dp/bridge/v1/Flower.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v2/Flower.java rename to src/main/java/com/shenyy/dp/bridge/v1/Flower.java index 8bbcdfc..ae4299c 100644 --- a/src/main/java/com/mashibing/dp/bridge/v2/Flower.java +++ b/src/main/java/com/shenyy/dp/bridge/v1/Flower.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v2; +package com.shenyy.dp.bridge.v1; public class Flower extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v3/GG.java b/src/main/java/com/shenyy/dp/bridge/v1/GG.java similarity index 81% rename from src/main/java/com/mashibing/dp/bridge/v3/GG.java rename to src/main/java/com/shenyy/dp/bridge/v1/GG.java index f4663d3..4169d7b 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/GG.java +++ b/src/main/java/com/shenyy/dp/bridge/v1/GG.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v1; public class GG { public void chase(MM mm) { diff --git a/src/main/java/com/shenyy/dp/bridge/v1/Gift.java b/src/main/java/com/shenyy/dp/bridge/v1/Gift.java new file mode 100644 index 0000000..b891e95 --- /dev/null +++ b/src/main/java/com/shenyy/dp/bridge/v1/Gift.java @@ -0,0 +1,3 @@ +package com.shenyy.dp.bridge.v1; + +public abstract class Gift {} diff --git a/src/main/java/com/mashibing/dp/bridge/v1/MM.java b/src/main/java/com/shenyy/dp/bridge/v1/MM.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v1/MM.java rename to src/main/java/com/shenyy/dp/bridge/v1/MM.java index cc0b48a..b287522 100644 --- a/src/main/java/com/mashibing/dp/bridge/v1/MM.java +++ b/src/main/java/com/shenyy/dp/bridge/v1/MM.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v1; +package com.shenyy.dp.bridge.v1; public class MM { String name; diff --git a/src/main/java/com/mashibing/dp/bridge/v1/Book.java b/src/main/java/com/shenyy/dp/bridge/v2/Book.java similarity index 50% rename from src/main/java/com/mashibing/dp/bridge/v1/Book.java rename to src/main/java/com/shenyy/dp/bridge/v2/Book.java index 37a75b0..2178276 100644 --- a/src/main/java/com/mashibing/dp/bridge/v1/Book.java +++ b/src/main/java/com/shenyy/dp/bridge/v2/Book.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v1; +package com.shenyy.dp.bridge.v2; public class Book extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v3/Flower.java b/src/main/java/com/shenyy/dp/bridge/v2/Flower.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v3/Flower.java rename to src/main/java/com/shenyy/dp/bridge/v2/Flower.java index db32b65..b4f5e32 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/Flower.java +++ b/src/main/java/com/shenyy/dp/bridge/v2/Flower.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v2; public class Flower extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v1/GG.java b/src/main/java/com/shenyy/dp/bridge/v2/GG.java similarity index 81% rename from src/main/java/com/mashibing/dp/bridge/v1/GG.java rename to src/main/java/com/shenyy/dp/bridge/v2/GG.java index b2d09a3..f29d58c 100644 --- a/src/main/java/com/mashibing/dp/bridge/v1/GG.java +++ b/src/main/java/com/shenyy/dp/bridge/v2/GG.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v1; +package com.shenyy.dp.bridge.v2; public class GG { public void chase(MM mm) { diff --git a/src/main/java/com/shenyy/dp/bridge/v2/Gift.java b/src/main/java/com/shenyy/dp/bridge/v2/Gift.java new file mode 100644 index 0000000..5e82e84 --- /dev/null +++ b/src/main/java/com/shenyy/dp/bridge/v2/Gift.java @@ -0,0 +1,3 @@ +package com.shenyy.dp.bridge.v2; + +public abstract class Gift {} diff --git a/src/main/java/com/mashibing/dp/bridge/v3/MM.java b/src/main/java/com/shenyy/dp/bridge/v2/MM.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v3/MM.java rename to src/main/java/com/shenyy/dp/bridge/v2/MM.java index 17b5077..669cc38 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/MM.java +++ b/src/main/java/com/shenyy/dp/bridge/v2/MM.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v2; public class MM { String name; diff --git a/src/main/java/com/mashibing/dp/bridge/v2/WarmGift.java b/src/main/java/com/shenyy/dp/bridge/v2/WarmGift.java similarity index 52% rename from src/main/java/com/mashibing/dp/bridge/v2/WarmGift.java rename to src/main/java/com/shenyy/dp/bridge/v2/WarmGift.java index 60e8f47..10d46f8 100644 --- a/src/main/java/com/mashibing/dp/bridge/v2/WarmGift.java +++ b/src/main/java/com/shenyy/dp/bridge/v2/WarmGift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v2; +package com.shenyy.dp.bridge.v2; public class WarmGift extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v2/WildGift.java b/src/main/java/com/shenyy/dp/bridge/v2/WildGift.java similarity index 52% rename from src/main/java/com/mashibing/dp/bridge/v2/WildGift.java rename to src/main/java/com/shenyy/dp/bridge/v2/WildGift.java index bd9bffc..1f01e9a 100644 --- a/src/main/java/com/mashibing/dp/bridge/v2/WildGift.java +++ b/src/main/java/com/shenyy/dp/bridge/v2/WildGift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v2; +package com.shenyy.dp.bridge.v2; public class WildGift extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v2/readme b/src/main/java/com/shenyy/dp/bridge/v2/readme similarity index 100% rename from src/main/java/com/mashibing/dp/bridge/v2/readme rename to src/main/java/com/shenyy/dp/bridge/v2/readme diff --git a/src/main/java/com/mashibing/dp/bridge/v2/Book.java b/src/main/java/com/shenyy/dp/bridge/v3/Book.java similarity index 50% rename from src/main/java/com/mashibing/dp/bridge/v2/Book.java rename to src/main/java/com/shenyy/dp/bridge/v3/Book.java index 79abe13..a338834 100644 --- a/src/main/java/com/mashibing/dp/bridge/v2/Book.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/Book.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v2; +package com.shenyy.dp.bridge.v3; public class Book extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v1/Flower.java b/src/main/java/com/shenyy/dp/bridge/v3/Flower.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v1/Flower.java rename to src/main/java/com/shenyy/dp/bridge/v3/Flower.java index f93e1e3..6b880c1 100644 --- a/src/main/java/com/mashibing/dp/bridge/v1/Flower.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/Flower.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v1; +package com.shenyy.dp.bridge.v3; public class Flower extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v2/GG.java b/src/main/java/com/shenyy/dp/bridge/v3/GG.java similarity index 81% rename from src/main/java/com/mashibing/dp/bridge/v2/GG.java rename to src/main/java/com/shenyy/dp/bridge/v3/GG.java index 1ccbcf0..c251cb3 100644 --- a/src/main/java/com/mashibing/dp/bridge/v2/GG.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/GG.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v2; +package com.shenyy.dp.bridge.v3; public class GG { public void chase(MM mm) { diff --git a/src/main/java/com/shenyy/dp/bridge/v3/Gift.java b/src/main/java/com/shenyy/dp/bridge/v3/Gift.java new file mode 100644 index 0000000..282359d --- /dev/null +++ b/src/main/java/com/shenyy/dp/bridge/v3/Gift.java @@ -0,0 +1,3 @@ +package com.shenyy.dp.bridge.v3; + +public abstract class Gift {} diff --git a/src/main/java/com/mashibing/dp/bridge/v4/MM.java b/src/main/java/com/shenyy/dp/bridge/v3/MM.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v4/MM.java rename to src/main/java/com/shenyy/dp/bridge/v3/MM.java index 8fc17c6..f44fa10 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/MM.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/MM.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v3; public class MM { String name; diff --git a/src/main/java/com/mashibing/dp/bridge/v3/WarmFlower.java b/src/main/java/com/shenyy/dp/bridge/v3/WarmFlower.java similarity index 74% rename from src/main/java/com/mashibing/dp/bridge/v3/WarmFlower.java rename to src/main/java/com/shenyy/dp/bridge/v3/WarmFlower.java index f0ca1d0..fab6cf8 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/WarmFlower.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/WarmFlower.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v3; /** * 或者从WarmGift继承 diff --git a/src/main/java/com/mashibing/dp/bridge/v3/WarmGift.java b/src/main/java/com/shenyy/dp/bridge/v3/WarmGift.java similarity index 52% rename from src/main/java/com/mashibing/dp/bridge/v3/WarmGift.java rename to src/main/java/com/shenyy/dp/bridge/v3/WarmGift.java index da1f6c4..23431ed 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/WarmGift.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/WarmGift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v3; public class WarmGift extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v3/WildGift.java b/src/main/java/com/shenyy/dp/bridge/v3/WildGift.java similarity index 52% rename from src/main/java/com/mashibing/dp/bridge/v3/WildGift.java rename to src/main/java/com/shenyy/dp/bridge/v3/WildGift.java index d034adf..ae5f37e 100644 --- a/src/main/java/com/mashibing/dp/bridge/v3/WildGift.java +++ b/src/main/java/com/shenyy/dp/bridge/v3/WildGift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v3; +package com.shenyy.dp.bridge.v3; public class WildGift extends Gift { } diff --git a/src/main/java/com/mashibing/dp/bridge/v3/readme b/src/main/java/com/shenyy/dp/bridge/v3/readme similarity index 100% rename from src/main/java/com/mashibing/dp/bridge/v3/readme rename to src/main/java/com/shenyy/dp/bridge/v3/readme diff --git a/src/main/java/com/mashibing/dp/bridge/v4/Book.java b/src/main/java/com/shenyy/dp/bridge/v4/Book.java similarity index 52% rename from src/main/java/com/mashibing/dp/bridge/v4/Book.java rename to src/main/java/com/shenyy/dp/bridge/v4/Book.java index be30a4e..d88a7a1 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/Book.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/Book.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v4; public class Book extends GiftImpl { } diff --git a/src/main/java/com/mashibing/dp/bridge/v4/Flower.java b/src/main/java/com/shenyy/dp/bridge/v4/Flower.java similarity index 53% rename from src/main/java/com/mashibing/dp/bridge/v4/Flower.java rename to src/main/java/com/shenyy/dp/bridge/v4/Flower.java index 083311c..7b02ecc 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/Flower.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/Flower.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v4; public class Flower extends GiftImpl { } diff --git a/src/main/java/com/mashibing/dp/bridge/v4/GG.java b/src/main/java/com/shenyy/dp/bridge/v4/GG.java similarity index 85% rename from src/main/java/com/mashibing/dp/bridge/v4/GG.java rename to src/main/java/com/shenyy/dp/bridge/v4/GG.java index df5f3f9..79c9fa3 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/GG.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/GG.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v4; public class GG { public void chase(MM mm) { diff --git a/src/main/java/com/mashibing/dp/bridge/v4/Gift.java b/src/main/java/com/shenyy/dp/bridge/v4/Gift.java similarity index 58% rename from src/main/java/com/mashibing/dp/bridge/v4/Gift.java rename to src/main/java/com/shenyy/dp/bridge/v4/Gift.java index fc39ba6..51f438f 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/Gift.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/Gift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v4; public abstract class Gift { GiftImpl impl; diff --git a/src/main/java/com/shenyy/dp/bridge/v4/GiftImpl.java b/src/main/java/com/shenyy/dp/bridge/v4/GiftImpl.java new file mode 100644 index 0000000..a71b1aa --- /dev/null +++ b/src/main/java/com/shenyy/dp/bridge/v4/GiftImpl.java @@ -0,0 +1,4 @@ +package com.shenyy.dp.bridge.v4; + +public class GiftImpl { +} diff --git a/src/main/java/com/mashibing/dp/bridge/v2/MM.java b/src/main/java/com/shenyy/dp/bridge/v4/MM.java similarity index 51% rename from src/main/java/com/mashibing/dp/bridge/v2/MM.java rename to src/main/java/com/shenyy/dp/bridge/v4/MM.java index 1c5f243..332f642 100644 --- a/src/main/java/com/mashibing/dp/bridge/v2/MM.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/MM.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v2; +package com.shenyy.dp.bridge.v4; public class MM { String name; diff --git a/src/main/java/com/mashibing/dp/bridge/v4/WarmGift.java b/src/main/java/com/shenyy/dp/bridge/v4/WarmGift.java similarity index 75% rename from src/main/java/com/mashibing/dp/bridge/v4/WarmGift.java rename to src/main/java/com/shenyy/dp/bridge/v4/WarmGift.java index ebebd12..540cd71 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/WarmGift.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/WarmGift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v4; public class WarmGift extends Gift { public WarmGift(GiftImpl impl) { diff --git a/src/main/java/com/mashibing/dp/bridge/v4/WildGift.java b/src/main/java/com/shenyy/dp/bridge/v4/WildGift.java similarity index 75% rename from src/main/java/com/mashibing/dp/bridge/v4/WildGift.java rename to src/main/java/com/shenyy/dp/bridge/v4/WildGift.java index 123e955..77adaab 100644 --- a/src/main/java/com/mashibing/dp/bridge/v4/WildGift.java +++ b/src/main/java/com/shenyy/dp/bridge/v4/WildGift.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.bridge.v4; +package com.shenyy.dp.bridge.v4; public class WildGift extends Gift { public WildGift(GiftImpl impl) { diff --git a/src/main/java/com/mashibing/dp/bridge/v4/readme b/src/main/java/com/shenyy/dp/bridge/v4/readme similarity index 100% rename from src/main/java/com/mashibing/dp/bridge/v4/readme rename to src/main/java/com/shenyy/dp/bridge/v4/readme diff --git a/src/main/java/com/mashibing/dp/builder/ComplexTerrainBuilder.java b/src/main/java/com/shenyy/dp/builder/ComplexTerrainBuilder.java similarity index 94% rename from src/main/java/com/mashibing/dp/builder/ComplexTerrainBuilder.java rename to src/main/java/com/shenyy/dp/builder/ComplexTerrainBuilder.java index f308794..a7f9a8a 100644 --- a/src/main/java/com/mashibing/dp/builder/ComplexTerrainBuilder.java +++ b/src/main/java/com/shenyy/dp/builder/ComplexTerrainBuilder.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.builder; +package com.shenyy.dp.builder; public class ComplexTerrainBuilder implements TerrainBuilder { Terrain terrain = new Terrain(); diff --git a/src/main/java/com/mashibing/dp/builder/Main.java b/src/main/java/com/shenyy/dp/builder/Main.java similarity index 93% rename from src/main/java/com/mashibing/dp/builder/Main.java rename to src/main/java/com/shenyy/dp/builder/Main.java index f282b65..25039c9 100644 --- a/src/main/java/com/mashibing/dp/builder/Main.java +++ b/src/main/java/com/shenyy/dp/builder/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.builder; +package com.shenyy.dp.builder; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/mashibing/dp/builder/Person.java b/src/main/java/com/shenyy/dp/builder/Person.java similarity index 96% rename from src/main/java/com/mashibing/dp/builder/Person.java rename to src/main/java/com/shenyy/dp/builder/Person.java index cc34f53..8d583a0 100644 --- a/src/main/java/com/mashibing/dp/builder/Person.java +++ b/src/main/java/com/shenyy/dp/builder/Person.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.builder; +package com.shenyy.dp.builder; public class Person { int id; diff --git a/src/main/java/com/mashibing/dp/builder/Terrain.java b/src/main/java/com/shenyy/dp/builder/Terrain.java similarity index 94% rename from src/main/java/com/mashibing/dp/builder/Terrain.java rename to src/main/java/com/shenyy/dp/builder/Terrain.java index d8848d7..39a7dc4 100644 --- a/src/main/java/com/mashibing/dp/builder/Terrain.java +++ b/src/main/java/com/shenyy/dp/builder/Terrain.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.builder; +package com.shenyy.dp.builder; public class Terrain { Wall w; diff --git a/src/main/java/com/mashibing/dp/builder/TerrainBuilder.java b/src/main/java/com/shenyy/dp/builder/TerrainBuilder.java similarity index 81% rename from src/main/java/com/mashibing/dp/builder/TerrainBuilder.java rename to src/main/java/com/shenyy/dp/builder/TerrainBuilder.java index 2e87766..080e902 100644 --- a/src/main/java/com/mashibing/dp/builder/TerrainBuilder.java +++ b/src/main/java/com/shenyy/dp/builder/TerrainBuilder.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.builder; +package com.shenyy.dp.builder; public interface TerrainBuilder { TerrainBuilder buildWall(); diff --git a/src/main/java/com/mashibing/dp/cglib/Main.java b/src/main/java/com/shenyy/dp/cglib/Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/cglib/Main.java rename to src/main/java/com/shenyy/dp/cglib/Main.java index a8a34e7..967fff1 100644 --- a/src/main/java/com/mashibing/dp/cglib/Main.java +++ b/src/main/java/com/shenyy/dp/cglib/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.cglib; +package com.shenyy.dp.cglib; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; diff --git a/src/main/java/com/mashibing/dp/command/Command.java b/src/main/java/com/shenyy/dp/command/Command.java similarity index 76% rename from src/main/java/com/mashibing/dp/command/Command.java rename to src/main/java/com/shenyy/dp/command/Command.java index 3273e11..86aa8bc 100644 --- a/src/main/java/com/mashibing/dp/command/Command.java +++ b/src/main/java/com/shenyy/dp/command/Command.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.command; +package com.shenyy.dp.command; public abstract class Command { public abstract void doit(); //exec run diff --git a/src/main/java/com/mashibing/dp/command/Content.java b/src/main/java/com/shenyy/dp/command/Content.java similarity index 65% rename from src/main/java/com/mashibing/dp/command/Content.java rename to src/main/java/com/shenyy/dp/command/Content.java index 12b658a..4a783d5 100644 --- a/src/main/java/com/mashibing/dp/command/Content.java +++ b/src/main/java/com/shenyy/dp/command/Content.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.command; +package com.shenyy.dp.command; public class Content { String msg = "hello everybody "; diff --git a/src/main/java/com/mashibing/dp/command/CopyCommand.java b/src/main/java/com/shenyy/dp/command/CopyCommand.java similarity index 89% rename from src/main/java/com/mashibing/dp/command/CopyCommand.java rename to src/main/java/com/shenyy/dp/command/CopyCommand.java index dde5656..0199cd7 100644 --- a/src/main/java/com/mashibing/dp/command/CopyCommand.java +++ b/src/main/java/com/shenyy/dp/command/CopyCommand.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.command; +package com.shenyy.dp.command; public class CopyCommand extends Command { Content c; diff --git a/src/main/java/com/mashibing/dp/command/DeleteCommand.java b/src/main/java/com/shenyy/dp/command/DeleteCommand.java similarity index 91% rename from src/main/java/com/mashibing/dp/command/DeleteCommand.java rename to src/main/java/com/shenyy/dp/command/DeleteCommand.java index 6c76d19..c06bcd5 100644 --- a/src/main/java/com/mashibing/dp/command/DeleteCommand.java +++ b/src/main/java/com/shenyy/dp/command/DeleteCommand.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.command; +package com.shenyy.dp.command; public class DeleteCommand extends Command { Content c; diff --git a/src/main/java/com/mashibing/dp/command/InsertCommand.java b/src/main/java/com/shenyy/dp/command/InsertCommand.java similarity index 91% rename from src/main/java/com/mashibing/dp/command/InsertCommand.java rename to src/main/java/com/shenyy/dp/command/InsertCommand.java index c88cf2c..5a9a53f 100644 --- a/src/main/java/com/mashibing/dp/command/InsertCommand.java +++ b/src/main/java/com/shenyy/dp/command/InsertCommand.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.command; +package com.shenyy.dp.command; public class InsertCommand extends Command { Content c; diff --git a/src/main/java/com/mashibing/dp/command/Main.java b/src/main/java/com/shenyy/dp/command/Main.java similarity index 96% rename from src/main/java/com/mashibing/dp/command/Main.java rename to src/main/java/com/shenyy/dp/command/Main.java index 7f5a7a5..6e58773 100644 --- a/src/main/java/com/mashibing/dp/command/Main.java +++ b/src/main/java/com/shenyy/dp/command/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.command; +package com.shenyy.dp.command; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/composite/Main.java b/src/main/java/com/shenyy/dp/composite/Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/composite/Main.java rename to src/main/java/com/shenyy/dp/composite/Main.java index a25b3ed..284ef21 100644 --- a/src/main/java/com/mashibing/dp/composite/Main.java +++ b/src/main/java/com/shenyy/dp/composite/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.composite; +package com.shenyy.dp.composite; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/Main.java b/src/main/java/com/shenyy/dp/cor/Main.java similarity index 98% rename from src/main/java/com/mashibing/dp/cor/Main.java rename to src/main/java/com/shenyy/dp/cor/Main.java index 8c6b66b..61ba396 100644 --- a/src/main/java/com/mashibing/dp/cor/Main.java +++ b/src/main/java/com/shenyy/dp/cor/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.cor; +package com.shenyy.dp.cor; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/Main.java.bak b/src/main/java/com/shenyy/dp/cor/Main.java.bak similarity index 98% rename from src/main/java/com/mashibing/dp/cor/Main.java.bak rename to src/main/java/com/shenyy/dp/cor/Main.java.bak index aa2ca30..ad00cf5 100644 --- a/src/main/java/com/mashibing/dp/cor/Main.java.bak +++ b/src/main/java/com/shenyy/dp/cor/Main.java.bak @@ -1,4 +1,4 @@ -package com.mashibing.dp.cor; +package com.shenyy.dp.cor; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v1/Servlet_Main.java b/src/main/java/com/shenyy/dp/cor/servlet/v1/Servlet_Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/cor/servlet/v1/Servlet_Main.java rename to src/main/java/com/shenyy/dp/cor/servlet/v1/Servlet_Main.java index df5b129..4d7429e 100644 --- a/src/main/java/com/mashibing/dp/cor/servlet/v1/Servlet_Main.java +++ b/src/main/java/com/shenyy/dp/cor/servlet/v1/Servlet_Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.cor.servlet.v1; +package com.shenyy.dp.cor.servlet.v1; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v2/Servlet_Main.java b/src/main/java/com/shenyy/dp/cor/servlet/v2/Servlet_Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/cor/servlet/v2/Servlet_Main.java rename to src/main/java/com/shenyy/dp/cor/servlet/v2/Servlet_Main.java index 3eafa38..c9a5666 100644 --- a/src/main/java/com/mashibing/dp/cor/servlet/v2/Servlet_Main.java +++ b/src/main/java/com/shenyy/dp/cor/servlet/v2/Servlet_Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.cor.servlet.v2; +package com.shenyy.dp.cor.servlet.v2; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v2/readme b/src/main/java/com/shenyy/dp/cor/servlet/v2/readme similarity index 100% rename from src/main/java/com/mashibing/dp/cor/servlet/v2/readme rename to src/main/java/com/shenyy/dp/cor/servlet/v2/readme diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v3/Servlet_Main.java b/src/main/java/com/shenyy/dp/cor/servlet/v3/Servlet_Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/cor/servlet/v3/Servlet_Main.java rename to src/main/java/com/shenyy/dp/cor/servlet/v3/Servlet_Main.java index 376011d..a38ddb3 100644 --- a/src/main/java/com/mashibing/dp/cor/servlet/v3/Servlet_Main.java +++ b/src/main/java/com/shenyy/dp/cor/servlet/v3/Servlet_Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.cor.servlet.v3; +package com.shenyy.dp.cor.servlet.v3; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v3/readme b/src/main/java/com/shenyy/dp/cor/servlet/v3/readme similarity index 100% rename from src/main/java/com/mashibing/dp/cor/servlet/v3/readme rename to src/main/java/com/shenyy/dp/cor/servlet/v3/readme diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v4/Servlet_Main.java b/src/main/java/com/shenyy/dp/cor/servlet/v4/Servlet_Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/cor/servlet/v4/Servlet_Main.java rename to src/main/java/com/shenyy/dp/cor/servlet/v4/Servlet_Main.java index a401ee5..6c4f4dc 100644 --- a/src/main/java/com/mashibing/dp/cor/servlet/v4/Servlet_Main.java +++ b/src/main/java/com/shenyy/dp/cor/servlet/v4/Servlet_Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.cor.servlet.v4; +package com.shenyy.dp.cor.servlet.v4; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/cor/servlet/v4/readme b/src/main/java/com/shenyy/dp/cor/servlet/v4/readme similarity index 100% rename from src/main/java/com/mashibing/dp/cor/servlet/v4/readme rename to src/main/java/com/shenyy/dp/cor/servlet/v4/readme diff --git a/src/main/java/com/mashibing/dp/decorator/Main.java b/src/main/java/com/shenyy/dp/decorator/Main.java similarity index 92% rename from src/main/java/com/mashibing/dp/decorator/Main.java rename to src/main/java/com/shenyy/dp/decorator/Main.java index eb9a12b..53293d4 100644 --- a/src/main/java/com/mashibing/dp/decorator/Main.java +++ b/src/main/java/com/shenyy/dp/decorator/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.decorator; +package com.shenyy.dp.decorator; import java.io.*; diff --git a/src/main/java/com/mashibing/dp/decorator/readme b/src/main/java/com/shenyy/dp/decorator/readme similarity index 100% rename from src/main/java/com/mashibing/dp/decorator/readme rename to src/main/java/com/shenyy/dp/decorator/readme diff --git a/src/main/java/com/mashibing/dp/factorymethod/Broom.java b/src/main/java/com/shenyy/dp/factorymethod/Broom.java similarity index 78% rename from src/main/java/com/mashibing/dp/factorymethod/Broom.java rename to src/main/java/com/shenyy/dp/factorymethod/Broom.java index ddcc76e..aa56f02 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/Broom.java +++ b/src/main/java/com/shenyy/dp/factorymethod/Broom.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; public class Broom implements Moveable{ diff --git a/src/main/java/com/mashibing/dp/factorymethod/Car.java b/src/main/java/com/shenyy/dp/factorymethod/Car.java similarity index 75% rename from src/main/java/com/mashibing/dp/factorymethod/Car.java rename to src/main/java/com/shenyy/dp/factorymethod/Car.java index 03ea460..f1d4898 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/Car.java +++ b/src/main/java/com/shenyy/dp/factorymethod/Car.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; public class Car implements Moveable { diff --git a/src/main/java/com/mashibing/dp/factorymethod/CarFactory.java b/src/main/java/com/shenyy/dp/factorymethod/CarFactory.java similarity index 77% rename from src/main/java/com/mashibing/dp/factorymethod/CarFactory.java rename to src/main/java/com/shenyy/dp/factorymethod/CarFactory.java index c698c8f..fd4b879 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/CarFactory.java +++ b/src/main/java/com/shenyy/dp/factorymethod/CarFactory.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; public class CarFactory { public Moveable create() { diff --git a/src/main/java/com/mashibing/dp/factorymethod/Main.java b/src/main/java/com/shenyy/dp/factorymethod/Main.java similarity index 77% rename from src/main/java/com/mashibing/dp/factorymethod/Main.java rename to src/main/java/com/shenyy/dp/factorymethod/Main.java index b87800a..f877fce 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/Main.java +++ b/src/main/java/com/shenyy/dp/factorymethod/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/mashibing/dp/factorymethod/Moveable.java b/src/main/java/com/shenyy/dp/factorymethod/Moveable.java similarity index 53% rename from src/main/java/com/mashibing/dp/factorymethod/Moveable.java rename to src/main/java/com/shenyy/dp/factorymethod/Moveable.java index 0a31571..edbac6a 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/Moveable.java +++ b/src/main/java/com/shenyy/dp/factorymethod/Moveable.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; public interface Moveable { void go(); diff --git a/src/main/java/com/mashibing/dp/factorymethod/Plane.java b/src/main/java/com/shenyy/dp/factorymethod/Plane.java similarity index 76% rename from src/main/java/com/mashibing/dp/factorymethod/Plane.java rename to src/main/java/com/shenyy/dp/factorymethod/Plane.java index e60045f..94e0055 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/Plane.java +++ b/src/main/java/com/shenyy/dp/factorymethod/Plane.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; public class Plane implements Moveable { public void go() { diff --git a/src/main/java/com/mashibing/dp/factorymethod/SimpleVehicleFactory.java b/src/main/java/com/shenyy/dp/factorymethod/SimpleVehicleFactory.java similarity index 85% rename from src/main/java/com/mashibing/dp/factorymethod/SimpleVehicleFactory.java rename to src/main/java/com/shenyy/dp/factorymethod/SimpleVehicleFactory.java index ba9b902..9e4e3ca 100644 --- a/src/main/java/com/mashibing/dp/factorymethod/SimpleVehicleFactory.java +++ b/src/main/java/com/shenyy/dp/factorymethod/SimpleVehicleFactory.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.factorymethod; +package com.shenyy.dp.factorymethod; /** * 简单工厂的可扩展性不好 diff --git a/src/main/java/com/mashibing/dp/flyweight/BulletPool.java b/src/main/java/com/shenyy/dp/flyweight/BulletPool.java similarity index 95% rename from src/main/java/com/mashibing/dp/flyweight/BulletPool.java rename to src/main/java/com/shenyy/dp/flyweight/BulletPool.java index c4bd5a5..f1e5e15 100644 --- a/src/main/java/com/mashibing/dp/flyweight/BulletPool.java +++ b/src/main/java/com/shenyy/dp/flyweight/BulletPool.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.flyweight; +package com.shenyy.dp.flyweight; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/flyweight/TestString.java b/src/main/java/com/shenyy/dp/flyweight/TestString.java similarity index 92% rename from src/main/java/com/mashibing/dp/flyweight/TestString.java rename to src/main/java/com/shenyy/dp/flyweight/TestString.java index 97b19e1..aaed66d 100644 --- a/src/main/java/com/mashibing/dp/flyweight/TestString.java +++ b/src/main/java/com/shenyy/dp/flyweight/TestString.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.flyweight; +package com.shenyy.dp.flyweight; public class TestString { public static void main(String[] args) { diff --git a/src/main/java/com/mashibing/dp/intepreter/readme b/src/main/java/com/shenyy/dp/intepreter/readme similarity index 100% rename from src/main/java/com/mashibing/dp/intepreter/readme rename to src/main/java/com/shenyy/dp/intepreter/readme diff --git a/src/main/java/com/mashibing/dp/memento/readme b/src/main/java/com/shenyy/dp/memento/readme similarity index 100% rename from src/main/java/com/mashibing/dp/memento/readme rename to src/main/java/com/shenyy/dp/memento/readme diff --git a/src/main/java/com/mashibing/dp/observer/v1/Main1.java b/src/main/java/com/shenyy/dp/observer/v1/Main1.java similarity index 85% rename from src/main/java/com/mashibing/dp/observer/v1/Main1.java rename to src/main/java/com/shenyy/dp/observer/v1/Main1.java index c5c57b1..56f1550 100644 --- a/src/main/java/com/mashibing/dp/observer/v1/Main1.java +++ b/src/main/java/com/shenyy/dp/observer/v1/Main1.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v1; +package com.shenyy.dp.observer.v1; /** * 披着面向对象外衣的面向过程 diff --git a/src/main/java/com/mashibing/dp/observer/v10/readme b/src/main/java/com/shenyy/dp/observer/v10/readme similarity index 100% rename from src/main/java/com/mashibing/dp/observer/v10/readme rename to src/main/java/com/shenyy/dp/observer/v10/readme diff --git a/src/main/java/com/mashibing/dp/observer/v11/readme b/src/main/java/com/shenyy/dp/observer/v11/readme similarity index 100% rename from src/main/java/com/mashibing/dp/observer/v11/readme rename to src/main/java/com/shenyy/dp/observer/v11/readme diff --git a/src/main/java/com/mashibing/dp/observer/v2/Main.java b/src/main/java/com/shenyy/dp/observer/v2/Main.java similarity index 94% rename from src/main/java/com/mashibing/dp/observer/v2/Main.java rename to src/main/java/com/shenyy/dp/observer/v2/Main.java index b3a97f3..ef96d8c 100644 --- a/src/main/java/com/mashibing/dp/observer/v2/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v2/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v2; +package com.shenyy.dp.observer.v2; /** * 面向对象的傻等 diff --git a/src/main/java/com/mashibing/dp/observer/v3/Main.java b/src/main/java/com/shenyy/dp/observer/v3/Main.java similarity index 92% rename from src/main/java/com/mashibing/dp/observer/v3/Main.java rename to src/main/java/com/shenyy/dp/observer/v3/Main.java index 5a1e543..ab8e1c3 100644 --- a/src/main/java/com/mashibing/dp/observer/v3/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v3/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v3; +package com.shenyy.dp.observer.v3; /** * 加入观察者 diff --git a/src/main/java/com/mashibing/dp/observer/v4/Main.java b/src/main/java/com/shenyy/dp/observer/v4/Main.java similarity index 95% rename from src/main/java/com/mashibing/dp/observer/v4/Main.java rename to src/main/java/com/shenyy/dp/observer/v4/Main.java index a2e998a..6da336e 100644 --- a/src/main/java/com/mashibing/dp/observer/v4/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v4/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v4; +package com.shenyy.dp.observer.v4; /** * 加入多个观察者 diff --git a/src/main/java/com/mashibing/dp/observer/v5/Main.java b/src/main/java/com/shenyy/dp/observer/v5/Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/observer/v5/Main.java rename to src/main/java/com/shenyy/dp/observer/v5/Main.java index 8e64f1f..b66b0af 100644 --- a/src/main/java/com/mashibing/dp/observer/v5/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v5/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v5; +package com.shenyy.dp.observer.v5; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/observer/v6/Main.java b/src/main/java/com/shenyy/dp/observer/v6/Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/observer/v6/Main.java rename to src/main/java/com/shenyy/dp/observer/v6/Main.java index 1420d1c..beb76c7 100644 --- a/src/main/java/com/mashibing/dp/observer/v6/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v6/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v6; +package com.shenyy.dp.observer.v6; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/observer/v7/Main.java b/src/main/java/com/shenyy/dp/observer/v7/Main.java similarity index 97% rename from src/main/java/com/mashibing/dp/observer/v7/Main.java rename to src/main/java/com/shenyy/dp/observer/v7/Main.java index 5270c5d..89c6ca2 100644 --- a/src/main/java/com/mashibing/dp/observer/v7/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v7/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v7; +package com.shenyy.dp.observer.v7; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/observer/v8/Main.java b/src/main/java/com/shenyy/dp/observer/v8/Main.java similarity index 98% rename from src/main/java/com/mashibing/dp/observer/v8/Main.java rename to src/main/java/com/shenyy/dp/observer/v8/Main.java index 2178827..7c22f19 100644 --- a/src/main/java/com/mashibing/dp/observer/v8/Main.java +++ b/src/main/java/com/shenyy/dp/observer/v8/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v8; +package com.shenyy.dp.observer.v8; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/observer/v9/Test.java b/src/main/java/com/shenyy/dp/observer/v9/Test.java similarity index 97% rename from src/main/java/com/mashibing/dp/observer/v9/Test.java rename to src/main/java/com/shenyy/dp/observer/v9/Test.java index 4aed338..a926877 100644 --- a/src/main/java/com/mashibing/dp/observer/v9/Test.java +++ b/src/main/java/com/shenyy/dp/observer/v9/Test.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v9; +package com.shenyy.dp.observer.v9; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/mashibing/dp/observer/v9/TestFrame.java b/src/main/java/com/shenyy/dp/observer/v9/TestFrame.java similarity index 96% rename from src/main/java/com/mashibing/dp/observer/v9/TestFrame.java rename to src/main/java/com/shenyy/dp/observer/v9/TestFrame.java index 9417bd9..8ea80b1 100644 --- a/src/main/java/com/mashibing/dp/observer/v9/TestFrame.java +++ b/src/main/java/com/shenyy/dp/observer/v9/TestFrame.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.observer.v9; +package com.shenyy.dp.observer.v9; import java.awt.Button; import java.awt.Frame; diff --git a/src/main/java/com/mashibing/dp/prototype/v1/Test.java b/src/main/java/com/shenyy/dp/prototype/v1/Test.java similarity index 96% rename from src/main/java/com/mashibing/dp/prototype/v1/Test.java rename to src/main/java/com/shenyy/dp/prototype/v1/Test.java index 0c371c2..4bb0869 100644 --- a/src/main/java/com/mashibing/dp/prototype/v1/Test.java +++ b/src/main/java/com/shenyy/dp/prototype/v1/Test.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.prototype.v1; +package com.shenyy.dp.prototype.v1; /** * 浅克隆 diff --git a/src/main/java/com/mashibing/dp/prototype/v2/Test.java b/src/main/java/com/shenyy/dp/prototype/v2/Test.java similarity index 96% rename from src/main/java/com/mashibing/dp/prototype/v2/Test.java rename to src/main/java/com/shenyy/dp/prototype/v2/Test.java index b5ad31a..1b2ecee 100644 --- a/src/main/java/com/mashibing/dp/prototype/v2/Test.java +++ b/src/main/java/com/shenyy/dp/prototype/v2/Test.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.prototype.v2; +package com.shenyy.dp.prototype.v2; /** * 深克隆的处理 diff --git a/src/main/java/com/mashibing/dp/prototype/v3/Test.java b/src/main/java/com/shenyy/dp/prototype/v3/Test.java similarity index 97% rename from src/main/java/com/mashibing/dp/prototype/v3/Test.java rename to src/main/java/com/shenyy/dp/prototype/v3/Test.java index 478f537..d56acdd 100644 --- a/src/main/java/com/mashibing/dp/prototype/v3/Test.java +++ b/src/main/java/com/shenyy/dp/prototype/v3/Test.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.prototype.v3; +package com.shenyy.dp.prototype.v3; /** * String需要进一步深克隆吗? diff --git a/src/main/java/com/mashibing/dp/prototype/v4/Test.java b/src/main/java/com/shenyy/dp/prototype/v4/Test.java similarity index 96% rename from src/main/java/com/mashibing/dp/prototype/v4/Test.java rename to src/main/java/com/shenyy/dp/prototype/v4/Test.java index c29f330..4edbe42 100644 --- a/src/main/java/com/mashibing/dp/prototype/v4/Test.java +++ b/src/main/java/com/shenyy/dp/prototype/v4/Test.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.prototype.v4; +package com.shenyy.dp.prototype.v4; /** * String需要进一步深克隆吗? diff --git a/src/main/java/com/mashibing/dp/proxy/v01/Tank.java b/src/main/java/com/shenyy/dp/proxy/v01/Tank.java similarity index 92% rename from src/main/java/com/mashibing/dp/proxy/v01/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v01/Tank.java index fb9ed10..05cdf34 100644 --- a/src/main/java/com/mashibing/dp/proxy/v01/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v01/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v01; +package com.shenyy.dp.proxy.v01; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v02/Tank.java b/src/main/java/com/shenyy/dp/proxy/v02/Tank.java similarity index 95% rename from src/main/java/com/mashibing/dp/proxy/v02/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v02/Tank.java index 260e28c..be20bde 100644 --- a/src/main/java/com/mashibing/dp/proxy/v02/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v02/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v02; +package com.shenyy.dp.proxy.v02; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v03/Tank.java b/src/main/java/com/shenyy/dp/proxy/v03/Tank.java similarity index 95% rename from src/main/java/com/mashibing/dp/proxy/v03/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v03/Tank.java index dba96b7..01fb08d 100644 --- a/src/main/java/com/mashibing/dp/proxy/v03/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v03/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v03; +package com.shenyy.dp.proxy.v03; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v04/Tank.java b/src/main/java/com/shenyy/dp/proxy/v04/Tank.java similarity index 96% rename from src/main/java/com/mashibing/dp/proxy/v04/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v04/Tank.java index 618dd91..b7c5c81 100644 --- a/src/main/java/com/mashibing/dp/proxy/v04/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v04/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v04; +package com.shenyy.dp.proxy.v04; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v05/Tank.java b/src/main/java/com/shenyy/dp/proxy/v05/Tank.java similarity index 96% rename from src/main/java/com/mashibing/dp/proxy/v05/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v05/Tank.java index 44e4fa5..7a5d03a 100644 --- a/src/main/java/com/mashibing/dp/proxy/v05/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v05/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v05; +package com.shenyy.dp.proxy.v05; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v06/Tank.java b/src/main/java/com/shenyy/dp/proxy/v06/Tank.java similarity index 97% rename from src/main/java/com/mashibing/dp/proxy/v06/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v06/Tank.java index 7f5095a..d65774f 100644 --- a/src/main/java/com/mashibing/dp/proxy/v06/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v06/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v06; +package com.shenyy.dp.proxy.v06; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v07/Tank.java b/src/main/java/com/shenyy/dp/proxy/v07/Tank.java similarity index 98% rename from src/main/java/com/mashibing/dp/proxy/v07/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v07/Tank.java index 928f6c9..e1d526c 100644 --- a/src/main/java/com/mashibing/dp/proxy/v07/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v07/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v07; +package com.shenyy.dp.proxy.v07; import java.util.Random; diff --git a/src/main/java/com/mashibing/dp/proxy/v08/Tank.java b/src/main/java/com/shenyy/dp/proxy/v08/Tank.java similarity index 98% rename from src/main/java/com/mashibing/dp/proxy/v08/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v08/Tank.java index b9aa038..1c8a639 100644 --- a/src/main/java/com/mashibing/dp/proxy/v08/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v08/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v08; +package com.shenyy.dp.proxy.v08; import java.lang.reflect.InvocationHandler; diff --git a/src/main/java/com/mashibing/dp/proxy/v09/Tank.java b/src/main/java/com/shenyy/dp/proxy/v09/Tank.java similarity index 98% rename from src/main/java/com/mashibing/dp/proxy/v09/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v09/Tank.java index 22879b2..3ae4658 100644 --- a/src/main/java/com/mashibing/dp/proxy/v09/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v09/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.proxy.v09; +package com.shenyy.dp.proxy.v09; diff --git a/src/main/java/com/mashibing/dp/proxy/v10/Tank.java b/src/main/java/com/shenyy/dp/proxy/v10/Tank.java similarity index 97% rename from src/main/java/com/mashibing/dp/proxy/v10/Tank.java rename to src/main/java/com/shenyy/dp/proxy/v10/Tank.java index 8bc072f..7c74a9e 100644 --- a/src/main/java/com/mashibing/dp/proxy/v10/Tank.java +++ b/src/main/java/com/shenyy/dp/proxy/v10/Tank.java @@ -1,11 +1,10 @@ -package com.mashibing.dp.proxy.v10; +package com.shenyy.dp.proxy.v10; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; -import java.util.Arrays; import java.util.Random; /** diff --git a/src/main/java/com/mashibing/dp/singleton/Main.java b/src/main/java/com/shenyy/dp/singleton/Main.java similarity index 76% rename from src/main/java/com/mashibing/dp/singleton/Main.java rename to src/main/java/com/shenyy/dp/singleton/Main.java index 5900c0d..3dc18d4 100644 --- a/src/main/java/com/mashibing/dp/singleton/Main.java +++ b/src/main/java/com/shenyy/dp/singleton/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; public class Main { diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr01.java b/src/main/java/com/shenyy/dp/singleton/Mgr01.java similarity index 94% rename from src/main/java/com/mashibing/dp/singleton/Mgr01.java rename to src/main/java/com/shenyy/dp/singleton/Mgr01.java index b0010c9..8d95b46 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr01.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr01.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * 饿汉式 diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr02.java b/src/main/java/com/shenyy/dp/singleton/Mgr02.java similarity index 92% rename from src/main/java/com/mashibing/dp/singleton/Mgr02.java rename to src/main/java/com/shenyy/dp/singleton/Mgr02.java index bbd3f5f..dc9dbf0 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr02.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr02.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * 跟01是一个意思 diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr03.java b/src/main/java/com/shenyy/dp/singleton/Mgr03.java similarity index 95% rename from src/main/java/com/mashibing/dp/singleton/Mgr03.java rename to src/main/java/com/shenyy/dp/singleton/Mgr03.java index 26d42f9..765cb32 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr03.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr03.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * lazy loading diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr04.java b/src/main/java/com/shenyy/dp/singleton/Mgr04.java similarity index 96% rename from src/main/java/com/mashibing/dp/singleton/Mgr04.java rename to src/main/java/com/shenyy/dp/singleton/Mgr04.java index 427188d..a25f731 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr04.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr04.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * lazy loading diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr05.java b/src/main/java/com/shenyy/dp/singleton/Mgr05.java similarity index 96% rename from src/main/java/com/mashibing/dp/singleton/Mgr05.java rename to src/main/java/com/shenyy/dp/singleton/Mgr05.java index d94254c..da49824 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr05.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr05.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * lazy loading diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr06.java b/src/main/java/com/shenyy/dp/singleton/Mgr06.java similarity index 96% rename from src/main/java/com/mashibing/dp/singleton/Mgr06.java rename to src/main/java/com/shenyy/dp/singleton/Mgr06.java index 7076a9d..ffbc8b4 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr06.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr06.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * lazy loading diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr07.java b/src/main/java/com/shenyy/dp/singleton/Mgr07.java similarity index 94% rename from src/main/java/com/mashibing/dp/singleton/Mgr07.java rename to src/main/java/com/shenyy/dp/singleton/Mgr07.java index b5f9ce7..08c77c8 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr07.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr07.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * 静态内部类方式 diff --git a/src/main/java/com/mashibing/dp/singleton/Mgr08.java b/src/main/java/com/shenyy/dp/singleton/Mgr08.java similarity index 90% rename from src/main/java/com/mashibing/dp/singleton/Mgr08.java rename to src/main/java/com/shenyy/dp/singleton/Mgr08.java index 8e7c841..542c828 100644 --- a/src/main/java/com/mashibing/dp/singleton/Mgr08.java +++ b/src/main/java/com/shenyy/dp/singleton/Mgr08.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.singleton; +package com.shenyy.dp.singleton; /** * 不仅可以解决线程同步,还可以防止反序列化。 diff --git a/src/main/java/com/mashibing/dp/spring/v1/Main.java b/src/main/java/com/shenyy/dp/spring/v1/Main.java similarity index 91% rename from src/main/java/com/mashibing/dp/spring/v1/Main.java rename to src/main/java/com/shenyy/dp/spring/v1/Main.java index 8918fe8..fab82af 100644 --- a/src/main/java/com/mashibing/dp/spring/v1/Main.java +++ b/src/main/java/com/shenyy/dp/spring/v1/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.spring.v1; +package com.shenyy.dp.spring.v1; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; diff --git a/src/main/java/com/mashibing/dp/spring/v2/Tank.java b/src/main/java/com/shenyy/dp/spring/v1/Tank.java similarity index 91% rename from src/main/java/com/mashibing/dp/spring/v2/Tank.java rename to src/main/java/com/shenyy/dp/spring/v1/Tank.java index a09ebbc..00690ba 100644 --- a/src/main/java/com/mashibing/dp/spring/v2/Tank.java +++ b/src/main/java/com/shenyy/dp/spring/v1/Tank.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.spring.v2; +package com.shenyy.dp.spring.v1; diff --git a/src/main/java/com/mashibing/dp/spring/v1/TimeProxy.java b/src/main/java/com/shenyy/dp/spring/v1/TimeProxy.java similarity index 87% rename from src/main/java/com/mashibing/dp/spring/v1/TimeProxy.java rename to src/main/java/com/shenyy/dp/spring/v1/TimeProxy.java index c54394d..a62ab5a 100644 --- a/src/main/java/com/mashibing/dp/spring/v1/TimeProxy.java +++ b/src/main/java/com/shenyy/dp/spring/v1/TimeProxy.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.spring.v1; +package com.shenyy.dp.spring.v1; public class TimeProxy { diff --git a/src/main/java/com/mashibing/dp/spring/v2/Main.java b/src/main/java/com/shenyy/dp/spring/v2/Main.java similarity index 91% rename from src/main/java/com/mashibing/dp/spring/v2/Main.java rename to src/main/java/com/shenyy/dp/spring/v2/Main.java index 4ff188b..de18885 100644 --- a/src/main/java/com/mashibing/dp/spring/v2/Main.java +++ b/src/main/java/com/shenyy/dp/spring/v2/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.spring.v2; +package com.shenyy.dp.spring.v2; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; diff --git a/src/main/java/com/mashibing/dp/spring/v1/Tank.java b/src/main/java/com/shenyy/dp/spring/v2/Tank.java similarity index 71% rename from src/main/java/com/mashibing/dp/spring/v1/Tank.java rename to src/main/java/com/shenyy/dp/spring/v2/Tank.java index 65d1c88..2204357 100644 --- a/src/main/java/com/mashibing/dp/spring/v1/Tank.java +++ b/src/main/java/com/shenyy/dp/spring/v2/Tank.java @@ -1,10 +1,7 @@ -package com.mashibing.dp.spring.v1; +package com.shenyy.dp.spring.v2; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.util.Random; /** diff --git a/src/main/java/com/mashibing/dp/spring/v2/TimeProxy.java b/src/main/java/com/shenyy/dp/spring/v2/TimeProxy.java similarity index 93% rename from src/main/java/com/mashibing/dp/spring/v2/TimeProxy.java rename to src/main/java/com/shenyy/dp/spring/v2/TimeProxy.java index cd05ef1..dc15648 100644 --- a/src/main/java/com/mashibing/dp/spring/v2/TimeProxy.java +++ b/src/main/java/com/shenyy/dp/spring/v2/TimeProxy.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.spring.v2; +package com.shenyy.dp.spring.v2; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; diff --git a/src/main/java/com/mashibing/dp/state/readme b/src/main/java/com/shenyy/dp/state/readme similarity index 100% rename from src/main/java/com/mashibing/dp/state/readme rename to src/main/java/com/shenyy/dp/state/readme diff --git a/src/main/java/com/mashibing/dp/state/thread/Action.java b/src/main/java/com/shenyy/dp/state/thread/Action.java similarity index 51% rename from src/main/java/com/mashibing/dp/state/thread/Action.java rename to src/main/java/com/shenyy/dp/state/thread/Action.java index 2dcd9ac..18c6844 100644 --- a/src/main/java/com/mashibing/dp/state/thread/Action.java +++ b/src/main/java/com/shenyy/dp/state/thread/Action.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.thread; +package com.shenyy.dp.state.thread; public class Action { String msg; diff --git a/src/main/java/com/mashibing/dp/state/thread/NewState.java b/src/main/java/com/shenyy/dp/state/thread/NewState.java similarity index 88% rename from src/main/java/com/mashibing/dp/state/thread/NewState.java rename to src/main/java/com/shenyy/dp/state/thread/NewState.java index 10272df..532a1c9 100644 --- a/src/main/java/com/mashibing/dp/state/thread/NewState.java +++ b/src/main/java/com/shenyy/dp/state/thread/NewState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.thread; +package com.shenyy.dp.state.thread; public class NewState extends ThreadState_ { private Thread_ t; diff --git a/src/main/java/com/mashibing/dp/state/thread/RunningState.java b/src/main/java/com/shenyy/dp/state/thread/RunningState.java similarity index 85% rename from src/main/java/com/mashibing/dp/state/thread/RunningState.java rename to src/main/java/com/shenyy/dp/state/thread/RunningState.java index f2ab05e..822d82b 100644 --- a/src/main/java/com/mashibing/dp/state/thread/RunningState.java +++ b/src/main/java/com/shenyy/dp/state/thread/RunningState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.thread; +package com.shenyy.dp.state.thread; public class RunningState extends ThreadState_ { private Thread_ t; diff --git a/src/main/java/com/mashibing/dp/state/thread/TerminatedState.java b/src/main/java/com/shenyy/dp/state/thread/TerminatedState.java similarity index 85% rename from src/main/java/com/mashibing/dp/state/thread/TerminatedState.java rename to src/main/java/com/shenyy/dp/state/thread/TerminatedState.java index cee981d..469ab34 100644 --- a/src/main/java/com/mashibing/dp/state/thread/TerminatedState.java +++ b/src/main/java/com/shenyy/dp/state/thread/TerminatedState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.thread; +package com.shenyy.dp.state.thread; public class TerminatedState extends ThreadState_ { private Thread_ t; diff --git a/src/main/java/com/mashibing/dp/state/thread/ThreadState_.java b/src/main/java/com/shenyy/dp/state/thread/ThreadState_.java similarity index 72% rename from src/main/java/com/mashibing/dp/state/thread/ThreadState_.java rename to src/main/java/com/shenyy/dp/state/thread/ThreadState_.java index d2e062e..99fa84e 100644 --- a/src/main/java/com/mashibing/dp/state/thread/ThreadState_.java +++ b/src/main/java/com/shenyy/dp/state/thread/ThreadState_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.thread; +package com.shenyy.dp.state.thread; public abstract class ThreadState_ { abstract void move(Action input); diff --git a/src/main/java/com/mashibing/dp/state/thread/Thread_.java b/src/main/java/com/shenyy/dp/state/thread/Thread_.java similarity index 80% rename from src/main/java/com/mashibing/dp/state/thread/Thread_.java rename to src/main/java/com/shenyy/dp/state/thread/Thread_.java index 41add4e..5f9b42c 100644 --- a/src/main/java/com/mashibing/dp/state/thread/Thread_.java +++ b/src/main/java/com/shenyy/dp/state/thread/Thread_.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.thread; +package com.shenyy.dp.state.thread; public class Thread_ { ThreadState_ state; diff --git a/src/main/java/com/mashibing/dp/state/v1/MM.java b/src/main/java/com/shenyy/dp/state/v1/MM.java similarity index 89% rename from src/main/java/com/mashibing/dp/state/v1/MM.java rename to src/main/java/com/shenyy/dp/state/v1/MM.java index b83ec7b..366ebc2 100644 --- a/src/main/java/com/mashibing/dp/state/v1/MM.java +++ b/src/main/java/com/shenyy/dp/state/v1/MM.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.v1; +package com.shenyy.dp.state.v1; /** * 当增加新的状态时非常不方便 diff --git a/src/main/java/com/mashibing/dp/state/v2/MM.java b/src/main/java/com/shenyy/dp/state/v2/MM.java similarity index 89% rename from src/main/java/com/mashibing/dp/state/v2/MM.java rename to src/main/java/com/shenyy/dp/state/v2/MM.java index 8407e42..3c4a67c 100644 --- a/src/main/java/com/mashibing/dp/state/v2/MM.java +++ b/src/main/java/com/shenyy/dp/state/v2/MM.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.v2; +package com.shenyy.dp.state.v2; /** * 当增加新的状态时非常不方便 diff --git a/src/main/java/com/mashibing/dp/state/v2/MMHappyState.java b/src/main/java/com/shenyy/dp/state/v2/MMHappyState.java similarity index 85% rename from src/main/java/com/mashibing/dp/state/v2/MMHappyState.java rename to src/main/java/com/shenyy/dp/state/v2/MMHappyState.java index 85fa36c..24741e9 100644 --- a/src/main/java/com/mashibing/dp/state/v2/MMHappyState.java +++ b/src/main/java/com/shenyy/dp/state/v2/MMHappyState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.v2; +package com.shenyy.dp.state.v2; public class MMHappyState extends MMState { @Override diff --git a/src/main/java/com/mashibing/dp/state/v2/MMNervousState.java b/src/main/java/com/shenyy/dp/state/v2/MMNervousState.java similarity index 82% rename from src/main/java/com/mashibing/dp/state/v2/MMNervousState.java rename to src/main/java/com/shenyy/dp/state/v2/MMNervousState.java index e6c28cb..bd13bad 100644 --- a/src/main/java/com/mashibing/dp/state/v2/MMNervousState.java +++ b/src/main/java/com/shenyy/dp/state/v2/MMNervousState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.v2; +package com.shenyy.dp.state.v2; public class MMNervousState extends MMState { @Override diff --git a/src/main/java/com/mashibing/dp/state/v2/MMSadState.java b/src/main/java/com/shenyy/dp/state/v2/MMSadState.java similarity index 82% rename from src/main/java/com/mashibing/dp/state/v2/MMSadState.java rename to src/main/java/com/shenyy/dp/state/v2/MMSadState.java index 89fba63..adb5b49 100644 --- a/src/main/java/com/mashibing/dp/state/v2/MMSadState.java +++ b/src/main/java/com/shenyy/dp/state/v2/MMSadState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.v2; +package com.shenyy.dp.state.v2; public class MMSadState extends MMState { @Override diff --git a/src/main/java/com/mashibing/dp/state/v2/MMState.java b/src/main/java/com/shenyy/dp/state/v2/MMState.java similarity index 76% rename from src/main/java/com/mashibing/dp/state/v2/MMState.java rename to src/main/java/com/shenyy/dp/state/v2/MMState.java index 8c99c72..3d282f5 100644 --- a/src/main/java/com/mashibing/dp/state/v2/MMState.java +++ b/src/main/java/com/shenyy/dp/state/v2/MMState.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.state.v2; +package com.shenyy.dp.state.v2; public abstract class MMState { abstract void smile(); diff --git a/src/main/java/com/mashibing/dp/strategy/Cat.java b/src/main/java/com/shenyy/dp/strategy/Cat.java similarity index 93% rename from src/main/java/com/mashibing/dp/strategy/Cat.java rename to src/main/java/com/shenyy/dp/strategy/Cat.java index 1d2d7cd..7f6ed48 100644 --- a/src/main/java/com/mashibing/dp/strategy/Cat.java +++ b/src/main/java/com/shenyy/dp/strategy/Cat.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public class Cat implements Comparable { int weight, height; diff --git a/src/main/java/com/mashibing/dp/strategy/CatHeightComparator.java b/src/main/java/com/shenyy/dp/strategy/CatHeightComparator.java similarity index 87% rename from src/main/java/com/mashibing/dp/strategy/CatHeightComparator.java rename to src/main/java/com/shenyy/dp/strategy/CatHeightComparator.java index ae30fda..4ac76f6 100644 --- a/src/main/java/com/mashibing/dp/strategy/CatHeightComparator.java +++ b/src/main/java/com/shenyy/dp/strategy/CatHeightComparator.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public class CatHeightComparator implements Comparator { @Override diff --git a/src/main/java/com/mashibing/dp/strategy/CatWeightComparator.java b/src/main/java/com/shenyy/dp/strategy/CatWeightComparator.java similarity index 87% rename from src/main/java/com/mashibing/dp/strategy/CatWeightComparator.java rename to src/main/java/com/shenyy/dp/strategy/CatWeightComparator.java index 7969a02..d92befa 100644 --- a/src/main/java/com/mashibing/dp/strategy/CatWeightComparator.java +++ b/src/main/java/com/shenyy/dp/strategy/CatWeightComparator.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public class CatWeightComparator implements Comparator { @Override diff --git a/src/main/java/com/mashibing/dp/strategy/Comparable.java b/src/main/java/com/shenyy/dp/strategy/Comparable.java similarity index 63% rename from src/main/java/com/mashibing/dp/strategy/Comparable.java rename to src/main/java/com/shenyy/dp/strategy/Comparable.java index ef031ea..ac8e1fc 100644 --- a/src/main/java/com/mashibing/dp/strategy/Comparable.java +++ b/src/main/java/com/shenyy/dp/strategy/Comparable.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public interface Comparable { int compareTo(T o); diff --git a/src/main/java/com/mashibing/dp/strategy/Comparator.java b/src/main/java/com/shenyy/dp/strategy/Comparator.java similarity index 80% rename from src/main/java/com/mashibing/dp/strategy/Comparator.java rename to src/main/java/com/shenyy/dp/strategy/Comparator.java index 093667d..31b9961 100644 --- a/src/main/java/com/mashibing/dp/strategy/Comparator.java +++ b/src/main/java/com/shenyy/dp/strategy/Comparator.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; @FunctionalInterface public interface Comparator { diff --git a/src/main/java/com/mashibing/dp/strategy/Dog.java b/src/main/java/com/shenyy/dp/strategy/Dog.java similarity index 92% rename from src/main/java/com/mashibing/dp/strategy/Dog.java rename to src/main/java/com/shenyy/dp/strategy/Dog.java index 9584a37..5b5bcd7 100644 --- a/src/main/java/com/mashibing/dp/strategy/Dog.java +++ b/src/main/java/com/shenyy/dp/strategy/Dog.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public class Dog implements Comparable { diff --git a/src/main/java/com/mashibing/dp/strategy/DogComparator.java b/src/main/java/com/shenyy/dp/strategy/DogComparator.java similarity index 86% rename from src/main/java/com/mashibing/dp/strategy/DogComparator.java rename to src/main/java/com/shenyy/dp/strategy/DogComparator.java index c90d859..d1eb584 100644 --- a/src/main/java/com/mashibing/dp/strategy/DogComparator.java +++ b/src/main/java/com/shenyy/dp/strategy/DogComparator.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public class DogComparator implements Comparator { @Override diff --git a/src/main/java/com/mashibing/dp/strategy/Main.java b/src/main/java/com/shenyy/dp/strategy/Main.java similarity index 94% rename from src/main/java/com/mashibing/dp/strategy/Main.java rename to src/main/java/com/shenyy/dp/strategy/Main.java index a723f20..c230dfd 100644 --- a/src/main/java/com/mashibing/dp/strategy/Main.java +++ b/src/main/java/com/shenyy/dp/strategy/Main.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; import java.util.Arrays; diff --git a/src/main/java/com/mashibing/dp/strategy/Sorter.java b/src/main/java/com/shenyy/dp/strategy/Sorter.java similarity index 93% rename from src/main/java/com/mashibing/dp/strategy/Sorter.java rename to src/main/java/com/shenyy/dp/strategy/Sorter.java index a2c42fb..c74825d 100644 --- a/src/main/java/com/mashibing/dp/strategy/Sorter.java +++ b/src/main/java/com/shenyy/dp/strategy/Sorter.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.strategy; +package com.shenyy.dp.strategy; public class Sorter { diff --git a/src/main/java/com/mashibing/dp/visitor/Computer.java b/src/main/java/com/shenyy/dp/visitor/Computer.java similarity index 98% rename from src/main/java/com/mashibing/dp/visitor/Computer.java rename to src/main/java/com/shenyy/dp/visitor/Computer.java index dfaa618..051a50e 100644 --- a/src/main/java/com/mashibing/dp/visitor/Computer.java +++ b/src/main/java/com/shenyy/dp/visitor/Computer.java @@ -1,4 +1,4 @@ -package com.mashibing.dp.visitor; +package com.shenyy.dp.visitor; public class Computer { ComputerPart cpu = new CPU(); diff --git a/src/main/resources/app.xml b/src/main/resources/app.xml index 0f11269..759c15f 100644 --- a/src/main/resources/app.xml +++ b/src/main/resources/app.xml @@ -9,19 +9,19 @@ - - + + - + diff --git a/src/main/resources/app_auto.xml b/src/main/resources/app_auto.xml index 2b7ac68..b55ebe6 100644 --- a/src/main/resources/app_auto.xml +++ b/src/main/resources/app_auto.xml @@ -9,8 +9,8 @@ - + From ac1b8846665c85167908f934cd9d77ad7662ee73 Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 13:20:05 +0800 Subject: [PATCH 02/37] =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 216 ++---------------- ...76\350\256\241\346\250\241\345\274\217.md" | 15 ++ 2 files changed, 37 insertions(+), 194 deletions(-) create mode 100644 "src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 74f182c..d2db281 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,191 +4,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -666,7 +493,8 @@ - diff --git "a/src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" new file mode 100644 index 0000000..06357ed --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -0,0 +1,15 @@ +## 什么是设计模式 + +设计模式使人们可以更加简单方便地复用成功的设计和体系结构。 + +将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 + +### 基本要素 + +一般而言,一个模式有四个基本要素: +1. **模式名称**(pattern name) 一个助记名,它用一两个词来描述模式的问题、解决方案和效果。 +2. **问题**(problem) 描述了应该在何时使用模式。 +3. **解决方案**(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。 +4. **效果**(consequences) 描述了模式应用的效果及使用模式应权衡的问题。 + +设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。 \ No newline at end of file From 99c6ec40e659eb40044b951b9591ce2e0e520fa6 Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 17:47:26 +0800 Subject: [PATCH 03/37] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E4=BB=8B=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...76\350\256\241\346\250\241\345\274\217.md" | 0 ...76\350\256\241\346\250\241\345\274\217.md" | 106 +++++++ ...76\350\256\241\346\250\241\345\274\217.md" | 36 +++ ...17\347\232\204\345\210\206\347\261\273.md" | 52 ++++ ...04\347\273\207\345\210\206\347\261\273.md" | 38 +++ ...30\347\232\204\346\226\271\345\274\217.md" | 267 ++++++++++++++++++ ...76\350\256\241\346\250\241\345\274\217.md" | 27 ++ ...76\350\256\241\346\250\241\345\274\217.md" | 31 ++ ...63\350\257\215\346\261\207\350\241\250.md" | 142 ++++++++++ .../introduction/assets/1563363834415.png | Bin 0 -> 68782 bytes .../introduction/assets/1563430491628.png | Bin 0 -> 60290 bytes .../introduction/assets/1563431139090.png | Bin 0 -> 153424 bytes .../introduction/assets/1563880582136.png | Bin 0 -> 157407 bytes 13 files changed, 699 insertions(+) rename "src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" => "src/main/java/com/shenyy/introduction/1.1\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" (100%) create mode 100644 "src/main/java/com/shenyy/introduction/1.2MVC\344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.3\346\217\217\350\277\260\350\256\276\350\256\241\346\250\241\345\274\217.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.4\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\345\210\206\347\261\273.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.5\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\347\273\204\347\273\207\345\210\206\347\261\273.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.6\350\256\276\350\256\241\346\250\241\345\274\217\350\247\243\345\206\263\350\256\276\350\256\241\351\227\256\351\242\230\347\232\204\346\226\271\345\274\217.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.7\346\200\216\346\240\267\351\200\211\346\213\251\350\256\276\350\256\241\346\250\241\345\274\217.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.8\346\200\216\346\240\267\344\275\277\347\224\250\350\256\276\350\256\241\346\250\241\345\274\217.md" create mode 100644 "src/main/java/com/shenyy/introduction/1.9\347\233\270\345\205\263\350\257\215\346\261\207\350\241\250.md" create mode 100644 src/main/java/com/shenyy/introduction/assets/1563363834415.png create mode 100644 src/main/java/com/shenyy/introduction/assets/1563430491628.png create mode 100644 src/main/java/com/shenyy/introduction/assets/1563431139090.png create mode 100644 src/main/java/com/shenyy/introduction/assets/1563880582136.png diff --git "a/src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/src/main/java/com/shenyy/introduction/1.1\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" similarity index 100% rename from "src/main/java/com/shenyy/introduction/\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" rename to "src/main/java/com/shenyy/introduction/1.1\344\273\200\344\271\210\346\230\257\350\256\276\350\256\241\346\250\241\345\274\217.md" diff --git "a/src/main/java/com/shenyy/introduction/1.2MVC\344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/src/main/java/com/shenyy/introduction/1.2MVC\344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md" new file mode 100644 index 0000000..a78da2a --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.2MVC\344\270\255\347\232\204\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -0,0 +1,106 @@ +## MVC 中的设计模式 + +MVC 的模型/视图/控制器(Model / View / Controller)三元组被用来构建用户界面。 + +### MVC 介绍 + +MVC包括三类对象: + +- 模型 Model 是应用对象 +- 视图 View 是它在屏幕上的表示 +- 控制器 Controller 定义用户界面对用户输入的响应方式 + +不使用 MVC,用户界面设计往往将这些对象混在一起,而 MVC 则将它们分离以提高灵活性和复用性。 + +### MVC 中的设计模式 + +MVC 的主要关系还是由 Observer、Composite和 +Strategy 三个设计模式给出的。 + +MVC 还使用了其他的设计模式,如:用来指定视图缺省控制器的 FactoryMethod 和用来增加视图滚动的Decorator。 + +### 视图和模型的关系 + +MVC 通过建立一个 “订购/通知” 协议来分离视图和模型。 + +视图必须保证它的显示正确地反映了模型的状态。 + +一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地得到刷新自己的机会。 + +这种方法可以让你为一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。 + +#### 示例 + +模型包含一些数据值,视图通过电子表格、柱状图、饼图这些不同的方式来显示这些数据。 + +当模型的数据发生变化时,模型就通知它的视图,而视图将与模型通信以访问这些数据值。 + +![1563363834415](assets/1563363834415.png) + +#### Observer 模式 + +表面上看,这个例子反映了将视图和模型分离的设计,然而这个设计还可用于解决更一 +般的问题: + +将对象分离,使得一个对象的改变能够影响另一些对象,而这个对象并不需要知 +道那些被影响的对象的细节。 + +这个更一般的设计被描述成 **Observer 模式**。 + +### 嵌套视图 + +MVC 的另一个特征是视图可以嵌套。 + +#### 示例 + +按钮控制面板可以用一个嵌套了按钮的复杂 +视图来实现。 + +对象查看器的用户界面可由嵌套的视图构成,这些视图又可复用于调试器。 + +MVC 用 View 类的子类 — `CompositeView` 类来支持嵌套视图。 + +`CompositeView`类的对象行为上类似于 View 类对象,一个组合视图可用于任何视图可用的地方,但是它包含并管理嵌套视图。 + +#### Composite 模式 + +上例反映了可以将组合视图与其构件平等对待的设计,同样地,该设计也适用于更一般 +的问题: + +将一些对象划为一组,并将该组对象当作一个对象来使用。 + +这个设计被描述为 +**Composite 模式**。 + +Composite 模式允许你创建一个类层次结构,一些子类定义了原子对象(如 +Button)而其他类定义了组合对象(CompositeView),这些组合对象是由原子对象组合而成的更复杂的对象。 + +### 视图和控制器 + +MVC 允许你在不改变视图外观的情况下改变视图对用户输入的响应方式。 + +#### 示例 + +你可能希望改变视图对键盘的响应方式,或希望使用弹出菜单而不是原来的命令键方式。 + +MVC 将响应机制封装在 Controller 对象中。 + +存在着一个 Controller 的类层次结构,使得可以方便地对原有 +Controller 做适当改变而创建新的 Controller。 + +View 使用 Controller 子类的实例来实现一个特定的响应策略。 + +要实现不同的响应策略只要用不同种类的 Controller 实例替换即可。 + +甚至可以在运行时刻通过改变 View 的 Controller 来改变 +View 对用户输入的响应方式。 + +例如,一个View可以被禁止接收任何输入,只需给它一个忽略 +输入事件的Controller。 + +#### Strategy 模式 + +View-Controller 关系是 Strategy 模式的一个例子。一个策略是一个表述算法的对象。 + +当你想静态或动态地替换一个算法,或你有很多不同的算法,或算法中包含你想封装的复杂 +数据结构,这时策略模式是非常有用的。 \ No newline at end of file diff --git "a/src/main/java/com/shenyy/introduction/1.3\346\217\217\350\277\260\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/src/main/java/com/shenyy/introduction/1.3\346\217\217\350\277\260\350\256\276\350\256\241\346\250\241\345\274\217.md" new file mode 100644 index 0000000..845d7e2 --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.3\346\217\217\350\277\260\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -0,0 +1,36 @@ +## 描述设计模式 + +为了达到设计复用,我们必须同时记录设计产生的决定过程、选择过程和权衡过程。 + +我们将用统一的格式描述设计模式,每一个模式根据以下的模板被分成若干部分: + +- **模式名和分类** + 模式名简洁地描述了模式的本质。 +- **意图** + 是回答下列问题的简单陈述:设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题? +- **别名** + 模式的其他名称。 +- **动机** + 用以说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景。 +- **适用性** + 什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况? +- **结构** + 采用基于对象建模技术的表示法对模式中的类进行图形描述。 +- **参与者** + 指设计模式中的类和/或对象以及它们各自的职责。 +- **协作** + 模式的参与者怎样协作以实现它们的职责。 +- **效果** + 模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的哪些方面可 + 以独立改变? +- **实现** + 实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于 + 实现语言的问题。 +- **代码示例** + 用来说明怎样用 Java 实现该模式的代码片段。 +- **已知应用** + 实际系统中发现的模式的例子。每个模式至少包括了两个不同领域的实例。 +- **相关模式** + 与这个模式紧密相关的模式有哪些?其间重要的不同之处是什么?这个模式应与哪些其 + 他模式一起使用? + diff --git "a/src/main/java/com/shenyy/introduction/1.4\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\345\210\206\347\261\273.md" "b/src/main/java/com/shenyy/introduction/1.4\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\345\210\206\347\261\273.md" new file mode 100644 index 0000000..4339a76 --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.4\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\345\210\206\347\261\273.md" @@ -0,0 +1,52 @@ +## 设计模式的分类 + +从第3章开始的模式目录中共包含 23 个设计模式。 + +它们的名字和意图列举如下: + +- **AbstractFactory**(3.1): +提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 +- **Adapter**(4.1): +将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 +- **Bridge**(4.2): +将抽象部分与它的实现部分分离,使它们都可以独立地变化。 +- **Builder**(3.2): +将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 +- **ChainofResponsibility**(5.1): +为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。 +- **Command**(5.2): +将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。 +- **Composite**(4.3): +将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。 +- **Decorator**(4.4): +动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。 +- **Facade**(4.5): +为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 +- **FactoryMethod**(3.3): +定义一个用于创建对象的接口,让子类决定将哪一个类实例化。FactoryMethod使一个类的实例化延迟到其子类。 +- **Flyweight**(4.6): +运用共享技术有效地支持大量细粒度的对象。 +- **Interpreter**(5.3): +给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 +- **Iterator**(5.4): +提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 +- **Mediator**(5.5): +用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 +- **Memento**(5.6): +在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。 +- **Observer**(5.7): +定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。 +- **Prototype**(3.4): +用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 +- **Proxy**(4.7): +为其他对象提供一个代理以控制对这个对象的访问。 +- **Singleton**(3.5): +保证一个类仅有一个实例,并提供一个访问它的全局访问点。 +- **State**(5.8): +允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。 +- **Strategy**(5.9): +定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。 +- **TemplateMethod**(5.10): +定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 +- **Visitor**(5.11): +表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 \ No newline at end of file diff --git "a/src/main/java/com/shenyy/introduction/1.5\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\347\273\204\347\273\207\345\210\206\347\261\273.md" "b/src/main/java/com/shenyy/introduction/1.5\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\347\273\204\347\273\207\345\210\206\347\261\273.md" new file mode 100644 index 0000000..f44ec5f --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.5\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\347\273\204\347\273\207\345\210\206\347\261\273.md" @@ -0,0 +1,38 @@ +## 设计模式的组织分类 + +分类有助于更快地学习目录中的模式,且对发现新的模式也有指导作用: + +![1563430491628](assets/1563430491628.png) + +#### 分类标准之目的准则 + +目的准则,即模式是用来完成什么工作的。 + +模式依据其目的可分为: + +- **创建型** (Creational):创建型模式与对象的创建有关。 +- **结构型** (Structural):结构型模式处理类或对象的组合。 +- **行为型** + (Behavioral):行为型模式对类或对象怎样交互和怎样分配职责进行描述。 + +#### 分类标准之范围准则 + +范围准则,指定模式主要是用于类还是用于对象。 + +- **类模式** 处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。 +- **对象模式** 处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。 + +从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。 + +#### 两种分类标准的联系 + +- **创建型类模式** 将对象的部分创建工作延迟到子类,而 **创建型对象模式** 则将它延迟到另一 + 个对象中。 +- **结构型类模式** 使用继承机制来组合类,而 **结构型对象模式** 则描述了对象的组装方式。 +- **行为型类模式** 使用继承描述算法和控制流,而 **行为型对象模式** 则描述一组对象怎样协作 + 完成单个对象所无法完成的任务。 + +#### 不同设计模式的关系 + +![1563431139090](assets/1563431139090.png) + diff --git "a/src/main/java/com/shenyy/introduction/1.6\350\256\276\350\256\241\346\250\241\345\274\217\350\247\243\345\206\263\350\256\276\350\256\241\351\227\256\351\242\230\347\232\204\346\226\271\345\274\217.md" "b/src/main/java/com/shenyy/introduction/1.6\350\256\276\350\256\241\346\250\241\345\274\217\350\247\243\345\206\263\350\256\276\350\256\241\351\227\256\351\242\230\347\232\204\346\226\271\345\274\217.md" new file mode 100644 index 0000000..4eb7f47 --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.6\350\256\276\350\256\241\346\250\241\345\274\217\350\247\243\345\206\263\350\256\276\350\256\241\351\227\256\351\242\230\347\232\204\346\226\271\345\274\217.md" @@ -0,0 +1,267 @@ +## 设计模式解决设计问题的方式 + +### 一、寻找合适的对象 + +面向对象设计最困难的部分是将系统分解成对象集合。 + +因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等等,它们都影响着系统的分解,并且这些因素 +通常还是互相冲突的。 + +面向对象设计方法学支持许多设计方法。 + +你可以写出一个问题描述,挑出名词和动词, +进而创建相应的类和操作;或者,你可以关注于系统的协作和职责关系;或者,你可以对现实世界建模,再将分析时发现的对象转化至设计中。 + +设计的许多对象来源于现实世界的分析模型。 + +但是,设计结果所得到的类通常在现实世 +界中并不存在,有些是像数组之类的低层类,而另一些则层次较高。 + +例如,Composite(4.3) 模式引入了统一对待现实世界中并不存在的对象的抽象方法。 + +严格反映当前现实世界的模型并不能产生也能反映将来世界的系统。 + +设计中的抽象对于产生灵活的设计是至关重要的。 + +设计模式帮你确定并不明显的抽象和描述这些抽象的对象。 + +例如,描述过程或算法的对象现实中并不存在,但它们却是设计的关键部分。 + +Strategy(5.9) 模式描述了怎样实现可互换的 +算法族。 + +State(5.8)模式将实体的每一个状态描述为一个对象。 + +这些对象在分析阶段,甚至在 +设计阶段的早期都并不存在,后来为使设计更灵活、复用性更好才将它们发掘出来。 + +### 二、决定对象的粒度 + +- Facade(4.5) 模式描述了怎样用对象表示完整的子系统 +- Flyweight(4.6)模式描述了如何支持大量的最小粒度的对象。 + +其他一些设计模式描述了将一个 +对象分解成许多小对象的特定方法。 + +- AbstractFactory(3.1)和Builder(3.2)产生那些专门负责生成其他对象的对象。 +- Visitor(5.10)和Command(5.2)生成的对象专门负责实现对其他对象或对象 + 组的请求。 + +### 三、指定对象接口 + +#### 对象接口 + +对象声明的每一个操作指定操作名、作为参数的对象和返回值,这就是所谓的操作的型构(signature)。 + +对象操作所定义的所有操作型构的集合被称为该对象的接口(interface)。 + +对象接口描述了该对象所能接受的全部请求的集合,任何匹配对象接口中型构的请求都可以发送给该对象。 + +#### 类型 + +类型(type)是用来标识特定接口的一个名字。 + +如果一个对象接受“Window”接口所定义的所有操作请求,那么我们就说该对象具有“Window”类型。 + +#### 对象接口 VS 类型 + +一个对象可以有许多类型,并且不同的对象可以共享同一个类型。对象接口的某部分可以用某个类型来刻画,而其他部分 +则可用其他类型刻画。两个类型相同的对象只需要共享它们的部分接口。接口可以包含其他接口作为子集。当一个类型的接口包含另一个类型的接口时,我们就说它是另一个类型的子 +类型(subtype),另一个类型称之为它的超类型(supertype)。我们常说子类型继承了它的超类型的接口。 + +#### 设计模式 VS 接口 + +设计模式通过确定接口的主要组成成分及经接口发送的数据类型,来帮助你定义接口。 + +设计模式也许还会告诉你接口中不应包括哪些东西。 + +Memento(5.6)模式是一个很好的例子, +它描述了怎样封装和保存对象内部的状态,以便一段时间后对象能恢复到这一状态。它规定 +了Memento对象必须定义两个接口:一个允许客户保持和复制memento的限制接口,和一个只 +有原对象才能使用的用来储存和提取memento中状态的特权接口。 + +设计模式也指定了接口之间的关系。特别地,它们经常要求一些类具有相似的接口;或 +它们对一些类的接口做了限制。 + +例如,Decorator(4.4)和Proxy(4.7)模式要求Decorator和Proxy +对象的接口与被修饰的对象和受委托的对象一致。而Visitor(5.11)模式中,Visitor接口必须反 +映出visitor能访问的对象的所有类。 + +### 四、描述对象的实现 + +#### 对象 + +对象的实现是由它的类决定的,类指定了对象的内部数据和表示,也定义了对象所能完成的操作。 + +对象通过实例化类来创建,此对象被称为该类的实例。当实例化类时,要给对象的内部数据(由实例变量组成)分配存储空间,并将操作与这些数据联系起来。 + +#### 类继承(class inheritance) + +新的类可以由已存在的类通过类继承(class inheritance)来定义。 + +当子类(sub class)继承父类(parent class)时,子类包含了父类定义的所有数据和操作。 + +子类的实例对象包含所有子类和父类定义的数据,且它们能完成子类和父类定义的所有操作。 + +#### 抽象类(abstract class) + +抽象类(abstract class)的主要目的是为它的子类定义公共接口。 + +一个抽象类将把它的部分或全部操作的实现延迟到子类中,因此,一个抽象类不能被实例化。 + +在抽象类中定义却没有实现的操作被称为抽象操作(abstract operation)。 + +非抽象类称为具体类(concrete class)。 + +#### 重定义(override) + +子类能够改进和重新定义它们父类的操作。 + +更具体地说,类能够重定义(override)父类定义的操作,重定义使得子类能接管父类对请求的处理操作。 + +类继承允许你只需简单的扩展其他类就可以定义新类,从而可以很容易地定义具有相近功能的对象族。 + +#### 类继承与接口继承的比较 + +一个对象的类定义了对象是怎样实现的,同时也定义了对象的内部状态和操作的实现。 + +但是对象的类型只与它的接口有关,接口即对象能响应的请求的集合。 + +一个对象可以有多个类型,不同类的对象可以有相同的类型。 + +##### 类继承与接口继承的区别 + +- **类继承** 根据一个对象的实现定义了另一个对象的实现。简而言之,它是代码和表示的共享机制。 +- **接口继承** (或子类型化)描述了一个对象什么时候能被用来替代另一个对象。 + +##### 对接口编程,而不是对实现编程 + +只根据抽象类中定义的接口来操纵对象有以下两个好处: + +1. 客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。 +2. 客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。 + +不将变量声明为某个特定的具体类的实例对象,而是让它遵从抽象类所定义的接口。 + +### 五、运用复用机制 + +#### 1. 继承和组合的比较 + +面向对象系统中功能复用的两种最常用技术是类继承和对象组合: + +- 类继承允许你根据其他类的实现来定义一个类的实现。这种通过生成子 + 类的复用通常被称为白箱复用(white-box reuse)。术语“白箱”是相对可视性而言:在继承方 + 式中,父类的内部细节对子类可见。 +- 对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用 + (black-box reuse),因为对象的内部细节是不可见的。 + +#### 2. 委托 + +委托(delegation)是一种组合方法,它使组合具有与继承同样的复用能力。 + +在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者 +(delegate)。 + +这类似于子类将请求交给它的父类处理。 + +委托的主要优点在于它便于运行时刻组合对象操作以及改变这些操作的组合方式。 + +#### 3. 继承和参数化类型的比较 + +另一种功能复用技术(并非严格的面向对象技术)是参数化类型(parameterized type)。 + +它允许你在定义一个类型时并不指定该类型所用到的其他所有类型。未经指定的类型在使用时以参数形式提供。 + +#### 4. 比较 + +- 对象组合技术允许你在运行时刻改变被组合的行为, + 但是它存在间接性,比较低效。 +- 继承允许你提供操作的缺省实现,并通过子类重定义这些操 + 作。 +- 参数化类型允许你改变类所用到的类型。但是继承和参数化类型都不能在运行时刻改变。 + +哪一种方法最佳,取决于你设计和实现的约束条件。 + +### 六、关联运行时刻和编译时刻的结构 + +一个面向对象程序运行时刻的结构通常与它的代码结构相差较大: + +- 代码结构在编译时刻 + 就被确定下来了,它由继承关系固定的类组成。 +- 程序的运行时刻结构是由快速变化的通信 + 对象网络组成。 + +### 七、设计应支持变化 + +获得最大限度复用的关键在于对新需求和已有需求发生变化时的预见性,要求你的系统设计要能够相应地改进。 + +为了设计适应这种变化、且具有健壮性的系统,你必须考虑系统在它的生命周期内会发生怎样的变化。 + +设计模式可以确保系统能以特定方式变化,从而帮助你避免重新设计系统。 + +每一个设计模式允许系统结构的某个方面的变化独立于其他方面,这样产生的系统对于某一种特殊变化将更健壮。 + +#### 导致重新设计的一般原因 + +下面阐述了一些导致重新设计的一般原因,以及解决这些问题的设计模式: + +1. 通过显式地指定一个类来创建对象在创建对象时指定类名将使你受特定实现的约束而不是特定接口的约束。这会使未来的变化更复杂。要避免这种情况,应该间接地创建对象。 +设计模式:AbstractFactory(3.1),FactoryMethod(3.3),Prototype(3.4)。 +2. 对特殊操作的依赖当你为请求指定一个特殊的操作时,完成该请求的方式就固定下来了。为避免把请求代码写死,你将可以在编译时刻或运行时刻很方便地改变响应请求的方法。 +设计模式:ChainofResposibility(5.1),Command(5.2)。 +3. 对硬件和软件平台的依赖外部的操作系统接口和应用编程接口(API)在不同的软硬件平台上是不同的。依赖于特定平台的软件将很难移植到其他平台上,甚至都很难跟上本地平台的更新。所以设计系统时限制其平台相关性就很重要了。 +设计模式:AbstractFactory(3.1),Bridge(4.2)。 +4. 对对象表示或实现的依赖知道对象怎样表示、保存、定位或实现的客户在对象发生变化时可能也需要变化。对客户隐藏这些信息能阻止连锁变化。 +设计模式:AbstractFactory(3.1),Bridge(4.2),Memento(5.6),Proxy(4.7) +5. 算法依赖算法在开发和复用时常常被扩展、优化和替代。依赖于某个特定算法的对象在算法发生变化时不得不变化。因此有可能发生变化的算法应该被孤立起来。 +设计模式:Builder(3.2),Iterator(5.4),Strategy(5.9),TemplateMethod(5.10),Visitor(5.11) +6. 紧耦合紧耦合的类很难独立地被复用,因为它们是互相依赖的。紧耦合产生单块的系统,要改变或删掉一个类,你必须理解和改变其他许多类。这样的系统是一个很难学习、移植和维护的密集体。松散耦合提高了一个类本身被复用的可能性,并且系统更易于学习、移植、修改和扩展。设计模式使用抽象耦合和分层技术来提高系统的松散耦合性。 +设计模式:AbstractFactory(3.1),Command(5.2),Facade(4.5),Mediator(5.5),Observer(5.7),ChainofResponsibility(5.1)。 +7. 通过生成子类来扩充功能通常很难通过定义子类来定制对象。每一个新类都有固定的实现开销(初始化、终止处理等)。定义子类还需要对父类有深入的了解。如,重定义一个操作可能需要重定义其他操作。一个被重定义的操作可能需要调用继承下来的操作。并且子类方法会导致类爆炸,因为即使对于一个简单的扩充,你也不得不引入许多新的子类。一般的对象组合技术和具体的委托技术,是继承之外组合对象行为的另一种灵活方法。新的功能可以通过以新的方式组合已有对象,而不是通过定义已存在类的子类的方式加到应用中去。另一方面,过多使用对象组合会使设计难于理解。许多设计模式产生的设计中,你可以定义一个子类,且将它的实例和已存在实例进行组合来引入定制的功能。 +设计模式:Bridge(4.2),ChainofResponsibility(5.1),Composite(4.3),Decorator(4.4),Observer(5.7),Strategy(5.9)。 +8. 不能方便地对类进行修改有时你不得不改变一个难以修改的类。也许你需要源代码而又没有(对于商业类库就有这种情况),或者可能对类的任何改变会要求修改许多已存在的其他子类。设计模式提供在这些情况下对类进行修改的方法。 +设计模式:Adapter(4.1),Decorator(4.4),Visitor(5.11)。 + +#### 设计模式在开发中所起的作用 + +##### 应用程序 + +应用程序 (Application Program) 的内部复用性、可维护性和可扩充性是要优先考虑的: + +- 内部复用性确保你不会做多余的 + 设计和实现。设计模式通过减少依赖性来提高内部复用性。松散耦合也增强了一类对象与其 + 他多个对象协作的可能性。 +- 当设计模式被用来对系统分层和限制对平台的依赖性时,它们还会使一个应用更具可维 + 护性。 +- 通过显示怎样扩展类层次结构和怎样使用对象复用,它们可增强系统的易扩充性。同时,耦合程度的降低也会增强可扩充性。如果一个类不过多地依赖其他类,扩充这个孤立的类还是很容易的。 + +##### 工具箱 + +工具箱( Toolkit )的设计比应用设计要难得多,因为它要求对许多应用是可用的和有效的。 + +再者, +工具箱的设计者并不知道什么应用使用该工具箱及它们有什么特殊需求。 + +这样,避免假设和 +依赖就变得很重要,否则会限制工具箱的灵活性,进而影响它的适用性和效率。 + +##### 框架 + +框架(Framework)是构成一类特定软件可复用设计的一组相互协作的类。 + +框架规定了你的应用的体系结构。它定义了整体结构,类和对象的分割,各部分的主要 +责任,类和对象怎么协作,以及控制流程。框架预定义了这些设计参数,以便于应用设计者 +或实现者能集中精力于应用本身的特定细节。框架记录了其应用领域的共同的设计决策。因而框架更强调设计复用,尽管框架常包括具体的立即可用的子类。 + +#### 模式和框架的不同 + +- **设计模式比框架更抽象** 框架能够用代码表示,而设计模式只有其实例才能表示为代 + 码。框架的威力在于它们能够使用程序设计语言写出来,它们不仅能被学习,也能被直接执 + 行和复用。 +- **设计模式是比框架更小的体系结构元素** 一个典型的框架包括了多个设计模式,而反 + 之决非如此。 +- **框架比设计模式更加特例化** 框架总是针对一个特定的应用领域。一个图形编辑器框 + 架可能被用于一个工厂模拟,但它不会被错认为是一个模拟框架。 + + + diff --git "a/src/main/java/com/shenyy/introduction/1.7\346\200\216\346\240\267\351\200\211\346\213\251\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/src/main/java/com/shenyy/introduction/1.7\346\200\216\346\240\267\351\200\211\346\213\251\350\256\276\350\256\241\346\250\241\345\274\217.md" new file mode 100644 index 0000000..3dbd361 --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.7\346\200\216\346\240\267\351\200\211\346\213\251\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -0,0 +1,27 @@ +## 怎样选择设计模式 + +### 选择设计模式的方法 + +- **考虑设计模式是怎样解决设计问题的** [1.6设计模式解决设计问题的方式](1.6设计模式解决设计问题的方式.md) 讨论了设计模式怎样帮助你找到合适的对象、决定对象的粒度、指定对象接口以及设计模式解决设计问题的几个其他方法。参考这些讨论会有助于你找到合适的模式。 +- **浏览模式的意图部分** [1.4设计模式的分类](1.4设计模式的分类.md) 列出了目录中所有模式的意图(intent)部分。通读每个模式的 + 意图,找出和你的问题相关的一个或多个模式。 +- **研究模式怎样互相关联** 研究设计模式之间的关系 + 能指导你获得合适的模式或模式组。 +- **研究目的相似的模式** 模式分类描述部分共有三章,一章介绍创建型模式,一章介绍结 + 构型模式,一章介绍行为型模式。每一章都以对模式介绍性的评价开始,以一个小节的 + 比较和对照结束。这些小节使你得以洞察具有相似目的的模式之间的共同点和不同点。 +- **检查重新设计的原因** 看一看从“设计应支持变化”小节开始讨论的引起重新设计的各 + 种原因,再看看你的问题是否与它们有关,然后再找出哪些模式可以帮助你避免这些会 + 导致重新设计的因素。 +- **考虑你的设计中哪些是可变的** 这个方法与关注引起重新设计的原因刚好相反。它不是 + 考虑什么会迫使你的设计改变,而是考虑你想要什么变化却又不会引起重新设计。最主 + 要的一点是封装变化的概念,这是许多设计模式的主题。 + +### 设计模式之间的关系 + +![1563431139090](assets/1563431139090.png) + +### 设计模式所支持的设计的可变方面 + +![1563880582136](assets/1563880582136.png) + diff --git "a/src/main/java/com/shenyy/introduction/1.8\346\200\216\346\240\267\344\275\277\347\224\250\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/src/main/java/com/shenyy/introduction/1.8\346\200\216\346\240\267\344\275\277\347\224\250\350\256\276\350\256\241\346\250\241\345\274\217.md" new file mode 100644 index 0000000..136df44 --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.8\346\200\216\346\240\267\344\275\277\347\224\250\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -0,0 +1,31 @@ +## 怎样使用设计模式 + +### 应用设计模式的方法 + +应用设计模式的循序渐进的方法: + +1. **大致浏览一遍模式** 特别注意其适用性部分和效果部分,确定它适合你的问题。 +2. **回头研究结构部分、参与者部分和协作部分** 确保你理解这个模式的类和对象以及它 + 们是怎样关联的。 +3. **看代码示例部分,看看这个模式代码形式的具体例子** 研究代码将有助于你实现模式。 +4. **选择模式参与者的名字,使它们在应用上下文中有意义** 设计模式参与者的名字通常过于抽象而不会直接出现在应用中。然而,将参与者的名字和应用中出现的名字合并起来是 + 很有用的。这会帮助你在实现中更显式的体现出模式来。例如,如果你在文本组合算法中使 + 用了Strategy模式,那么你可能有名为SimpleLayoutStrategy或TeXLayoutStrategy这样的类。 +5. **定义类** 声明它们的接口,建立它们的继承关系,定义代表数据和对象引用的实例变 + 量。识别模式会影响到的你的应用中存在的类,做出相应的修改。 +6. **定义模式中专用于应用的操作名称** 这里再一次体现出,名字一般依赖于应用。使用 + 与每一个操作相关联的责任和协作作为指导。还有,你的名字约定要一致。例如,可以使用 + “Create-”前缀统一标记Factory方法。 +7. **实现执行模式中责任和协作的操作** 实现部分提供线索指导你进行实现。代码示例部 + 分的例子也能提供帮助。 + +### 设计模式的使用限制 + +设计模式不能够随意使用。 + +通常你通过引入额外的间接层次获得灵活性和可变性的同 +时,你也使设计变得更复杂并 /或牺牲了一定的性能。 + +一个设计模式只有当它提供的灵活性是 +真正需要的时候,才有必要使用。 + diff --git "a/src/main/java/com/shenyy/introduction/1.9\347\233\270\345\205\263\350\257\215\346\261\207\350\241\250.md" "b/src/main/java/com/shenyy/introduction/1.9\347\233\270\345\205\263\350\257\215\346\261\207\350\241\250.md" new file mode 100644 index 0000000..d30ef91 --- /dev/null +++ "b/src/main/java/com/shenyy/introduction/1.9\347\233\270\345\205\263\350\257\215\346\261\207\350\241\250.md" @@ -0,0 +1,142 @@ +## 相关词汇表 + +- **抽象类(abstract class)** +一种主要用来定义接口的类。抽象类中的部分或全部操作被延迟到其子类中实现。抽象类不能实例化。 + +- **抽象耦合(abstract coupling)** +若类A维护一个指向抽象类B的引用,则称类A抽象耦合于B。我们之所以称之为抽象耦合乃是因为A指向的是一个对象的类型,而不是一个具体对象。 + +- **抽象操作(abstract operation)** +一种声明了型构(signature)而没有实现的操作。在C++中,抽象操作对应于纯虚成员函数。 + +- **相识关系(acquaintance relationship)** +如果一个类指向另一个类,则这两个类之间有相识关系。 + +- **聚合对象(aggregate object)** +一种包含子对象的对象。这些子对象称为聚合对象的部分,而聚合对象对它们负责。 + +- **聚合关系(aggregation relationship)** +聚合对象与其部分之间的关系。类为其对象(例如,聚合对象)定义这种关系。 + +- **黑箱复用(black-boxreuse)** +一种基于对象组合的复用方式。这些被组合的对象之间并不开放各自的内部细节,因此被比作“黑箱”。 + +- **类(class)** +类定义对象的接口和实现。它规定对象的内部表示,定义对象可实施的操作。 + +- **类图(class diagram)** +类图描述类及其内部结构和操作,以及类间的静态关系。 + +- **类操作(class operation)** +以类而不是单独的对象为目标的操作。在C++中,类操作称为静态成员函数。 + +- **具体类(concrete class)** +不含抽象操作的类。它可以实例化。 + +- **构造器(constructor)** +在C++中,一种系统自动调用的用来初始化新对象实例的操作。 + +- **耦合(coupling)** +软件构件之间相互依赖的程度。 + +- **委托(delegation)** +一种实现机制,即一个对象把发给它的请求转发/委托给另一个对象。而受托对象将代表原对象执行请求的操作。 + +- **设计模式(design pattern)** +设计模式针对面相对象系统中重复出现的设计问题,提出一个通用的设计方案,并予以系统化的命名和动机解释。它描述了问题、解决方案、在什么条件下使用该解决方案及其效果。它还给出了实现要点和实例。该解决方案是解决该问题的一组精心安排的通用的类和对象,再经定制和实现就可用来解决特定上下文中的问题。 + +- **析构器(destructor)** +在C++中,一种系统自动调用的用来清理(finalize)即将被删除的对象的操作。 + +- **动态绑定(dynamic binding)** +在运行时刻才将一个请求与一个对象及其一个操作关联起来。在C++中,只有虚函数可动态绑定。 + +- **封装(encapsulation)** +其结果是将对象的表示和实现隐藏起来。在对象之外,看不到其内部表示,也不能直接对其进行访问。操作(operation)是访问和修改对象表示的唯一途径。 + +- **框架(framework)** +一组相互协作的类,形成某类软件的一个可复用设计。框架将设计划分为一组抽象类,并定义它们各自的责任及相互之间的合作,以此来指导体系结构级的设计。开发者通过继承框架中的类和组合其实例来定制该框架以生成特定的应用。 + +- **友类(friend class)** +在C++中,A为B的友类是指A对B中的操作和数据有与B本身一样的访问权限。 + +- **继承(inheritance)** +两个实体间的一种关系,其中一实体乃是基于另一实体而定义的。类继承以一个或多个父类为基础定义一个新类,这个新类继承了其父类的接口和实现,被称为子类或派生类。类继承包含了接口继承和实现继承。接口继承以一个或多个已有接口为基础定义新的接口;实现继承以一个或多个已有实现为基础定义新的实现。 + +- **实例变量(instance variable)** +定义部分对象表示的数据。C++中使用的术语是数据成员。 + +- **交互图(interaction diagram)** +展示对象间请求流程的一种示意图。 + +- **接口(interface)** +一个对象所有操作定义的型构的集合。接口刻划了一个对象可响应的请求的集合。 + +- **元类(metaclass)** +在Smalltalk中,类也是对象。元类是类对象的类。 + +- **混入类(mixin class)** +一种被设计为通过继承与其他类结合的类。混入类通常是抽象类。 + +- **对象(object)** +一个封装了数据及作用于这些数据的操作的运行实体。 + +- **对象组合(object composition)** +组装和组合一组对象以获得更复杂的行为。 + +- **对象图(object diagram)** +描述运行时刻特定对象结构的示意图。 + +- **对象引用(object reference)** +用于标识另一对象的一个值。 + +- **操作(operation)** +对象的数据仅能由其自身的操作来存取。对象受到请求时执行操作。在C++中,操作称为成员函数,而Smalltalk使用术语“方法”。 + +- **重定义(overriding)** +在一个子类中重定义(从父类继承下来的)操作。 + +- **参数化类型(parameterized type)** +一种含有未确定成分类型的类型。在使用时,将未确定类型处理成参数。在C++中,参数化类型称为模板(template)。 + +- **父类(parent class)** +被其他类继承的类。Smalltalk又称之为超类(super class),C++中又称之为基类(base class),有时又称为祖先类(ancestor class)。 + +- **多态(polymorphism)** +在运行时刻接口匹配的对象能互相替换的能力。 + +- **私有继承(private inheritance)** +在C++中,一种仅出于实现目的的继承。 + +- **协议(protocol)** +接口概念的扩展,包含指明可允许的请求序列。 + +- **接收者(receiver)** +一个请求的目标对象。 + +- **请求(request)** +一个对象当受到其他对象的请求时执行相应的操作。通常请求又称为消息。 + +- **型构(signature)** +一个操作的型构定义了它的名称、参数和返回值。 + +- **子类(subclass)** +继承了另一个类的类。在C++中,子类又称为派生类(derivedclass)。 + +- **子系统(subsystem)** +一组相互协作的类形成的一个相对独立的部分,完成一定的功能。 + +- **子类型(subtype)** +如果一个类型的接口包含另一类型的接口,则前一类型称为后一类型的子类型。 + +- **超类型(supertype)** +为其他类型继承的父类型。 + +- **工具箱(toolkit)** +一组提供实用功能的类,但它们并不包含任何具体应用的设计。 + +- **类型(type)** +一个特定接口的名称。 + +- **白箱复用(white-box reuse)** +一种基于类继承的复用。子类复用父类的接口和实现,但它也可能存取其父类的其他私有部分。 \ No newline at end of file diff --git a/src/main/java/com/shenyy/introduction/assets/1563363834415.png b/src/main/java/com/shenyy/introduction/assets/1563363834415.png new file mode 100644 index 0000000000000000000000000000000000000000..df0142fd8cb5b0f7704eca6afed10182fcd1675c GIT binary patch literal 68782 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 Fe*hCze)|9b literal 0 HcmV?d00001 diff --git a/src/main/java/com/shenyy/introduction/assets/1563430491628.png b/src/main/java/com/shenyy/introduction/assets/1563430491628.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4a025a2b311456af71d8e1e906cdf5ec026d52 GIT binary patch literal 60290 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

H1YKP~{Vb7q1SX=c}R^Wq!dJ*Xp1TkYN!L$#`2; zpz`l>2j`r` zU8cPs`HHyt@co6tOrV_GfN4^@kBqDWaw@_eiUkdqlxv98ph+P!;^ypCG3a0y^Coye ziWA>2l;9V(6h|!nk>5^TpXF*?nPU(;5Ro@BvUP!8Jv}S_zCuAvzsMLKl1Z&s2iAY= z0)RPW8$y{3G%q14mLjm4=ql%OR)R+tF`AqZax*XQ7+?j~zoCd}sE~e2$1XWQFcchQ z6FlxZuV{eDtYoZxCHo$j2@4572_jQ@we0{0IMqxs>Fu%I>_=iGO}*FqiDa8ixJ6ja z;rbXwh5;N=6)=wTWZUUpo+JOs?`Rbu8oEhLNFW1=k0Y3bqUf_nU^A|i%e`PG!I&fs z8nYP-h~3(AC;|l{q>hpKc9KA|Cys!99Hqe|ToK+uWVTM@%75LiT~D;jRC957(I7sb zLbEMOZQ`WXr?-5&XE_*1Ne1fuhIg9*{>h1g_CNws_s(N0!x% z&`X@qeEY`fpT)qPn~s-;SkboprgLZT>#Z7M!yP=MPXMj3?0-`@`abVPf$HeYD4bEJ ze$&%jjTe|iK;`#@Ql~GI9UqJ;42rl(B@&KQB#>+MsJuLD+7xpuHgQqdI)h=ERi<|k zOwc5PM16kG1S*j(1DzC<<%p9%x;WHg!&^J(BBF{|KiM)Msh5;+l$0OqAf})*nJQh0>TmLj9 z384u<&(bz{v^E^iTf;ss`EfNIEz?=gkCm@9nldHd`Bz)&0vh;p?l(y1d3mq5{Q6(< z{b)O(K6#QjyhDH~R$r^8ADTva;#d2;k8ojBUZ-_X_fJ5Ezv87zCCbN#>#9PPYrs*! z4BZP(7Oc)9c_#hwX6y(|@{vqlT2TB!nh&Abu6Il0*87z0U1<1(3NgCIvBM| z0C5cs{g!kFVlXIBJjubi0q8^d59LHoGW=FpgD)x(g zACSY5CnW_1$3zs(Ad#+5sfGg26Qh3b=5;$xqlqN1$enYp&EO-ze$)4(Mjb#YEC$5E z`L0&h)>`+Md4HIjR^1pCO)6riRC_r{8xCLXNIlk0$0S#887NzZrheG1gG1(#K#qox zZ8M!$KRwACwFR#w(l}iB`Fj9(>5oJlnATGLXT~{>)H;rr7c6}bgimmD`UUlwiW*65 z40+>nwgmCAeV^1D_z3c#hVnS{)kcb=h5QUi60Rw&Mxz{dXIq`H)zs8d-*9r~|NkKA)!lowU9Xy}3Jm<{smpa!R_|ExSzvHr%iNf}gIJk~=Tm+s3{>Us^rD|7p+hH~p* z(Z`m7ywxEAY3=I4MVCVw${CVHquPa%l7@Vr-brdqQHe8-IX1zu`b1)*II|sn>!9oS zOy{vH35QK%^2`&8+I05?Chhg1m)pvzu*t%FgyO&d=_5eRBg%}Q`OvRd3HBv_>O=AW zesaJ30{IiUttS{v|NC!FivJ&fi9$t1B_%agdUk4fc-Y6!FY@tY{Xi}0%fHiTPmt?L zlA@%ev-lFVKaI9OTp&>H(xu%|QBf{#ZZgfs@T&@nidyL!d)#J+N^jIl`^Cjw-lwep zf!vh8g^xiF|Di(+AxiRbk~i}mhZ%HrbqssvbeZ7%;RfatVHgsSAxElYVxQE1z!_e+pu@-7cN{NAAZQ<>u!Ab^$`&tk<1%|U$^hr@mGzvQjUDcrv6{Q z6z*=`_A)oOw4$P-xmQZu+S*#%Z}MCG!;J?1jXH0vTKrg(g=(1hwek66XdV(1d++u) zE3-_X4PR#U=0~&fR^zj6Ifne4oTbgi{>nU9^CY?4++0x&$?d6Sb#);%4~1eSX*hjc z%>HLZf`e&R=S$WeNd`OY7ZnXpN#W7>~+>x;`5%?d(7wr!!^ZPZsD;5gh^u`&Fd)S(A*_{|IY`hBCLD;EZp6crna z+?`Q2Cp0zbyFF$??7JINPY-`f+^|Q|(P(z4;n(0`w9aQPH~+Nen%6x(TND}> z_f!6P46l#NOVr%lSVvW52-|ynYoh0$*5^XAOCv4MvJHwJw>&$413!>k{`%xt*};;P zvz8qV$;v8fYG&9;_zNGt9j4nOS^hQdc+jOhuKVod`9{RXp7!uqF^zMd9nuQjeN4{4 zfL-t*)pOl1DJqd$>F5U26TJF{8j>lV$ap^fo@Zft^{QS(qHHej>8O|2e@fD9-mtdR zR-!s4IW;xK!^an;zbyB_V&{QNA4^Mbqbz^Cy%waA&MhbysFkc_zq;buZ|^+b$$9*E z>`p_E@NjNr26p!Am##H-b;Y~R{BC$>Yl!7NVQ$XH%*^~m%9UZumMu{S4K=P`KY;y@ z2aweEr@Fej_xZanF09bWyPJ(gSQhHNSIc5VP1XKt#rW`4%K1BR^7H%2t}bkFcVFHj z<52tgb5CDI(Cqlnpqo?Xo=f?vbpw40es^!<}U%w_FArE z$tx+5z5Kzkv~y+Z`gV49_WXhZ+1B@RI*tYg20B?fnVS12@7!4*5g8c}5_0&ucBYQn zlcV7wY!VI&lg3zlJSs)4&!0aVEll>V%r>3DSNj)2GVt*Hg%6JVu#h^>bf3%72K-mw2h7aPUm2HeK61U&Uo|z!w!64F z$1p+nxqid@8x}S;HWc6f{AHoJ$MD`IWk2K^M${xA)qx_|D8P(Xc^EvFYE0Y`i z=s3*LT2T06R~u90s)Bck-ShX~y1FuRh5~n}ou+nDi-`*Vy1bUt<}p>VlfycZ7Ax7m zjK2H0gg@Ep&EwEL$IohN8eOvb`RUW0t4(PQNs82NbEA|eW`5VXP87|PevUoB&CBb1 zuz2Cl-7R$3bvtQyA3fpVa0u&=(PFiE8*6!a0OK*c9tzAPOL0~_=lTFfehT!*J=mNs zA8d+3CgKHg4AOFLxtnZ9RSy`i<08AHv?j7QAkYYLum=%rZOuan5 z?c2BG2OE0&`|n0ZGIA@2ZXB0!yXoM-B_zhXBgyG^4w)R z>uPH;Dbmoj$=YwCW@ZU{BzaTtzlS%m>#2QzB@Nq=VC)O~$)1yE&z?Q%I?ZElZcb)k zPmhsCg3PuPezbd7j@s>gD0t3fWnn6qO(GOk>onS4immnX<;$lUagwODvEkyyLj-9k z1o(%A9c=s)^YEdfl9Ezx6}F(|GK z7_Y~j4K!zJSI&)3&Cc>1JsR`!rO4L=*?O$M%V3;y@Yoxh?-AEJ-iluPAs%($a!sao zdW`th2vN}^5)y->-}BTSi&N$w*SlUDBkD0(x}`QjHsRQf-}mF<)GaNCOnEEOo332< zctc+w==OJ{cXTv3E^ZH&o<~IFKCaW~+O-g0-%XNnp|~oO>(>p2mbKHH!V?l~rD)M6 z*X19#KYILlhl>r`US?+I&|kM7?`*?@f~e6_g$;{4S>zS}X$fQG^(C^X=u z6c7+l8Ng1_@%EZf<1*WxJ$1g+I|E-2jE}FjpWb|2QZlK*GEm1;KtSLrhFvF~Lh)c$ zi`DKud#L}ulA?X6>Wk0Em+|oOhR4N)6cik14XJebH#uq7Pv;vG!_vRd-S=a9em)(m zf~j=(jdfe&v-1Zx)3MtWs{FK`h|kYIs+)a5%f=mzx^TAfv`*$(-vgIFymTBs`{c>_Su^m}V4X>|i zU%Gr*MP2>U=fQ<P7_!1pLY2K1`4oh2F zJGyrMmgCKvsTTF|l~cCf=L(#zS+!;_UdVm_{(bnvhvzI`v2~7#uC6Xm9CMj8N*u!l zm)Fz;VgR%8NB)eBnac+R+Db*$H<;kfCnOYv{q^DIA0-nLlkoD+&dw(&FNWQ_YtgOq zz5YpFzkZ!gc$f3PrJLyH)YoRFr`M0qRc_w6v1el9jEl?B!LM;;rKP>M83z~`8LMk* zK9!Y~9W_5HBh$4IBaRu9tQ?l4`|Oy*udTSeu)puOa>jT5V`vNx4(9TXMFo^eF`} z*B08t0@tU16sfY!|7fy$!^Ffy;p`pL>F%ii1YOnC!a_Or$hD&`lY7yn)gB%4y>*Ks zOZT~|hldoI@MKuwJ}UXw0p7c3*Yh7a5{1SlO-8N)Ce*~JHX?UnP zGji&9y6Qv09ZoEpPMHWR_`bI7mT7EkY=3=~adC0+QnAObI1Od2<=eM!#jRUuI5;@0 z+FsNFcZok6RSH$f6v<5 zskO;6x&Y84_CG^I{@AgYAcf201p>^FeFT7$^XUWf@w6t4QnMz_9sqIY`%ND&Cq)fz-Nn){#%>s+2JOP z8rr(Yhs$bfgMmt3nN>5?*3~Vxm8|-L^xeLFd-rjtU`#9Qv!T}KY=^B|Jw_v}j~qF| ztN%~lfBI`#*#*bl-_k3K3nHUBV8MVfG#D)c6v~cF@@%HcEjjvt} z(0~4dzM8Z$7FjQ;ZLH!(OS8ja9$w&*x$}z8b%8*F^q*JO)YKehUd}nUYkFpe`ft3x zp587$>6JJ8fqY);@0X1Gy0FxBKft|zwP##2&|Q8H5KL=pYvsndE~n$ikN4-ITHfei zw#=yL4qLW09J<>WoXTUiL3wtpV?N*qL!aJjbbbTRzvq|_8q}7o{j=5f zn>kSxx~CuOTVW(Z&%~r)XE({cf1Htx?aT3r!n=3xZU73{f8z`z$HQ3`YOPQ-FG7>> z2)@6wJw2PrZasBxy3c-jGblr-9hntu6%7f0~Vd9a(N9@}S)+>B?=;9;swBE5HI{bhd26lK9$M zHQa$hcd_SidoH(a$-lRm^1@Bn)F89C|ztIWw)ERs_s{De#g&KC3 z_v#}5ap!R}d=P5=ER>cmm;P-ZoF_C+oVb-OIY)o!(4o&YHEyE;E`6&~($XP9%aoio z@1Q5_`jZ{K1q^(O=6i{^Y=QHHIZ$`!hnqp9C7G0O1%6o3vECfLMO0L@yrQDvrLnxW zAD0h(y|AJdyZcuqJ;LnkZ&B|&Fu6QYk_QrVz_3`&&Q8R%GMJNxM}eWB>etA~(#MuT zA9~-^l$86Ck!9#d`ve3|q@L}?&Q(h01TAUqmA)SqM%UHVb>`oPj(4{FGBT@~hVxfH zU<@mVv8SRE(r8l^NK@X0$ys@O!D~(Q(hwiO;{dpK?iu|W ztFa&DJJ}v)T|4qK<@)2D4!tyfX z_U)w^TFLA#Uz*4Y_wlX39 zzjA@JQ>F+gm%ZN!9=Zf=U0x(R?Zp$$THIdU$BZ4W>>D{0&6oW^VTo` zO_2{dIo(D+MCZZj^zVtA&}p7eK61mN=#NQORSaml8iG!S4=b*69uYs|5GrMO#be69VzrN3Nj`>C|p z3D%~+q6q|pc`R^5RK|TSJ0OYSN*#gOkzyS8G}2ASe!QXKka^Nu=9dS7XA65mOw4C& z4A*~u+ZM+QCRBf2Rm7EOr)ykkdvUq4!b~+NE-tQ_kvU8O7qiL-?G8$lRAb%miTKp2 zSZoJSa+zt>D@l%*3te*Cy$PvBA2+?@ub}sHzS{mX?+Qv#e`#9kztcjdi?>jEnnMJ|+zTml{*Mi=2?m_|Jmqrt~vA^|v(`iA?@!7iAH*qz4f48hU%gru`$-{VGWFl+@H^)ztwL#mg_+9}aeT&R+)c z3ViSlOUR51r@L7MYBmXBfHh|aJG%x%HzL|#E1O{a%uBxmp&{yi3`@t4AJZexavVTu z{ffQ7X=rI_iORLI;z2GbA;B=0vc$!0q%Eg@3x|i1hr<+B%-Gbl40kv+KQCeLn3T(}3Za!SlU`A`;4*9hTr!a%*46h*!K z_Upg)$GwO4SB0^4yn6eVPh5O9k)a=dyo+r=djL%;{lF)*F1?pV>+qB+y1NsAW1BwQ zv4fTeQ{I30Yoe1PBtp9pzoQB1vDA&s1UGtYiU8^Gic#hsrNTBWtO{@7)o(0FV7v=F)DnJ;3A?g>yfw>C^((5l#gj9g=fSkbrj=S69*N zokw+Z3@(ql0_Flf(4$oc?ht}SF#D%1?E23SQ*{#ElR(3=lOK|1p_T~?3%`8*y1cP5 z0_}Cyv8qq2TVT-V*@^kO825 za7#!;V;LY5qDiC7^WfG1dZIyMRq@l`zkj3a!iuTHZ~6xZi+d%&e<4d#yt-s<+UPOy z7{3SzzkTOUWzY!VPh1CV8&I+^aSsK5WfZH+Z(lz@=-w&?PGb~guMnQMwpi~SBVo%9 zLc3aZ1hlGRs=vy0I5m0!F3^S7mfJDYD_dIr-Y(k*kc;c8#C-w;ytVoM338wcnqDNI zdJ=l#Xm`n4@u0GTf|0TDNuafLLx5{w#Y2vgSkAhxBKIKagQB9_iwwfB@o-_jbKigb zFfleRRp#*2$%r1vq2-XNb)P7z$|+f`36ov@3?vbflXI|SZS^?Whvoj;*Ji^5(rw@% z;zOf^^|+*sJ`Dl+(p`RN0vr!jNk?$U|LDXUUYb_X9xy2MPZFqoe3<%f=`A2k zw>K;-F7E1hnU`1g;|J@lj~`Ev7Svx{;=Eoh_DBfstzYCV{u9PZ8H$MF<9$x~_769O zzC<6aG7=#-2Mjy>Juf{s1RNiHbzA=*_$%8vIO>IR3a2$EzSq`{a`=@~PMwcn39@*c zB;c_!RRwmm{du3`11vvNxJ-r=|%ilYV{g8{49vdBHIb^o=z<~omMJ(^O zY}!ObF!Z*gPNOVB=U)^~{3Xb{zrEMpQ8F&qVqwBjau4|=U|NaF;h`bR6%A01u$As& zjIC{KM?6w)C{*Z<$5*8S&$R?nV8Rn|&9(DEbhI)|3#&J*Axfqm!snuzGqmo)TtaU% z1=Q&v_akbuF=*#OK3Q1~xO1c(!#w!@{kzBFK=h?TmvAV4gqos#2FCg1np98~FO3Kh zSr!0|MdJGI(9lrgO(+I2?_hmF;mkM;A^D~I{B@{;3OYJWXzG>q^>m6_q$VV;cN&4M zm6w-`Ky`R5VQY{P0y`w+@nP%fF87IsVo&$gga!2K-ACSZE+sCN@|eg-(;(Cgrtq)N^UJ7v|ae zkMOosPt(e+{@*OXLqUj(n>wGDX17>nf^tHJjX_h&))NC?D~BNP^39u6l$DRKuk_NE z8E<$7lXG)?kO1Lo5^=R)zn18Og7O7yN#Tocvzw{oyKl_=R!2+L|8;sFgnn!})9cqY z;4zB^>^n^~e<;A2y3ZfO=M`>fXdn-NFy1{B)G6;;$C1_?!!rXl53B3z2LX+mpPdhb zh4Qaoom*Hq_+6LVm!pr$pk~f@dnaJi!#~%NA$_!G@c9qiagK!BPhUY;<&7Z(Q;IF4?f0Ie3j@bVTk@5T%*?of8=8Yn+3B1RN! zM{Iij&39Yic8C~-E>m5X61;WmRwHQl#2kZ!EOv9G* z6F_#rfBj2;|2#Qre+QZumZJ*S0W*LBPD^FA1H~H3@|)G03?0Fd=1h4fr#Vl?euzZT z@Vr19Hs6Yl-ib>8jm6s1^EsTGeC69~9So3~9zEK1*sA$sS=n8v?2v#_dsQ_xBe~u0 zbf59U?1xO|aO1{6f!a#4Lo|zFfl~;`ob2S(P5aTYu}qj{`}Xa-grDN$qB`^zfgHqS zvfQE;mzG$oiXX+s&NQArIE8=Ua1Q@?BLpNs6m*>&gP%uN^N+6moA4&uF@$_`fHwtY z|IFq zXsYns?3_RK73IU{u=VI{&(!9JRIU`nygx<6YZp3F84TxRK*MPDP_n|%%#AH9EJnU5 z>~aP`#axH{iIv>~xw(H1ZN?7bKMJ6d$diCRDCC1q)3zwNe7C=XaPt(irqF7bMm7=w z0EXhaj~K>)W=+r^OigG++~;hZCc4zYp^0Px3B1x1(i`O3)d0Q?g98Khu#&(o1Em%j zla3A?5WQER(g;|}F}xe105T+S5IOhn-^Rg_z`yiRKPpbjbvl4u{oxMpJr|eTM6DV5 zHOv6(2+<(kWSTmg%*v$vJ=#6`DLZdsJo((a$I5@V9emWT=LF!eA^-@QY9DlfVp|%B zL4Cx850U7i7^fZ3duy``>$2e~9x!q(A`ZVk%h{LAcez)#RXksrO;}s;!=4Q)^P@}F zeTJ2&0vo=CN}2)s`c~+A1MOA1GK|Ak%67c-J-H;*ci+f}{wT`;+7JDX9q3H%HWn6s z02|~YuuRy~k&%(|uxb{7T&dMxY)>2P?JdPaTEsxEyR(TJ_M!P?Pig(^eF3c{D4Qy{ zXgfQ*rx39!#~|l&?cX1QX-jNb{dd>v&dB~N$LFrIb95~K`Zbi~1YTd2M}6ex<@KXg zLz@%czdzHUND>VMl1DUDche5|mNFO|PsO8VEPv(X2Vx|Hf$R>VAT_V?oCMJSwb3v$ zItyK!ntLDkKYhAaQH$wH?Be;zY zaEAKrv8}a%vz@#1XJ%#|qW|nHn1D=wPG+HJ11@9$m2l{~tmDxAS00NFrpp+3S@_yl z2!jv_5!a=vsv39}PSzEO)fJUpFzv|oqghqX@7%E?6-&#zZ=VVjGfl9LhYy9$cS$%I zOJdH~eDbB_W{N>w+v56Epigp1q13Z;mbn_Hgz6+DiI z@K}UytrviZCdwWi8L2(=0RTlsL*sy>`rXo}@Qwtqw*qyad44)G^rF4}LMke%#v;K} zmuoCwI_J_HOHkl|fvqyoG$@z2O*{SF(i8gntQ4qRE}#Q2&hQ5h6ri0!vVN)($tQlb zaby0)Dlrj}mzo98(=5dwo8*uv4X|4^x*&Wvli|kH70ekIcXzh)uWq13J382GZ6}s1 z+1c3KyQk^_4N}nUXxOD<2KH!f#D&AA>?(q4BCnqB-d(h=F2_f^L=$gNRUO-;O^bHaRaMi zon1S%^d|>l5FX-sG-ooR`1pZp@LvSxAXQ-BU9T1s1=|R!HW3ENlm$(k`f{-38{$=Z zD<@)ViT8|=i=hc-8zZ@!ll_sZ)~d1I3yc3~_(FeJD#hvsWQ-!9D4j(D&EkV#h2gN{ z2QI}<31n1Yma>nmltfQe*VU!s=?1fi-hl)t+|-}(a|9QibSqO@6;Bn zHG3&{j1YwP_Pwe(hbq+4(t3TZV=mlu4~*14sW5K=!g0m%puE;X^i|Ir*vZr z%|V6`^H{JW5De-!kvV~lpF)Q_n~Q`f`)x=5t@a#Yu}sv)RItK~p`$nseY=f5Y~Vh2 zm|6J32^dX}E*YKjPghB9=ya}-=3G^E3tp?oG|6`w)6ZQdXw)p?<3A8_Bs;L*_wLM4G9WbcH$V!6U2U{1*Oh%fF2aaen$*Wj*FHHG2_t4|AllHOubdJz zl@$N@@pY&Drw>3DY;JDeqH<J&))SD#X+x&&cd^N&xGvmtB*BLb+V!gczaTD>F)P zrNN+s#UCMy053*Be;2+7Q?Xf?bq zG$0@mD;ee(N}uF`y$P3dy`iDu`VAY1x+%N1B8EX^0z^kd7Nmk6NvdhBUtQ>@gTz?p zFq5K%@B`2bNfg!AZhQ*i67e9}>3`ezBCr5h*LA@nr!d>;Xi#t z-@8n4VV;T?J2^P?`R+7$ijW0KCO~wI3=hAZB!Glfm-m`yJj|xEOX9GA1Of3dc~2P` z?ZtANLOsmB_%0OPgU|&+gH`S)*kc7@`o>5GFQ3iS5x4wy3);;(XMP$4XZPHKcVld8 zYxrw7pfq?A)lCKIQM<~%*H$fo;3HBm&C==TPnlc_#teF4P(;8OZ^h+73MjO@+u{7mxT%VWPm8*6xeQ3B!0PXLYIb4|A(J3-2uL?9uI_YV(W z9kHvBr=p}ZUR(WFabTZeYda*CiD-OwrK%Lv-HeuzbmqG>+Dvrv4E-kAmkXjmS2wV% z#az2~jS?6~P>|{t@^lgL@zzhf=@y zX~0zTETtF=4Is&^TakTdlv47(*?d7{MIStPz%}^e$B#w?1()Cc`)-l2PP54ECQ$%U znY*N1UfN@!mjBmN@m}*Hj?L(sufYA{l~&ldPk~=KNorDonO~mYVc)R%ldcu94%8K@U zdv3(A5yFE`O>s(H{R)hQO4D)Yyw6|02puwC$U#rMRq*BC($W$$!hs`-NN2jcyCc+O z{~yq$wYL5v$0#i6G`ets@{l9Gc}R z6_s$-mva78C-K~ouSGOSUO{0a6xWYGjj87&ez?O`gPNqDXmAOt4dP3#-EX@QL!{{I z>$_0sA_^AP>%F$jVJERT4(SpC5V{+9dKs4I(V;6;V1I|8?Fzh->*z-&k2s|P9q@%Y zAQc;9B?%Emnuvj({v%u+*VV;ALPci=>k+b#fc#&TMT;W`_3L+;UJAx%MF6D7V>k8p z+hG)8L;C7ILqoh*SSUq;b%2N=yjOb0MS}aXv^sCt>e_${CU{I!0=)q2QP49pS7Lhs zLvYK;!~@(0;vcH~j;2c>AN-FWxrc>>sE6|yKG=Qyc!8h(Z$1B4835pDbrKXd?JsYG z6OnF*`ScMYXdUbWW!wXJ>vkk`Q_=kRLUGh6D+vT+h*eBM9ms ze!VjW?Kb?;BNa@W_V+jVx6rYtpi~gh2?mL61cM?40uO-91r&YR_wSEDa(lo48f8KlI(m`}fHnLpyaJ zwf}@InT9KE{G+W3Om;Utogdf$!CMDyLmeF{e1S2T7EVBH$6A5(9=-9K2K*xx;1*-F z39(irurl$jn6PQIdPs@+<8ITTgrMa#UAWrEZfk3cI#B^co}8Uc0pBFog+2vUN)b1d z2~!2FZm)pARunH-swz^=5TGidW9`#U!_`khDgc4TG<}6c6U@!2zkd(YhT+r75t#u< z`j&5RiaZp_5kO6?0Di_v1}w$`63U>Y5~0e>SAw2B69O2-m}vw8H2LF5HI)tfHW@gM z^mPPFKYjWHnXMPrOSb--K!9u<%}^(*3!?MbdE{@V(Ov{t2~yo>p&bgFuL1(V%Ew-s z9hYJ4KwjrMcI**M+|_<7uf7JNVZv`?l$Di*;e45^|C6tPHLP*6fEX)eIN>{bhKE(~ z;a8EE0`5t~)H>8~e(RK4_<<@a0ffcyREMjDc_ASsV&y>ZB0*+#7)-SeVCjNT@Kc>P z>civXzXG#W!=E~ObA%}|F%dHM40I`?(U3Sba;Yh5DfCITk)>ffkR#m#ppJtdog~SH zx)z07hj0@CPN%D@KDLCqkwi(mWk0J}Vn__1&kuy$&D zUeG7q5quY5|KAxGfjk(UUr}9Zdz9WwKwAO3_yT3_jG0*qt~W{T<*QdFA8)NAOam$e#v42)h;3}8p-GYV`_CMO2=OH_LeBrJ);RM*J3L;<%LjAI&!(Q;4#6CGJ@~Ev zRqfzle_x-8)Ne3~(e~U8$B!SESsu+}ct76MGdQS>C!gwgaUWu8>0r;up-yA2lM?~j zemn|~qNAg$AblV8UX|iM6aNe75>^#tNXw?QZA95e$ya>&@})VEinAsh`e=G;>cb(; zjSp27p|&&(J7PBWp#>Y{ps!cD)WS*q3gaGg*9^!Ovg3o#Zxk1Eai)U+8W?#OfSy4p zC9uJy7-2Rd199oSgYWZ;?;KVZ>`4#~=^JcmawH3n?aXSL4?S;ECvRn%<}=;>P>di| znSu!ivrGSI<_tK*2PYdk^(4{X(3r5qG+;nhBQJei(nw%1K3)UyZb+OakfzZM0QyuQ zG!nlGgy+!B7#v-Tp=orJgEPLDn|lKV=!J_*egHSam2m7`Zl&O-IFYde+Uha)-2!*} zSW=iXejjqO*!yfqfIw|J4VwjY5y7Hd9L@RQI4p-J)Bg4v8-jPuy;Pj>CnH#76C?T0 zuzsOLH0H+iFBL{*o*F^0GI%7xAWuTN*+u|%;4(4f<5dV-UtA<6I67o0@~$L%iUS+J zQB7Q+)gW8D@0L#L@QG1#)@)G;PSC^*O+5G$iXQBHqfZEBv_hZ<(hSCO!r|GEau0+gB*!Mi`*ETyR4F-}M{n!Yi4io~S#9kt zQ`t2*8v!XAfPv+m9{wWSB0W8g&S;!d126(VczN@WE=2RIfa-~qadQ4u+BpW&pt>iZ ziGj}ZVl1GB^RP(Z0T}M*5adL5QB}2=k~8pr`2r<5?8M=fvIv=l$E3_z0#ERh-#Ie>!ybNCPn zWE$=Hty)T_Ojb6MR3=fL$*PTEU^`B9?ExrZROE}_1OkKv_y*XOFz4Po3{c_Eo3r(r zniDCtu0!)|%sMBuG&e@(C?t?4k~agv32qEG^1>qoaX`O_k<{T-*rj>ke6hPe`g<_r z#Ht`%Bn$~ngk%{Nc;k5?EpY+qm4e&BxI-eg4o5&-pkAr(c}zbLh|h-9kxFt6-}C&i zZAn0cgjYy!Le2{Tl|wWd4=7O*UZYc!aIz5eH?p?AXz8w@L5sOZCJba{JLF~1pH;a! z`E?N@fxQzP8ylM`A1+yWhD%($xxJqRxNwl;(P3+5JdY&kAb7%M&76T23V?{jKEQ6F zC|nwOR=B$K2kKWvc{rt(Olo@i4QRi_r@?T*sX;*q_avKLdUwldX)|M_f!};W9;Wp@ z@Vsbf@|qC5ywuatK$v9}6~3^?@5jboWayO<#jwPIhLgZLYI_2CDtQOuoV$$i3`oO7 z;Xjt#Jw;Q4lVqT9EAW8$I5}^F{)i#;@WE-!YUG=0Iifa1fX1;z^7xTn@P(Mi$jE3q z@{L^&Q;^4AkRO`6Jk&_!Cay>Pay}yN-}Y)1fM46 zI!@AMC*HBf8y zn40hH`!|yu0AjU#0Ae6V#J0GzJ@zXe$s+VD^*#3li~*z$O`UtN3(6=_>@Wi`A*qxZ z`WZ|RkuEjr!5J@s!0B4qF8VZ_midYdg#t`25*IrL(-wmkyE@_^Ab}=AZk(Od@q}R)=OS8z1Bd~JO|`W&H*U;SEhQjBjsK0PCX}Jn zv%A(xpf8CY^J-n=M}`l{77q8miz*m*@O^7jM0Io`Sfc5{(m@?R*VSFY83kl5V+XZ z1MDfO00Dr1NqiRxbZtNGnny5F>_*!~2~9>opd5|?B^8wkP$_1oqF1oABEtHJ5^mK} z#TA*AMpLO_;mxeAzgXuKDFLp6s6339(h`JxS&AZcf%rK!H)oEK16?y7^OzAvsX>m! zP5%J{Ik`KT@;I5UMP)X9nG(=48Ri*0xp+5eZ^FV_)D#brQ2oAsl@|gD28JvQmf%455XkCDm{jEkUFraAn(oP*T0u zRtY5_jTp;BbQDaS;kKLvp3k_EuVAqc=er!QrU?DtEPy-RbKQ$(3CYRaWIte5c;r6Z zkJ7HhiP0}$cP==b^9Z6G!WF)u$B znqwt_G3fEXU|0#xosXmEt;XpY=ro7md62W6_h@#>VJ?!87m^aj$Z+Ct(Ziv`^9W}` z(j-8Gq^68SNWp=UpUW!S_V)Tu;!+_GuaJ3J-rt=`(KY25H$b{;pP~^6C*T#=!GmFd zdsTuQ<{~VRJUx<*`dmdI2Zi9({SVu_ayo`2GtipJ(*P}AM~}2KMl6gu7SdnVmc0La zSA+7h#N-5X)Q3j*?J3+(Kb=+Bt~k0a5l<;TzL&Q%pi*ae;0*M>uID%M?u4HUxwh?}@ zi6JaB)B~NnKSh{BmL-~3WkOW6njhl&9UvQ@LIE}+L7O3q4pzh6C9<&5c<^ID z*|h4V%%G$sE`-;uT4nZ4F;MxMft8zKv>8gh&B_WK`tv6e2Y9FZDySh>%~Tx0OyvUM zW%ARSjxBC9D)8P0)uh``DYk-YuyQo`%r1_qmR+k`jNlUYj<=bg}t2}{T>O7 zRv4LQpm^aA-e!!gtuEtafr^Jm;ZPns1#q2Dg~@h`6d;^m2*jm;aQRf5wMr`K={>?x z<~~EiDumzt)6)2kp>DM=)#NBC2glwI2%!93pFk%qE&ZP#bI`yhLVcG&)`8u$TlDqy zk3#B?m+=e)weCevi#c|K4~)tVI0Z2*`Mvc1KM)Yuh*eqoEdz+BrK@`{FpvsvDd)a@ zlyZsi;CHm+_ypj{I%qZcoxAkw6E*$8LeX;ipnwuxie&WgkfCUjaBz}0#;g3fb34$* z2=dg?)lJIIrhz8Bd2-6h@WhD|&yPURV))573nd2zq22G=UAV#ZNY!DNtP}?Yhjm=_ z4jj;4gMn<6_Z^4Snw%37tk@xi!)KRMRi(nwH9L6JIIXwq-o1M+vqRfy_elDnTa+Oo zl4Dr%VqOZzfbT>^FcA7g3`-nJH!O5FLB0m~r4KVaN!=btgq}WoMosH?7k)6NRasS4 zde_B49Ei(!@j?lAfb+y5u%wdG(l(CLRD| zR=j!h@W%D)fZ_w8uNi-Tbp^S;EtB@Qop2?Z+S+#?KW0VA;omr~a;L(i<+04v)#BU} zdnuy7RDh;7KpfEjH`ZNZs1rhtTVHr-blWmo8;cD9+KY$+J(VwV3?GrKq>|f;103|M ztbt%hmBk9`%C!Nm1(PUpa+DkxlO)GU5aissbA7ZyR(?3B>ks@4&yP!uFOtM-fjc9> zj7X}@tIdB3zejnuG~;lii1(@o2@aUp*j)N!kJA_qh~~gU`ulyT9RAB^m_vVd7vadr zUJ&?ae`7F|_6ZB~0K8`3c-@aiosyL`lGhI3SrNpvWQi3TIs^JLA)N-r9w>GXl2n)d z6J2U_A5X&T@8Z5G((YU*d)DDaEBs>SwR^GYQZSx*01t?I?l{^WPLL22Gjr?rRSYyU z3~7bE^z4E}8oE!;N23-ap&^75XCg2# z(9N{%+qb=lf$$>LQRl_)YjsJOISB6$Xl+#Z19$#hUG3TQ2cX?2KAs(sQ4u&U@T|O? zXgD__g&>dcCcCUxFpft+O>8~hryS4?CCbRubOYK80jChsP*S&U-(H9JAW(puvaqt^ z?H|Qo=P+p6aV8G0TzH9)39^Z%fRK2Bjvw;zao30=1_|)xcbkli3<7auWIQFwd1A;U zbl8&>;ORaIUQ3h+$NQwDn8gh?w6*ya7t7$7QYbjm-RhN+oOyH!oOf$_bKv>bpbC%_ z#t~01d`l98HHw#L7T_`WfK=qqpWpehD#9jVe5>l|(`8LfGkG(>AI(c@OXAT6dV24_ zZt6fF3}dOs?&!C+wj8k|xO_`%>$_hD)-No4fARF`xBJmQxxSU>Kf;}mRt1oU;NB5( z>ImDP>(HTBt&yl@!;!dR)hbR05!#l&V}ch-rr1nX0pK#ltbPf*Hz zj)ubM$`xOvw*zF@BNFCDOyDVIo8$z*8!c>+ zhBc(U_sYnyQ#?&i_ruwfek@B2%ovP-so7!eOC?^H9Sh&TKSuf*PApS{&Uer1vyEUw zp&Q-8@l;HoFw#?@laaIK3=9lI=ED0wukmexhl%I%5i3gGVA5ISz7x{Tx0V)PsLWhk zTr$hwFTZ!#bmMnzDVi+7R=Z_9SV+(gAFg%z^5s9$D<#1pA);=xmWAGH>^?Y3$wbKC zUZ0OGEjwTgP$bm*L1}?@lWX(+m1MUB8XkdzC^&$)yGS8_#0hUy?oeYYH7q-#H;9ib zCO<}D0=aIJ)Ws~p>s0VIpxf9I7ld0&*mGbRxyhne?Gk3D#^c03LW+PDw>617)Th=! z&6b)SI=QtJ*q97bsGEWDgAVVL8tvc{#z0Yi{rWWpg_V^RzV*xbA}{--fgg{gySPK0Yoa z?>|;8Rweu{@kD5od&%x5qywN668Ho20`b{&CSIzPsA`=F==qipa8!j7Dg@rj@)16n z;!H1MdI}uv-GO!H$o-JFF1W0%N<$7oQ<(m44`=HR@V}st5D?WJSn>o;!><=Pd{_|? zMk7nht@85nIEL$aUak2ZIb4it$t4O`$2&TlM0Z)7<|VBQRIL|(f^L-Wv3Ll`D;KsP zZW8(9;?_Mxlr)C)NWcg*ZeMn3x2I@Ky}iAJn*(L)TCDN$@sSV1KC?&821WxDK>RK2 zRI+mc)rcI0hl2ryx05Jey*g}h(*g$;sQ2&RkF!H3b#oHz3va?ryA9t(^S$!)m z#upg?@8VN)GZU(xy!{1cbO4%DBA7RnJQm3G<$L&ALNQiI+dF-l`pT6nN&B{j^frzC zgwuc#W(3TLLphZ|aG2ri;j}m8qBoKEdf|*L&Ro#QZN(;l@kc8wTe3MM-eX~M9V9Q( z*-xGF&sa^vKE=y)1XM#ycE;9KLc0l%in<5xP4*SwI_%b}<@pKp4qw1O8dmYGunQD{ zfB>}aKYkpD%Ro%G9~_PFTAg#}j1i4sodR#YcD_I@AQqk~>0z-Fwt*3tteTiAWKbbS zT@J7WRJj>Db9VGQqnn#sf@d|Hc0{6?uynvR5+8f*5be4RF8w#?_*3kgKENTe_;8w@ zrl$I$_1!A#?ZNKDWp42+D@7>!Pm$*yHnt#2Mm~?IThzXCodwQxa1E{>4xs#NKXuvB z(eZBRej%Y}H_xl#F2J%%flanEGH%#>SIhPy?0}d@kC1EMwlLwn76iosCMGEwAVRF! zhDlLT4HXsg!WeXujmQmVWM&31i_DL-P-DnKIN6K`jYCE203Asp7|ljgS9dk^Swo?v ziSTAMK1K`y5fPCSC`o&Sk)eoELFkvm>0$B1heg2|af0q_XX4p0wVO9@CZE%I?>>J( zOCt0!70Mb3c3q3Q70tXIk_A9&n`0)>mF^rmzMj{GAk0-iI!th+&mJ!utz_Rbp zYQkgmLZ9Fi6JrE;5)l=>ot$i%T$r|2VRi_Qiekft4GpH~c=$XeXqaGTLt&R_{Wf4w zG`tQ6;<;Nt*pKQWbpVJ*wlvC)yb%Vcoo_>yeD*lHO+OcN_SrM}ix=5^=nLKFY0(;? zR^R*Z;e+K!IYxk{zCIPcX=r%3#q|YV_iz^)7sT3pyWaI+RrkO_JVo!JJIMh~Af|*s z!EHakEzAclZN)kQrR~K58yskoFH*5rSKkJTMf^#0OS!%Dd-?gd5U`-Gu82is+OcE% zu3dVA_vm!~ID+u$pYxT0HE|bQ2wALeP-C7PyMf1`{hAs_V}&8{tb-p09Jw94h6RU9 z9>8CAromD{HNK6mLU7u6*A8apPw)(pnaFpYNy|6`5dwPPHsHnz5He2stsl+v@B#w8 zKVq-W(YIyEj;w*(L;wOiz`h{wr1@la2r)8R!UT`OY{mOyb~yX%u+3+N+Qa@hh30#= z<6mB=y{qdnyxET7xzZ{kWuKu$_$MWqJU>?ha7o@6)LHBq%fiA!Php1oNt*fa{=KKJ z;(Cf+hxa7hh|>diPk|C=oqZ4$6#*k-EUzE0P5O-C9dKeVeO&$b?~4U5&Y8A}{+?O< zg`~tU>=!c}z*c~a1vC=5om=TXjvKUI^u1+u3HcE&C^o+cbkE4}$BEBdSi5_ew9vcW z3dwOm`RctT`1#ZS$0XO;3lhIqB zAe-~%D0wFbPI8=3R}Zli=f>L{M@B|i!1`g~P+&#_<|d(+lh>KyfFU{e2@ppFkfdXU zsH3FCM-(HMTMiyb_{|m@6LYJozZV<(!g~i^0$qVLPMtn&3bg|7KpQUUVn{6x(G)0$ zI!e3^=o{n}QZ7rg`@ov4p4UW&hi`xWDyJR~+J1ig@{{Avv>q}gUGIy)O+P`eqv9zuATOxH46>%D3PUJ2zbNX%Dww(poaM>AR066Hhhe z_3PP!?x#A-f29NL-J3cu$}KM~G2puh@5F5QjO78*ruc=QsvRiqFbRX5b#qUX{-v2^vu-5f1Fy#R<#*v?)pj`v7d8QQ-g+kuwN zFE0qA&2dXhU+zp4&xGtEtoLdooP6@ONl~C}dq0I|XI~#l(0#jx5Rl9CFG^rlKO{tv zL!}1p@dc#-RTnk>v=K-1pTczn@y&8h=L<~I_XE!=?doEOrXz>&n^G7%G9ubZt z=1!gGx7H~GKbz3kTYEz}#SbsFyOUp0tNR{b<@1;~Zw}*)e7(cN0q~9R&PZ0sZgLPW zR%a5{o~ER1M4sw4{tkc~nR|F&TJ!rlZbhyAM3RS0b`L!Y??2iGAn^%gaT4;R5sDsd zjR8Z3JIVQz}67a;UB6v?v{;FogK?4@}{C%|HNf}C- z2$et6wL5)IM`t5I?)0<+)R&;Qsph#Cuwb7Mwj_84<8gA)1CYi)EeUM{`_g}LN3#-R z{}Cl5qY$>k5ko~dw2&W2jo=uAl=tdxIG5zW6!a}i6E#mI0VZg0N}a}<+l-*#0h^cM z89*Ycz>_1#ch%w~cR(-M;q1bs=$Vc>Bgb=hII|d*56*zBky?3Y+bxH800Eof-za03 z<+=T8YHFm{y?S*BfFLm|E35Sw@L2`Zzd=ir&U=|zS#ki62z4-yaUtUGi^fn2c-Gmg zwOh8qR@^2M5Jfb1)R)~Y(IMqpklgo1O zo$z|rAb33i#}%>yU~z1R@I$l@9BqDX|FaTSx%dy}Idv5+t^Y&Qc?a~|cmKc4WQEF1 zLa9W`CLszLDcM=Yg^Xm6vKpvJDp^HKk}^Xiq9LP!uB-|z<06$LqTl1Vf8Rg8-|N2b zi~4-t@7L>`=Xsvzd7d^VU0X9ShP28ZTtht$^r)R)&K;isdoXxWM9Xn8Hd9r#&ssWT zB(coV(G020Yc1FKj~^XL-_L%TFfk3E1E5Y?@#+&4CwFDgw&`AmGK$4jMN8QV;v<|Y z299^fr&k989S?#Rih$p|iqW`4Aze<XEBaXebej91>Li`;rpD2U#0ex1~cF4hG4r z@)#HE$2q5<9c^azZbAJVN@(q8xw%F(#hnhIIc_&>*f3sh@=nEuNwp@=>f0!LP}II_ z6`oAjZx3($o9a(5STl0xuV<}t5$2gcd{C;PJuFSUjDF?pYm@G2FZS0_3J}i|T;p z_#P1LgMI9vG{_)1nsm8DR|wi!l)Srf{nj$yurpaX(W;-b<@29A=cCxL$<9=J$<05& zG)O-e+S@k(f&f-&89jTkoewM~RrF1FQ|8e&X^O1agA@J3#T4N=d}L#IBJ1NsBIy=F zr18}mfV=~*sby%`nx6$jVD0yH$E%};;ALj+l9{(3>l-`&Rwv5aJv1wLbe+o0tYaU* z_Pi}C>-DAIoCw&OMeu{Dd%>E@;{Sqn>e{iu@@GK|86ag76O(=e2Bg3zituWft7lkJ z+sQt!j&e+qkBd78ZdC0)2VmIMNI_zlRwJ0b4Vg8MGczq1-J5b^h$2vrcp-{9x;(ph zi%4V_E?rtP`z8+?Xw?ZS>W&a!XeM$#zox)sK)gMJ6be(FqA$RGEvl_75rsZCZVw~D zcNlu3-txSCdnA2ov0x=d$h6AEz8!Ndsb$|vk-Vcm>H3)Eeq0|ZNj`sW89G%7A&_*z zb*8LRI{w&#rkPASgD2lmtz_rAc*$rvny&{Q2I55eB48|hKc*@ z>y!c0VN``phs$pQ;(6C9%G?i;DT4fN=qu4Yb{V?15#rE$L@=(K*mswOUu{Ecnjqsw zpHAR1RdE=}h4UM8ZQ}@YYt5XL>%nc68cnse#b8h*6?^`Nhb1^kww$V4w{oc=WTI4x z(hZ?Py}+53G8tS$WzzwlMi0F5wQ9 z6mS;$aW0lKaVGH<^A!yS9dF60;|ccwH=`A$k!embo?jB9A<2cFl@!VRe&;<;yZ|#0DRt*+;;!8o>YPylPp}hTsdZQ1n)CajA^FLl z7uS_dfyZ?~IHO=%s7sek0VfJfEnh8F)4viQk7oV=LEfutXQ(2`@%Qbw4u8flCpZC1 zseszNoP6KaE3zi(rx-$`nWSkilMVsU~D=jvGL|>P^d89 zAdz9v@jjMQy}i5^Iy!nGT4_w5f5Z2nqeu5iTp@9h$nOv#1mEHQAt}I(W)P8uEZvR1 zKB0iIG@$0QVOdbR7a2W-p|t#Vgg@ot>Y78-?{vZ}TW=i|CF#0J;3NpA6JJs^Y+`UH z+fRA?7I~I*kynQvDU{AaS>2rPk^Lv}{;4Y?`ypAhTY-?fr1(XPqEU3mOyKnKSR9onhLz`tbZ;T?xYG42FH^-qx}wv?had(!597 z|NBLQ%CoP%op)0;fG2 zncXKedf10gpLSHMKa@%wZw==DA$Y$|?~%OV-t*@jCh5cu7@vEXkHqMN7?rKwQrFt9 z@3l!cpzYYxcJF!gd=MTHkHas_Uy1%XVqj3Bk)V*)~Qa#9EJk6jsy z?Ku|=ERP}!$|?L8pEp>>a3UfZ4$|I@c%w0WWe-pV8vk^~z`P$bO+*2Wzn>1-cxE#YJ6`daio@@1hVP1|C|9&~re!oG3 zJfX?h6SIr6F8y}$Aa6X4hqng71)!`cl^Sib6+R8(XK-Exrk>f;+YmLTYj+hp22&1gAb1=yHImaZ0|F$EvKYI$BrTf5{!NB zTqED~@E(<`8hNLh(X^NP9_^!avZZy%>!x_ny?AQkujq{vL1;8fE?m1Nws{r*z32~D zdY7gnoG}_81x^Z(X%|@yuB+vh8;c&MmaIhtGn0PmJ8nEla&peor}toP>EXE%SQiq= zbdi&=yr{>bi?iP6#IDF0#%-aOVb5n_IO@muK-TUp^w`>eyUQR2&sLtf*e!zYqDrgQ#BbP#%PdR3X@0pDrI%&i_Tv{QU(ZzNBVkFW=v9cA5@aqv2JsNzN~j;CE8%P!02CX-Z+c7OuAK z%tkl9Xf9hT*3xfE#&Uroxrv-W0JSun`LVby@etR;M##hGG#o?+yXpC7FCv9RJ%~k= z8oqt+tmsY-LpCf1oRmS?(5g4a$G2RBXn{(Ydd!pdbr0;ou*hY!{cr9p=4x3Nj)F|2 zSu9N*lqaGo0dO#P@rKe&s!ZrF-qs!ai|^Z8_P;@!O%kzuRgJI5l!6{M_DvrH_=U0b z?6!+@w+)0-!A(&R{j0GyOI~)xpPMWG$*G80<8s| zFA1>&=sB+yMbfyOAeGS^K0obe}7!h>8*|R(Bq1en!kb$P|g5L_R16iSzvLt~;)^ z;fBM<5-`%JZWyifr0f8C4<)aX`$ByR?%2smQ$V} z51RNl?zY{r@zk$W;W*|TAsT-0}WL1c@NuT$Eg&hMe4(}XaahCKFt;w>G1kILU3 z>)$7wa($nkzW!aFsaWNJ4B@cQETw3u=Z-hkPDd8M8POMcpphtkI(E!4UTu4Ptb9Q; zcpO1fl5PF9Od+#oE(YS0xmmgxMjyC>YkkqJxSpw!W)Kd#^O<@ zq=lPM8pM&RuJTQ*5h}l1Bj)=Va;q~~@^5*GNOD_`old%r- z*IL%L;bA?vDUa|r34iE3ojAdT*l0_R2>))YsXD|`sz???qy{TxoK0ekF z_{cGY>DkE(7!ASC$!hAKL5#QU!DHIZRbo1I4HFq;3SiR7KPRFG$<@^UhXc!etQpD; zItW$B1eNKIpOJaI%CTd|8JRQ^^Cg~b3Y9N0l^eekvJ1*zhE{kD&@V;AKRKNU&lb`@C-*w6(cAP970lg=>iIGCIVm9AY6KqN^mi=F?M@#gW6`JMQ?V?bEq!9Ywk1GdZ0-wQmW9+dl7 zRoW83-2gE$gG(J(4w?(s{cI*E&^+E45R=V$0|Id;mEh<^&?U?b2NLdFI{!DG?{jQJ zT3dtW0iyrZ_3ItDYO0&Y+xBoUJ}RFa5=){vWZ6CFD&|+#|7?-_F?*ANdAtn|Nh&Gi z@XnuK4rF?(ThE@2fGy%n31;c>MP;rJT&U2ERD$nXMdl-}{>xCkU4t~N5l55O&Ok*S z|7O5hX;rwZNMnG&-Z+1Z&tITv9oq#x1)PpNV``riPZlu78dVfp{N-q zVFY2JgegYZZ(r?$*a!u&7ix<)BkOBh&xo_zM~0?ZScLiLvac%$yQ%a5mfP2jWG>hU zUmmENWGpG>A0M=mAyg4IX@e z;<$0?>bLC?sQiH-R(tGUfSmJeObjZl>eQVH(JKqhc%V}MRlx7GlH>u+G^FO3C z$YQci1GnTm(qD%|>B4rG&H8+-qn+mHAMX`6n~m)Ap4l!ZwFf|~=N zx1IC4bz=}IkH-ZF{(Y5P{LCJ2e>gM0IUrMlU85NXHH=I@9LTT zj!vSfx{%2x2{wF{uRp6-KxtCs4g6TWq9sX^795am4FllBViLt1`wK1mqd>$&Ol~b| zEyP=>KPE~dy7k^x*~_sPkVn!Arj#vt;jlzPO;E8nb#--h-m{0eEEFDuuP4uv0WPUP znUZ>oNAVpVhkP|EjAt)GvdYGQ#0(cCi32z|!;=TL5YGAet!;xbpztDk{rh5uu4;GQ zGgnixBiaTQL$x6M5cDOIaxbYFA$}|n@ES2qs-QXUT5o-Q-a39t-av8;AlmR)#C=Kz z6o51`V*p2@Yhd8cLK;4K-r~GVk=w|~Xhe}m?xp?VmR|HXZfN)FRRoDP4j?R?D4a0C za_?{hue0qmj831~xclDQQC3#1NeFxrspjN&koSf4LojH+Ka1Ea4m^ZfYmfmc1H&&h zKmauRAlfM^BEp^IPP;@? zyd37t=_LIem=szzANx}VpV?@^VgSyp*s}7&W#EJ=Qyw|hll}hB6yFroyJ(j3d8AwJ zqcL2aGm}nrD%o;t`>!fyvfe^;<)BR=_d`s!>}J+jC|PkPrL9S|qeRN4wM6qqtp6Ca zy^B2e?Z=PGoL0W0NDKw^QE^~EG0*7{;e*t(3(YTB!ujpp#{46h5=wgfcveI3y|fKF zHyumEoxCKut>gd<^wgd6b~_H^#c{c%vXluNsbA=d^U4L(I{w8rWB4lqhPmp<3u&Y5 zAx-SeDubzdzo0B@P#}bk^i4&aNKFomZ2&XK9R*8@E{W0IDZy3kJj}F^k~b!+3ggPj z*~J+}pC@f3sFxl>RYgsqEpNC6&n9V+kUQ&# z&ZPANuC#*25>X<9$Rq`#v~QE?Ekoz@YT~AKqq9FW76qd)YcN@VUPr5YtX@3D`f~>+ zW^lHVpeyY&`ma)N!rL9I9<-D*4t*n|5+qPnb#;{YOOBCWWDJ0in~KI*&^BlB+>Bq$ zYRUE>#*R`%Ax1{0ZNVX0h%jHC8xQ?2-&23~InB?cpVdSjDFqRWxKo_K@B1*j=2E@o zr7;Q!MlZGc_H6~*C}jhmu(NH0F`&zha?NH=<#nAoYVL%t$x$Z=P%gW7sg)N?BH@;uLcT0Xz^pB=QspY6@0f3AkiJL ztqYit;(RCQ7m1*UObc*S6cupXk~;Xu+dZ1{uX()B93RqDT)DCZe?vjDY+By*m>-4m zaA^9_-*BT-2BFgFSsVb8IZ0XaD61XWI&A$2Su+^<=gicc`LdpZ-!K~QyL_!!4Wj`A z+%b-T`t65wrw)%B2rJc1vsBF=##^gSe+7jiO+m_52ijxIS1HmkI2KzErUX;%dl2gC zi~pju92Vq%fl3z)MTNnZxmTxNB{tZlV4xmTz~b7013zEd=sX7ChgU&6G7oA|oxep( z+uTWr-T%%jxYV}gEv9n_KAdo|JoozOm9XcwIe(LXdXu?t1Rs;h>*n>E`v zrzAUR53LqRr=%OfP*Wl}=ko{}8NKSrq|)1~4_C(b$oo72xu0ZLDEToHC&uIlU0z{@ zob1&3^S-H}VMLs{AqhEBFbh=mBuo7ZrIk2_c?CtLw?8c#+MK}P~OjvsFht;8D)M;4cP z6;6m09OjW*pYnDMEtzNCAJpW)Po3F10?Lf{V8JUB%^X_RF+j*wN04*iV&ksXd&V0w zTl-BzZ2M1~GDX}2BnRUMv51Krd#eM5d@!tHs4Y*S_u)9*0qEeH(EH!(DXj7p9fA;= zDAcWI%~FEBq~aEehCEL=;R6iRkpq5m33*sz{~$o`h{=|<(~{hqNWiqN{|MD} zWYDTkdE7BMk0|#+uu`%?L!v7~%kv1zZl=Cv;H_kIyK{b~>p>P-f zMz{`a)ThG)>u0wwUA#CN#XT`xl%e?7x$79%`pehf@ux}?NUQ|vd46e$Hv_lFa-xQ% z#5PbLGjQ6uP4TyEvJMHuhpl_A>~pu`9+iWsz)u5o&xt2wueu zJ^ryP^+0p)jU!eyd%u^*(o!5Bq?QsTJ?z=X{A082u;G?HSM26tIf5pvV7pD@pAF`m zK(98Cj|#0#yp-p6)V0&l`Je~%9mM$7&{cz0Y&c;>FHTB5I;L)Yl~;9#jdnYHSX~Z2 zFL&SYF4;?-sG1MF56q5y?*=525tyEiy?PwO2`3vt5ZP@;_Si`H*xtf z_4V7S_Gsm$83^ggu0%DCYZ~oV$e)-0UHrN^@t<=4wubNvs=3{`Ewtlg_zb&JFA65- zJv}RFz%kd}8M^W0s`iuP`=S{Whjv=Y;sZn1{GU(9Rdz#v{PQWs2sBr5+-bBgph2XQ zr>}CyWeWNQF#ZpWJ+4=AAa2EPR(aN@Q9~p z6C}I4iILp~47g(cpKV}3fXuZ@6IGm0(l!b)*Vg+;qflQu8*tg zsf}UO@@nnIjLT@(wk>5;Q-uYt`;k2DB!kFavLkrBKs$7LeON`TOfgl}WF~4sZuvFB zO}mX>Uhf0Cdf9J>{JPw;l*qr=%geEH`p)WGI=3 zF6HP2s&S{6B?lb05OdIeig1fp_J$Wa`H2;8MVhC5gS^p5BGBy!vOF?;Q(vjO5uk1L zcYw;~OAE;;9x4Q98G|5|qF|#I2nF$NxH=it6sHDh5JiX&wLA;=x-yTOf@D(~CmuQoeJ*bQy%lKO(Bx*oHHg6CZH^8O z;sZ#mxPJ4dgOii*ty`{1pHV(O<{^o>m$1lecGMfsU2eM_!QT7b3S-;-k>t&oH!Z>;f2ZjzCCfiV%=3KC)Zj&Ep zQ+!gGgv$Vk=q^Yyp?&YPo-DQ{ZUZ3q^3&+4h-o{PjQc~>0 znxC|S?UL>2jOpN@1&X>zG;8qiaVbNw^=6Ncnkk9xAJo!R{XpsJLA}ZpHiRo<*~95a z2+WXu+AeH%t^Mw>Y#EaP#NruxCTwgoy2Hs_16|pq@&|k_W}qVudbX;x}1&hgdJQ9IRWxAK?zCL zjbA)_7T}ar>#3}!e_?gLSk+M;MBofY-}iI8;j<0HG*APizj%=_H4m%TcAYvsKnC6n zdxDTgZ7J*md5v}P55C8}{q*S}IwE#fadIsR-zBPEvOm$9-X{*p0J{hWxu_Pb2 zyKSGh7@}I93@;GZXCfQKuU*>|_X)_MXA`kE;&tA++5TANP(54Xx%F*M#)l0k7|k%Z z`%&y~CDa^qLz{bh(L)>DT-`wIxCwj+InNB9A2{Lk!jLHsPBI_{Q;wX_KQrp|=}JC; z-O;Wfo+^V`OgU!uI_YADQG2BiF3%FkiK7vSVzL6FE@b_p6}>$Blp^sqoXH2>Kug(* z1(%68sce2C2p$XxnSaWrg;gou0=>n7i1R=>x3f6Y!QTE*FNZPk70{?M|3p=N8RlWR zwQR!VV=T`JYy36Bef4(4_D?S_wW6M$LdS0L26eMFjG@*2{w=>7{i!{5m+hIUiaUAE zL6kGHPLeD^@2Rzz#xaD2+Svm(P0XNRKt8b47j{TjReAYqXiKqUM}ez{OoQwn&R?P6 z;oD|`Usy}f99jH57G?nFFdnxSZoXjA9bhgo-gJMF0 zek4J)2=ve2{c73j2WN+GP?C_>XMW-ltVoJVN@R3{@|)&G?NP6bW}!kSi?W0&#ovbd~cqQlogGhrnrk3k55GZjOSc*^uEn_RXqGG((-P}vT%HW!0 zDyS|v7?)oec(8$mcrHxSrtv-Tcr3~>c2ee^hM@q5@S-Vws126QZ?Zdhe^R$B- zqe(zKy4p-d7_r8ycWDk=zn5ClVdct4DAj-3wRbCPqo!ugbPK=fA8vpG242mBr=(NW zAORG<1oZipO&}vK8?pryj!cwY1iL3yiO35H{*{YYU5t-k0!P5=vZ>KF+T;`qMx#+6 zh6DV>>}B&Mg-1@;>4Lk7aA6*5Ysfa<^{1x$Yq~a9IC3+sI z-1bx$P0<4@|0ml;-f>p5wjFN^YQD>|7H;fpw5(%kzF}^i!fPK(rV`FAg*;{sUiaWn z(&xEj(L+Ylhe%zMmiF@qHomF=gPYU?hjr&CUT3UXo$mSF*RQ1~-<%H;Y7_0w*nzT# znYi6bx&Qb7C|Qs&PWZX4?#D$Mv{}_AtZ`|7SdTiDWu6NNM6)ri`xIDM^t5U&Z`(t~ z3^}D4?L-?)WphZgX4NcR=uUPWi_blip^@TDjgB^8{U17VD&WS4Prq=MXzH5bYBP@^ zL7QO(r$#q4Vt7K{m=TZ0r0N@hF_nVKoHlKU>A+6=DU8%;`MaKeG%R?E?YUXj{Jsjj zXuSZl-TE#Zj z+{Y27s1u6sVxU03V|-yk-5-_qX^D{2gPrA}agXocSAlJcRcO?WBc+W1NZvTgpKH>yvy8MMlZ}DT^uo|X ziO6eL&QN_YPR=4OlGkn-psU3gc#q)o)1nS6dv!Hd$Ow6VIXTwy#$PA7&c%;l?u|?y zq8t~pZpBlpkZcNInr|q?^{8>TVH-YvvpJdb$>M5<`oC-5h}R7oHk29y zjNFSAwiIYWL?(09~MZdDOMR0v|4RVJ6;&0-Q#raJrfJpiKhX7&MAa(0r-P!P~vtVR(A zNbn*2h4hKz8e(=z9xee~(BH7C9MM~eR0PqziM()i=i{V!qpCbvV(C+x-Irhvj^x} z??xjmd&*w8zSCBz586ISNoEMxqDtagi#+^80uF)TnE=bkZ%$NFXQoB9`Wm4;3vxfw zR82Xxb79FD9Of}sm+gr5Y-0>Cm|Yq8bDguZ-=CBI&S8u!2+Bf#WVUn=*&`f-UfD^= zDP`U~$*!+W;}Pwt`xqBL!R$DF*9_p5^QKMdAS055B2CPFChF@+4rI-ScbH0_Li)jw z1{QTKya_tdRG^>O%Iz{=O=6~4T0(4L_*tF=onm6Uc;6j4cC7Shm720g@!S|TJ2EW< z#)#xkgYb57_1BdbjNrK~IP>fK0Ji?TWo{>EK8-Or%y%y5b3d$S(^2tS^GCH`^i-9v z%!&Q>JM-uQ3L619vc;1y6Yf%5Ibg-VlU}ASW7;|{_-&MROfFAPuY)b?B_E{rOK)9( zZz4%}!oMH6iEm0vEojMtESJ(B70;01DZQ#=o_=^=aBDdHg`gnxMY8mYMxSM5Td)G} zx@Rq^jb=m`iIh~~&grCGOeklMA?DXiJk~K&^5mAKl~oyo0DSH>j5mS|+n5QTHzlfw zV=pFDJXB(0&zUOl6g)YI2NcY{d?6M(ZiY;j5g~R=1X>0@bbUWrea9C6#N(YjLu7DC z`apN@?xx}p$n2%w=Ygz&qh#irD=u)YRs(cA>c2%l&=OeLYn8QFE~xjJBUU}!Z<-cw zxo>n3?N_fpfO3c;`$1%fJZw(EQBN-|nfT{-%>v8A2K#6cA&`NWKF;$pnYNv9A^(aj zCHpRfvVHYR{ya2y8W_i@e}A#JIRH@HK-msMmK+EGaRb6VHIhRH4l z3yUTwR!?&XMa6;#6-#IeVvOQh3dxi-j!ec_F4fNIaaVKXcF5Fi9k5M6XD@4|IW6zw ztLsC1xMOPN4;W(F3kI!>-$k6i1o6&M0G?7i@!^QOr?^ezZESWeDQ&)~ulTw^P%@6a z;zY{aT3Sjq+qq)*{n6Btd#;zI?A-1x0H6Tqu`+q8M}4WqD6k6w&PgwH|qs6 z^MGV}F|#1jU4xEPD4x9#!s8u2@x-~R>%P>WZd75ij^@L2==r1czt=TP(V2YAon3_A z&V9lBh&L;~V-uR`@3l|$nozZQ%G46h4nDp=*6r7=wT^e3jtBd(PtQquRksEqs=%nH zLGN~u61VRdjAd2@Q`Kt3So)IU`+iv~!*iDX zfV$X~=xsq)wj_QEMKZ=`BzG$2Ww~e7WZfC&s5GCR0;lZ?AF~@maxg{HD7viht`n#HJzJoPO#3%X%<0-y{Uciq-0o-zw`w6{2nY)WF1Qaw;xrRqBj~gaDGyeL{ zUP<5hYp2*~F3UrBiF6x?eZ81}0WiV8Oa%LN#Nh+V)1}mPYo4E4QPlg_3H_mJN(fM8 ze2=JQIbm|FxNu)-*o9Bk{lU(r=mob;aaeE1@yc9s>mk%I7alRxJ}?Jo@-B4`_>jvZ zM^To!z$;W~EMUKm96F{Y$jNXuDQG-lpV3z$J$k%p!|`Ls9zZF-K!HTml1)SGL_5rQ z6&pv)$(hI<|KT69^Mey*xk^Jrqn1S!C|#CtEoBJ>p+}a%0mRXzfhal$TBai4?-^72 z)YM|AvNH}V177H>DpP06edSiMhGdvkzYNeX)qg7Slh+|djALHhWC((0ty)O_yn;5&V>oRV~Fe55&eh_;}D8+kVDBB&(6(m*Q-~Q%O;}&bt^I{p!pGp{>xdW4+s9k?ECGy%H|xaC5)ZQlV>(kg|!VRgT)G* z3RtU=%pkKS3<*ZYD8DiM>?+-jOq{`WO`o%@{aDKV$}ZFN1BnY67pyx7CV{yCS3RAm zmuhGUz6trT<3xX_QkidGm)i96^NVgGV^L|WKB%ImrfEor6Cpt@wVTGznarR4T2=M1 zrVc#JVFC<|_lyI;NbsSrk_qC%!^bvcBmW_a56uwtVI0v&{i%dntn(8Lz6@pLR8~I2 zV@{x>$tEX4$r{)ZyXI{e>SFH9iiNWr_s3Q9*S1(l`<;ORnuPzC)1<3gv&k3=MrA2>Aes|5i1 z1r%NYfwRu-7)j#^)6EJ{fV}L*9A<@tb7yK<1`V0U(h6@XGJ6;zY}!2woWOCa->@>L9gLu<1n5Gx2jTYEUwQ+~gpg z6ZFo+w;sK5<^8FlW{rX5_rOE@yu9wRnFww{FYju}4%sA#{#3vVZudq#wfK-QdyN1U$Cr?CU zC~JN{_#HfQhwMX#U3tWg&NL3Ia^K2NhSSy!R+2J@iL?n!?Fw`Q zAoCberkR2D3-y9dlrdE9iGdmh4!CywjBhlL8%`)pCx{58$5VdN+5{Y=gLiy8b zeRH!s$v(U&Z?7IFz$)xi~$SWkmW6bBKXfF`Sm@5|y}wtubke4sVRrUGdX^JiN4We@*=+x8^MZN0YY!66<&+`xl+YmO z5@C%jWQ1l%SS6c)2+VNn_u+_C%!*(9IXm}SUy2&pX)5$JG{vR0C6-j-O-<$+B{6Rz z3xBBg1aR>$pTx}@4mhNgeH@-$noirSnUc~eq@>)tA{_JS5zuVX!8Y@bS`EMI1IAm> zbsSg;u}q?`HGfB`DqEdgo~|v4_@|<(Dx6d*PZx>fMDP7bcCdtb-XQQ7w1ExlGNpe) z1CBEr2D#{TYfZ|{NfcPJvE58b;tj|T@oWp}sE{y)q2-Hb^GVEHXU-pN<@71Z06QYu zWV>kY?%_)qgN18M+41Y5dE;$ zjl*4MhA1hb(t4+N;@}w5;6WHuX^;rug`+uWTvr!_7`()}e};A2Hxss|$z{xNiklJh zfdCliK>ZYHH$w)7f`amTmswuBcrg@AVfcDV=u}aIK)Tde7JWkCRq@)m62{qMhEJ|z ze1M16uwlobd?{{s(wd@ad}zlSDkvuJ#VM=~_gQh|wKA>kX{F;m6PIq#{qgf_UD)}N zksC!NA^RzXc=N)-=zIT%tJtyelvP~JXg?sJ&StS80Z0g5>Q9!zZkxM)f`mOn6xAu; z4itjHepe5((X^QLXb>@AypSv`hYCWjxbyl$MV1KK(m9~BuCLJoOp_GAxhJDL+`N9B zM*jnj)$E%a`;ebYiCF9s_J=!$XsOhgrnHNVN7EZg-*)N11I zI^{wEWcRLK4>pj9cJ+Eyj8a@yx@&+*u(tVKD-QT>u%; z**-Hhv;mC5p(m3FPRDSy{51D{84X&hlTMgL7gG<;a4HcsGGGN|+##pR z%d`(8xSLde7%Fsy-0TrNO;ho0PJqsK6`p?p9i92h^yju{cppdCGvqV@wtqh0qf6@$t!75=p!ZY*kWetb_C2vvb}7ieCOi^54`s@# zG-lI1s19-%)je!5`!0_qnW(#~*UeU__WbJh%(JtD3O)sMqS|LpfCS)6iziSfdC?7& z%{zb^I_lFXL>cYl&PX#=SS37s5L0OHSPy-dVOGHMA?{SfsoNmE?LXc&rEg=z!%G9z zLDpDReky0N6WcOb5zYA!E5~Tt=(cd9k2h!%dU}`n{@Y%;V*UHK<1)FrG@wkOn8NUt zQRu>w0;x>ywH~P;%Pc?%89@uSAC37;17aT*o4ewaaa8d$Zdt4wTq{^Z%0o_$U`Boc zO#%k%Kdym6pK*Tvey9SP7N>Z{HkRGmwevT5rOiv}4@tqOs4Rp7wzD$r*y4=)&Aw6? zc@&oyv-g&6(QE|O%_$YJ6i17l%{QhY6q3G5whF>x6yMw+lmU@WIx!HRzaa8+s8< zCDkGMDT8hVH5^133cAysb46F$e|TlGX~$Q8$OiNf;kj91T%k_4=IZPzqIP!~;;{x*I}-B|K>fC|ZjQLa(!UAIk<#zJQVzbU-im0&{+t zw8$itASfwfwK5}|7-t5zqb;e1G7WLKIzYO^z0$yo;3@NOl=gt0=cJ$4# zhQL>~7y3zR((!*}p;RRQSNlC!laGeu=rKgjddog7{}c*OI=xvI-;l!Z_SBNlsEjSM zlpl0u8;^S!3(GPUB&-=Z_eZt2;Vl z_OxkF?N+aLj34HE$#Lb%6B9G*XE3p4SGB+`Xin_*f2J4I9J*#>Q9PoIrrr6-lLVKM z*S5}Ug)&m+O~b${P+vunX~WmQKM2%2Jimrk098;$Uh%fS{_`UZoI+51%@&73*0-#uP=dU)(3D0)%$?qi~N zaJT%M`=>-vOPo+4akd3Is?(n{i?rEChW4Vq+Y1T7yhyB*QDL+7!-7Su!8Rtt>UsWt zTdZNc^bmWe5(ldLJZS1|SNml|@e)^!_&I&}G&bFT*D2enx??CHq$^6$tsh!6Wa(K( z^-okjn@f~Rmxj)WsXDi;xv+E4b=aC~2Su)-Qhx?i+u-%Xnr$soEJfHon|pPomX3}m zNy3^$uqjPndXRixF*_%GKDjo;sWGej!2R3;LDW1^QJ_(?aW49hBwb6Coiqh}fIvlw zB>4|#{%?H_`S?6)n)b{8e&vYKN~2N6@KNnyb8MosPAq%cKAGD_2D>%rML~p3oxYq7 z;6QQA8ScgV(P6Ed!@3}Cv!oR%0fgr$maAE@b>9Z5n5|(eu7m(SVu59-f@@f=V*+#8 zT*pXSje6wLT<1jqarWjcP+q@Du?1i;WuBdy(fP^klM zp){%lD9VCt_NYCeD6aVWRYvFBJv~dKSL^tX6!j~bHu@I-_c3nTBsL+6K7w`@o1=n) z0`RCOY;pi`|0`Pr@BgcLbW;N;T=+2W88J(^Uyz@B`QcBA;S8q`K zp#Jy7ul6gSgE8Fk*bzlme*USOR+%&n3Xx8b6@7UU{j+OBpiDJY07J^?4B17HTmwKWV`l)Vhae5SULR7geU`Qk%kbs!MqFOs&uvp(F;(pVT1$9XOBu}DU zo6P78z#@!;O%XK0YFN*s?W1TWxUixNKq!+$uHHSWcJ*+7Lrp3ZfLr~wqFgTT-`|pB zdY850R9Rww&$d#al{EjHDsLH>DKR}3=VY{2t9P2AjOQ@)BCNKU1+d(lvmmYdZFAq6 zmlj3Lx@a#mKmZH~*>o@=OIz%DtXuthQLw>v-tzf9tXYc|0s5`^?m@C{8hHk5Kl}Dh zIqwI5KpzYoAC_e9SF4om7%v9-2uyEf9PB@`Q|HcA1S^UIDh5pb{kVz9!S6tdRO=MR z2=fqa6Zx%AlWx7!Jj|k=iYm+L_HXeILCM}_LTPK*lSsbF9sjlY;L#wj6m${T>|{WB36HzecHVL#zoBjI7wR0&hZ{{c zJGEYg>S%e{YgiKaD*+1yc}`Hw95bn^g-7P&6>CHcP63&`xV_`{e@hLjEErC7pe^Tg zZU=|mGN|uk*b!OkB7z6P1#+81!NHFSPl&d=77C+}PYdEFA|2vxd{6}y`C$jpeWhQaFpe5=M5M}U`J=jYj z0oiZCUL^jXWh7l`)+Fqm)8|$H!U2^UeHFACf&8T;qE`(gAwpil$d*qd3yd|}6X9h} zg?3+Je7=&5H0I|k>P|naiu6RTby3khG>mHl)qbl$VT+*VkbS)|t%A$TpXzXpJ*Py4 zQ;^_4R}vbWD zF9EsB6Ja8f8f(b<_bOm=`5++a`&IXbTfma?zVohikaVM@8E@}`W=HndLUyp@E{q&Y zZ|Kup1HRMLxipt7Ef$uh{u)Y%1OeqF1?fp}IoP|Yc!#Cma9kPH!h>eG>e}AX` zPt8cZeOG-R{X%up7EH029F1395BE`#HsTkZ#Ga_Ht*hX;xCL*nl0(rBsDcUiCQpw(!BOGRTO zHevilT6Gg=cr7WI$Vr-wP@BB>j-1lbB}% z^9Iva0m0)+`cR4|BJBJ>@ke;Gzr$C!z4~z;{I!#8A@MXt2)YJ8Z1ez-pgP}kY zmzw-dN?Hv0LgUMC^6PFcgKxBAWjQX3h&?G#rpcIWkkvd|EsVE2(DIq)pOu8 za#&i|;Jhr1;8w>gxO329HAC00Cff-W5ytbRv8?tEI3hTt!Tsty7ETCgM_>_9X19F@ zM7KTnii*evyrNUMf-1f@Rcs0|!W=zK<%#of3u3|`>j{AG4OB3|p>!LsAXK;fJ@Uv* zLb>I zBmz?-#`~G&kKAnIxec+ZOLgu{-ehF<=f&TAG18;1A@g*W4mkDahq*mDDm6!ZEsRWo zXEMli@17e}%ERfoiwl$_it&f>IM`3m`or~W*J{?O5l;AJFpJ3QtVn3{=ZN{7qLp2b z?_ctp@5JGm*QIT08lpAEa}B43$A6Eft0Fqs807 z)1?@%`o-KlZf(Qyt6TFf8ip8{q4Q(=^8C>9AdK;F8j@oHNaBh#&!176-wkar-xI#U z&u@#isq*K3|0BEb_(-9^8cW-)y3e6UO~)e2rI#S>a(pbn_?di#$gqY;(=y{#kjBu_ zi@a05h&Uk)j;{55-vrBd1q1~mx`tLG>hHI_a|P+E!}HQm6rBxUGvO!m1WKH&aN+@i z?gmo{IqHF<>!|SfU1|ecQy*T5Lw7N=4%srIV zM5{*W=MtK#9`A1E`D^1y<*^cw0 z4PSui8V5kMEw%JLMPsQRn5GwChJsh5uur4>{H%93 zlZ9W9bBo}Wh-%JI+YcV92qz&&;bRcx%s;z>2^AJQ0B|v#>{GY`g?!JMvgttPoDdhH za-||_OZ`AKAssx(5_z7y1EJ=T>n+aZe|8ErzD(Q5vVJgpC&qC*3Bd^caed!}xOr@( zjch0<{(-8*Q5v4RDJ>WfrBn%kVaU3681nIsf&ZL8%mC+{`PCod9$e^#ClV@5aL;7~ z5cuJUGZ}OWf2sZ1^M8K-YNx50#cf{OM;+8k+J+8h7lQ?WWpU~cjWPmucGEgGP|6XC$nE$TpS7q;BF=2ut&!R zihOBeT<5PTB@2m<3yM+Z;!4zs#BEX8B1tL{wzwFlX*u!HiU^a%jkvOYu~a zHSoM$nP66+5%QQKOgZ@YYp4ZwV;|sGpco2t^4m+HPlmPm(YYt^u18ftWwL(S&|OpL z6H1F)gp4kg8NIe1wk&l`glUDm!ZD!G%c+!H!mbFQx3XBK)VKVKR)G7uy_hP*Sbu>*LEbHR?~4B)ARENM7G z1~4(0jk*vSh8wjp!ygOzlUwY%B>nzA7l}(>y>tTL2#yj>m9P1m3X%K;+L@+PdwibB!lpT-YltjEl4*(7C4JDgqBr zr7-nqhT)hqPqeThxXdHBt+b= z%wdfoocfI2y!m=kD*tASZ*8~V%Dl4({n>v@SS!1#lsKU`qxOY8eHPmnlpz^e{6+pXM&^2mwB-avQ~= z-xf8~S(-)lHiSy>u&(*jhxbjqDOhBA9i~Hk_oDu;u7#?MvKCV&l-ud3Q6(_Q5$0r6 z&;gLeB5XJd?%44 z-DQB6GX?dsyf~g$_MzI%&#__R#fXZX+2xPsdQHT9gZox~!oKdJ^bZ+s9gQ$U=t$0{ z2&TwO@5rEZJY;19mK}UhSMOie^py^v{-pd#xOC!g)6V0RuLA8PKXF4Ox~ z*^%{X#k)j5@X_(XzEtF&=Jq_g$w&IeXusxMSvDF48@~(D&2jn$Z%|U97UB`Oe1EZ& z4(#l+_j~;f4_~TA>!(rF`2TTQv}iQQ9-U)SSM5VvG&!{DaIey4L+@!@Zs|+`Qk?pF z_@sSpwRNq-#0KvQ5+}3~w09p82@}|lNQ6rL_us?vK@gBjMgu=r_qoc!@p;t$M>q62 zLZ8TeZrFcui2OC7<6-1PeEn0sDWB>^b=knROd{}CBHF$<-<;xH5*g|^>8?{jiJc>U z4VAP%+jKeHLhO&-u1#P2E9{G;{)xDTs&N+qa=kev1p7 zWki@Wp-9*`RZ!>kc0zVO0rG1_1#z(zm#{ScyJnjtjM0Yf z1C`E+)q$d+WhnA22*vroW>FV2R|sLVneq}8T!M~+UbqHIa*ANm5hGJbddARJUIx5C zw|9QtVc*6(cI*&UD`gms&djElUm3G4Te+%#Y_20ZFxORCXk7+D(b9+<(CP7t5A8w% z68H4V9l9>W<8D8s|=jSMhTLZpD~WZ0i?_0^9>AwL^6 zCUk1=Z)04+cZez!kpMMe^DZd0EPje|W6@?yLP$uc?W{Rb#}Lp@DDzmAI6x+rAiG&Cd1tPm4|NDbTjg*ig5GQC}r3X1&4@fISRrJneiWzDcCyO@y#IOd68gd2xmD)(Q$I$46r{Kj% zAA$H>L`wo}6OlDRX*4S-$8Sk~Fyfx82B%w)%lr?*DSCzFSt2SiXJA zj;xz~!H9rg`a;bUrLL2X%9}TDTz>s3uL^(qA!KMAY**6AteaQ6y}Y_=BGmMP>-nEV zq?A?nnuV>+i$iX&mGAK@E16L{K7{4@iGlj&um_RzJWka1FB^L3WUr%LLRJ|4LAdxL zam(dzKM`0U+5wbU5NpXP!0vSjIS2P$xrhfNq%vFq;z6A=LBEqdXHM%7vS&(E55yi^ zs>}EhzylOMpJiNI1X+(a+C)A#ukt{_a@;ABJtbTI)C|mu)WiKkP zJ$_nKbX)YDM0J|u$+Vw@p66@fqEz;MI2*&3>R*PGBY?S)99+@|85=){U#9ndFmCfd z5>BQfuKaFh`4O`+8us!sAn{bx+|`T&w^D@Q6*Y;bRL>IW z2$x4Z>8PfbO4dQH8KmYgf}bs_4w;35p%F^*r}~Fm4zLQq_7GGd5E)P_u5V4b7h>1= zLYA{+W&#aQ!aOA@E-!RN^av@_jW@h^Z+&_}aC+{MKkUH>{%#X&W~m)vpuO1Y`$~tU z9jcN$v~U=l)*;RK$VH#{S-{AE|O;nw*Ts6s@p;I0DqS~54{{q6JAPAAImB|;7`q<}@$ zo~Zd*n6&MWE&Z`TrUN1)N6f5LF21Q*ug0=M27L(!qSTdH4!VL^0qt_w@8iQ+)eU^G z)HD=v#MV+}UqUGkPbEhyHoebQL^Qs%Yp+`-|CENFjxyK+84P=#wIPw^QK9W@G)*>- z!V(X#hp?k@L$_YO>gzev0|!`l^UEr99s25j0k`i z018quA<=qDHyAs?XmoV)6DjBOoJMbL>E$|I`9le6*n=bzYA)~mqR)80$RH2p%@Uis z-F)uI$=B%<|5rs3pR+auvs;HwN5$G?b;h1{gXZvqw~H8-#oO}u{*ui}$KbBNB3*j|pLq28 zc#ofj^?#y%*K=qjDOqpT6^o0ltSpp&RrgtQGSEWz?kzn*Vq{`BEWC1opvy&3&wLA zXf2R|CzB1t@@@Y0TQ!ekIw>r_X?ZCV54+w;@~U&x||a z^a@4P7^rJ7DY0zL&u`1cMwPl)l<7_dCwOv2@80bW4-Y@kJ!rn#(GC-{7CShEe^Qy> zxqtu54cZ-!DBDDcY_QLH;lei)fqg~UcO`&O^4L0pk9`fYo7@f33 zJ#SqA_7Ts6oaW*k$_@>exQy{u=IBAkrp!^48-6 zSI7h%{2l&Fhxt&<9HrC7C-;YQVjvl6Uxr(JX1 zm61hy`qJ^0FPW5N3IN;|y)iOq6Ko9=^*uhtO)QU3x0;4r*%!}7={G`a%P>99*&k9| z+-%@_rvS~1l@rVNzO#O9b0}i)7e?=_&c)XaG1{&MBtkqU25g`JBYxL`E<-CVUml)s z2V1h(#$ZCd{i;=yQO|cYUc7f>Xb^Wymh;Gr2&p?{)<09X{z|M&nZ=w6t{PNbN%e@P zyb?R*9M^Hrj=Q5h!R9R)Zx2`;==Jhtf(V%4htIDc-7L~3gQDbK%9Yo3U}m%S;v4t zxwoz}!UgkxO6}{;uXDrfB1>z4uhFF##;bE02ctat3@0Qvo7Q6(JKW2SJO-*(2%mfn+3|v-_H%G3e$5ryy2oq*Ljx^&L&2csdPV zZNX>4Q!bIHAY@Pz#>i0SEg_&q9Ci8`y_ILuc?4Fc(b3 zheb8t3qbpk%d)(AM}S+Yqbri@59%gAlSwVKw*P@W01-$kA}mfY_*7QdlSD69$uCwM z#}vMrIXhcw?&x6PdIp<4esGcqI10VMD^@1v9vEs)y7g3U{aIJqkhrL3|03NJNM$;v zJ5veMDE#>Hr4}c#i~`62ap=e461ZjyIClo3RkVY~DHU5qvdZ)kUm)Q-iO+x%uq4fu zgRl0&CNd~EgIdx1G+DL3-yAFOJ9Fp&A39$35pmi)@JYOu>yx{A^khuRyh!I_7tS(e zzK*JqqP!Bw8#{xlLu^lPu)AHff8KE^-_67}PFrrtH=HeOKgFyUl3ga}yzdj5igsL| z@RmLwt~kB&me|n24(P0p@?Y#(boRVG^cwusmme^Ix2Nm}5K4_-$;ibyfR4LZGv1t& zGen;eztVh79NrNxI!SH{Q_KDS{+iSXz2HqUXh|m$*>HM7K*Ov3e@0>G(wlaU`b{SI zRlMU~rtkcntqa<2PoF{@gFkB`9{D#7;Z4Ln#%S!Q)fS_mAu>^DJ-8$BBd{ZTQF{x^ zz`-roGyPzQ!Nx&g9tEP7N6%x*IViS#u$T;*FQC{NggOw-c?oO;36>ZsZoc!R=+vd= z>V@;3#vgVri|)q~GzA&bO9W?PSS@(RWOYe>r_r4kSr=uki^@~a>16RnF4g;O15Hg# zx{n%l00k)_$|2FAGf)JH=Zh1KV=)}LqN3&qxGPM$M{$9G3#{n#Pd!nIv^rIy4gk62 zIS6(oK5MqFLK(o>6NmAQ%@8@9LLT?Zi?87k^)VioKww%O56j0oX>JtiGGF42JjXvR(+I# zy_k`3?edg(F%#r{3>gxM^^kUA2UV*ej`Xu(1;%_#%9TazHe4@c2IK;-l;_8FqrMDs z(Jekh&Eo(J4dei0kFzHLpv~%-MaKm@dnfnegc9Zu!sv3_Ndf24jFi50T@zzdfpWfPSql;;1`v)#jOt%+52NTs484R4f%fO9wQjL`t+AHWw~U29rB zQ!c+=i)RIE6^~~2xg~9=Is?aK1_bf_0ZJ~noe&VYA)~M5ZoV|%FDG$Ilofbb%kFC` zZ|U&6+4K-4|Z`wQ}n zV^{8Bne#$i*X8VUpim|w}^a}HSBP#b?>5xqKnl*^vB%>Ha4vG z&P;6;GJczBHlsZkLYKqyKJnnxk{l0kXDpdXs~*Z2anX&6P!fV_1c*0`U?w{0KMiZP z@-GpbM0>pbv<6iqx$PnRY!Nm5Qr_xevZz%XCFAde#qZN+Cs)IZ4I{2u~QkzjuL z`V|Iv0^&>M!(6xbNIsJJHO3JL(*eg(WNJaP(~QbhL<`APvEgohel*!Fq?d~Kh-L#= zgpYY2-7LP_aZqi-(B|b;dbN01wG0N51J=D)f=lrdP7o3MAd2BJ>7Zby?Zks53?X;TYqaR zW+zrJZETmD2ZvlDy9tD30-_C$R9&Sy=*j;EE%v^!q3-j=Pr{|MLoh050kO$QOIpq? z3lcva2F`Q2pnJe5T#kc&v(Idm=trp*$yYMu0*f|m;YW`dxrJBs8JdO`dvnV73_qJg zjU~Qg?`)V)tA_=w8LNW3UP|bS*~R2uAjUlG-u%bp-5q`_?bRDDPBhm%!r!K$Jg?|! zp!rj<1^gR9kz7z^L%;^7qTG#~lo7xkq~LTx0)thl$v8L$$pu1M5l*!Vi5!S(1HRxQ z+8oYJi4!as22f!4cJuYjOt|Gnt5r#@I5TS`HsR*YBajMQPlEn~&rn!4H&WbOS1}xY zm8hLL)|z+SLYWo<&Lp@LhtKi33A()d*HGW$z6D}c=_D=+^aoljZ_c%Q_$%2%|KmTf z9*%J|$tiguT`^)X5jlzJeemFGlBbzkAHMtu07fA<1yna>9$GO32D;5u7)BDuIi zhAew}F@AQEYdrC;Apko4?;2wkxQ=S2Y89Fnb?9RqtJ~LeN=Dt_z<%JOJr`2%D63I2 zCi>04IE|xxX1-=}HA{FRD?-LD*_}8{tJY$_*~~ZkNCYfT>2GEe-#fp22GY52M)`NL zvf4okv`2=a_ETk?aHW^2Tm8DK+cVrgPN65{XPjeIS9p(=3zRxUX5W}hFvsrEc-t`& z5n4Jk$hrCi9|C5R!8dZV!UoaYIH46Jyk-(j1rliMl*Jj{_!c4St!xnMGl&2)(jXH5 zw30TJPm#!2Dp&bJg7MO2s@yyoP~~bB_hkucCH<9;`cbN2HsK4j?P^dnzp5XO03{=Z zwb*hwB`l^+y)(miER`xNu^07y@p>9;Nx}pdLjr1niJUO&HxaM%*J5Vi+YDGLQ?c zAr58!c7XEAD0k2ye4f2HotA>G={>zeKZxLFAvCII+pqlLwp<+4e5#L!uX{7?f7xEP zBlcE@SnQ4(ZWeLxZYqhr`JS9yxnU>!^A?0rr5O$#vHU|ZWn6;k=WOs;uqusxdUg#_ zg#ksaQ5H}DpYW)6)$dTA^EheaVDN)zng;6=)?Tck<(V%Dx?P!BchdTVk#Y$-_ibz| z=0KsXwftdUZ%427u%R*2Sw`30p_hcbSjsQRJ=AZ-(xuT;wiAsdU=UU4HL!!d(>LeF zSnG1faZ(HV3YH>R9XcH{LgW(c2kjZ+Gb;zr9ru<9aen0%EJjS?x%u-IG&Lz3=lQnK z6sFhZ?SqZw)zv8hUh!Xyxp7nvsHo3`T(g}sFLy%tw40H$1HAv@SMwU@6>eghvg9s` zs*y77MsDuMm=*$X(;7>4jv`EAv(fTGyVygnc-mG&hKL-FKA8+$swx|8o6}velcymk zgk~P=9CZsgg?|yf=M^v=>Os!`);PAjA+8DY3RE6lJVU}-fQ?DS>ju$h91)H}QQTQv z;|}0`^baT<=Y}hvL(fXt+DeoF{4ffa$h(mvxY5y9BZnlY`gi2HMocCI|7S0n0DSW? zWmF-b?AG3`T093XtS;&a}D$&$(f zYlZZVF|GQw(EN`qcgRYsKl;+k5sA6j)EI!4 z1>HnE$}8H_MZj6&W~1FsR&_9o8g3bJPXz5$eiQl3RTauc%*)C^&akW~saARCGs>8= zXxRXKCUCk*E*ow-sgMbVFp5j|s9O(EpFvqxUYt5s4lG%tbpI$cn4D#T{``~C$i1ZYd~;2+CWCIt8B83hA!mli!a2pB6xl zllk)xUHH2q5USLfu|V>;VX5eOMs`D9H26R5O{~~brp%Z4{vZwizgCFq2HXdr6HLshjaqjL70I2=`ind5K<;_ zB!I!t0lC+{3I_cyi}CtQ=PN^C{PM4<6F&nUwJqtykVe}Zwr;7QG%^&F7GI1A{546M zg{6)*%&Cc!MU0S~B$^zq#3#%G#I@b;i_R@th2>Pq6bOF--3xz*D;a&wP52&^?USRd zrjtQ}l1e0tUXJa?Y_LyaH_)P0&)q%(ikCqm?Cep+-^iKaggM&Z_v>ZqB!mj*TU`F7 zprEK5<7}0GvipuS`u?eOpM^Hq$7)fIZ+hgo;0Oy?nqU|IT=AwXK64NxRWl4u3SNMIiQevn|m8{ zEzwCX#uK@l6(hmmn4Wv0Kc<6JMipwbX>&IMoPg{8^ELb~URplZ=LZh>ijdF%x-t1{ zGEFn=(ati#HcC(o&x7Ej9kF@zsSiLMNv&bzc-IS|ob z^9vyd4%jbUTK#mDu!fvOJR#&xx10}4nM}0^6g~+T2NfX%!EUGrXtXsw7rHn)j*qcU z`Sva;j>71C@zE%oI64W>scQG4Ffe{XR+|!VqGx089g_Ua*_fJEybG&Ddv$f2(vTNu zP-MBwj+q<&VgWF>r0MweHB zQ`ds$fFSq=m>z(OKG!GRQHz!>kD_;l!g=qNKcAn@OKU38GWdMXk-t;Xz?sM6nU`@z zQ*}6wOj(#^h%Js3*id!ET5k6cFN&3lQBuN|CG zJ8s6yZKEDr>F!_S{%Z6d;~p4mWjxIJLJo0VwAz%w%pbGk+BPK@_vqdAlHPRNAvBT` z?IjgYn*~^X4r;LctJpp%we!a5`VdThE~3 zz0Lt4hM)d4bh;RTHpLUU)lOA)e_TDjH3LV_Y=Z8^xPh;22U838D5nYge%b3IFpwKqJS2oY(CE^cW|`OnbfGW<9gfcXzxZUuUCjT9wPn!<4s zjow74>+Gjp%Qc3hH2BN~*-EoANQZ5kLJOQRc+1CbtuVyU8>;dvA2qarl{zlb(&!r_ zZf0d|e0xc5QIT6tnmBQX^jmO|hnS3h0!YCgv`7L7UKKyzWTu%h+VDz+-T&Y$4g#)L zTs>nq*S=B*u}*FdjUii#@8oAo!n`C6a|glAO4c^pkY2A3Nfb+H z+zYA*f+U>~d88;oB{Tq#=n0|q-P}K29URwp$8*7-8|v#sPY!V{L&3NeMdqkG)0+)u zzj9?ZXKJfMV|h406D&ew#qqSn^chPGEPY5fro?I zd0hzb{^IWa(7F;V4$pL~$6;hJz)_3r`rF*OCn-kzuqbG~H=r zlW};HI@XRLi&oZ!UVHa0A$WqJy#7L<)7&}}@SO6a(p-Vq04W67MMjEO*@KI9CIj{j zk9@3hfuoFJ8al<>yL0kO;>M`mW^M;(&zqOstYqkl$7f!2PEJMoK#Kff?jH#=Vrk03 zLS-u=K%Cr|pEw!*q=eXF-x)z7Fg_bx;&)&Rj`6+t2P<|8z%4*5vxvezKBc+>BAEb} zaxXuBDYh&cgaDdWPA#l%Eg>oek3)yhbmNvl@t^V9xtv_h0ab`ZcyW)& zm#iJ!mwxbf)q`D2C|8zes*R;ALZl-t%-gpoB5w99ufLnL(V639PHEOOy^_xpuW&U~ zaz!k&33-s8--n@=V1Z6z^tK4GI`VIVl5|T08C;}5J3+1ogY3uJ^}olHz0YfMFZ*6w zE4dW_dp>A|AXL-wwo;sr z1;^){>rI(Or72~wn33RY!B1!`nyljH5B=5I{wC&XQPlbcr%mPAf~6szc3Ub<3{gdeTrDD$dcy4gO%xDsPG<4-N&OZm=QL}g+)rW&~)RN z6a=DM5!;}ukm|$qOUwS#bplSdg{guuzuXsk^ zg5fLd?x5cU;PLlAyPhgJ-qX}g1Nq1Kz=sWeNxkMWbHK{P=>p4p$0pWTaT{xZ7?x(0 zX0=ZW3SPc@ck=L|T7wC39JgtdPLePrcr0I2?7=c|4Nd^#Vl5S)aH(QYIy7=d;pjFS zy*>v9c>wPH?q~YB)hOCPk*{!oF^1sHs4i&1^so1p?mw|8=Q%exwmgf$*1hX_MTozI;;%cM;)uL60b{`)2}+JDQo zDEp7VSp_Yo7?tFa_Yu^`&<5C5;w3tc}*ahrzdRuhzwBo0st@v@qjZP;EJPm zy{?xTd>9;C z)&5(g@8v0HYM96Ui(rvufORtjI^pf8Lx}-<_OxMt3m-^nB7C4Q1)SvTG!FDMUGp2F zQTDBrEIbjtES`w`OdTS)z9qcxzd4zs2gHdlC<>YdJF8}$J%2tDViU-3I|rmcw-Qp- z4uJ(-VLx=y{@82eJ|o>ni|l_a>DZyer>s6EHmxV6btHtG`6pd_}F zu^wm-DRkb9inN!cIOIrFrIGKZ6}fS@3;s>cVmsP6{!9i3J@$sd>=jtH$@!WoXUK!V zB4LhLp>y(TkXQwdg;GXext(@~p7^Z>_)z=~ix#Pj=-scM#ipkxk3~oCja?rtr#j49OCF5Wtj~#1r7n+L+CsX+~*iBy0M6K!BTR3{H z;zq-whBdy`%ZGFVc)P}x3Z~%JLqA2AHiBeeRcHX#=N()eGJy%&OD5}`BYw`X=6O>j zZ`o{9>C;Y6=r@QkZ-^2YBT0*Jl8MtT9;lpj%I%~+m@lrDS(fcR|@VZo%+qDgol%k%Z&?`Nom2U3?D<1UA+Q=-mZu=C5TmL$vJ0HrfN zgJy(dyxb4)m#&UQ#oC^Eq-3JoVDBx)TFGi6Jfa+mM9MMAFrUGE?R%L`1GNR1>u2+= z))!XshWUHZ+Kj zk6)f{e>qMh)TV3VIll$J5=8}dx-K&)zcxvo|9gj76q?;Dz&&Ds+eFzu~mM~PUFH_p92nPoeNDGmG@$youPpO*hZZ4TiE!~y<> z4CHr$0&T8*1Ur*?*uYzG+A{lxep}4d7=;ZJa*#_5rq7l8PJ-a1ZmX+v4T7NIjy?Hq zU{4LHRKx=O&!2`zNC&yxwk+8uY3xXDV@(dvsbY8z z5qaRX9L(bB;0cJDhH(UI0S9RN#H2`mQWJ`&%WbPK(IJX>nsPLg6C|OKxxY7gG{U}- z{?~`by@aFj5b68O?=~vDjot&WRLloKLBE$yS$#e}ej%(#+}C=8DYP2`_f0+BKUpL1 z{(Z)lko}l)w?HB9WUo!Ijjs_((U*?3e7bb;;z``)r~o5h1pe?{mqiBu?oEgh1pm8TE^EOR!@g;o+2||&lBy38jP82cQtz!CFbq?0E zTkr;;0O|fVb+O=j;?;{GQ(2| zV59pEx}9!he9tw!ZN5)?JX`T1S-%v!LNnoY6m1=yFt$hzCXsE;r3SuQ^7RCz3R<0l z3nIe#Sycpah>QQiDn=#)h%}ELUEm^=C(f){?vCRRR{-ozW!xXY_EiRM)fqM>*QA%! zeLCu!djI}?nWF?2s<$ySa>GMPZz-a26OrXQkE0;3a|y&MuORedE|d;U{BD-P&k3mX z(Zho}yelu45X+dD<=ZkpqEg_osMp+`@l#QBl!UfBcY3q#e^t;51l!BQ;bvxF&G)JO zEH`0wl^#!tseP@`@}n&KjStXe#99R|cUlkYH!s_xI#>wbEp#LYJWQ2mNXVSwIeyvV9jX{A12&g*bcnvD4I*iA(44VB^Wa|;jPcJUH0R`rxBLH znevxN8d0T6(j9HU@};R{Q8fjAmodOQcm9E7=4wVpGpwlH*BrkQm~t0^z#$%!GU>u> zZ*D{p#@20G^!MMV>c_ZtgwPaBK}2q>oc7FVp-iZOr=XUWNrUK!*Gh~5#{hLwKNwRH z)AAvgZ_&F#F~c!$2J}WTL)8(8MxwOieYCh;TjR9jgo>+N9=4+#s!*9&?{5O{R_bG z0<$Y`<=*}KCG6>fKcCW?%ScKzRP}@69pzmW7w0x<*?{bq?`ofZ2z=H ze<4SP;EjE4_5xNIR3~firQVmsKy=cYC>i1I&*9i&S4ve!)5~|ikA9;qBL5Vq7r?1EPniRTb8}l# z*gcW*K<_JvSd{L4HbbU4iknt8oW?rQ@co@$O2hY+K>XpW#_H;}WHa#&xeGXXn9wRh zC`8%6V+$aK$uBT)0-|GT2h8^~Mu+p@{o(!a-#~6{eqmch`B#NgEaj6&K+!7TB2aJ4 z6FD0`WZ66RQg$%yL)yJibTo7fXlsA--Qs8Gmim7CDeMF?#*T4=9>>eqH=4qlo^v;c z6iP!GUG&RFCg}*^R=d}6#F978N*Z%$bK}Q(!5#ig~fHSAT_2R`@ zh$v>w+iz-5g!;XItPRrKyQ{OavR;7h!*+h6R2IY{Iy4nEsU*otFNx)h^qN!iF9m>d z8*FHeE?R^JTN*b@nhRDT0O6O^jb+^O;T%b|du>QZ#~~sADX3gTNFu*WbUq?=qUl{u zmEG>6@#ojX@Nvd)ff=Ja=I3#^O+ppHU*LK|DESj}usBQ0$L-j(JG?C~ut~*|rAxUs z8x348KJdXHEZn-#25`E8+{7!DJ)Bka|4$200zsobqCu_)(!A;}151c(nDGQnOx<8K zV-O=F9uf)xUKw~Uofzw_NiRl-3W_x?Aq!NeG^$9dFJ5TFxr{1f0=t-*hVF|$&T|{f zore9Oqo6Uogrc{10;|2~PY&0RT1`zCB_oWGZa;rM?fJcG%4j7c=0TkBc#5M=Ut;_@ zxMa$edU=`(vP`1>2oH~Muv5@4C3kYL!QJ`}Qb#%%olDcws z1MMZ$A?Hp=o`B9;09O7cqdO!Mm~tnAj#<_vEFg`7F&DaBm4?Siz;0QwAXlPFgS|1eqA zv1xzjs?{Ahbu|1w;BJNbwfr1Jy<7p#5Syegp+q6@rYUD3_1uEzHBuBXnGI_L&^gAM zrV8T4G~LOkIy}mSNufI^U|+m>vx`G|{jz_V7Xi4I!M(vXBxb25`R~wYaJp@2^Krf# z2HsCwVWF_pCs;1(`7F>YK2jMM?H|u61jpIt-r?6(X~^trt|w;TjuLOiH!HUD9!@xk zmf~KP(ZOQ#^BT_bci@RDP{?CmGUBfD3%=P2-Ai<|cyJLkrayZ&rr5<-WAwkq5m(WE zQiqB2gLD4;%uWppmP=nL@CLFP7<41WPD7TB1JV&i7S%1+sX8NoZ9H1p#bi1-6K;qn zv6GzT*gJM(mAq7lDe6y=M?nV*ihS|P74=aU3UJ5q{Xaih8YXjasVbV{l89K};Rdyw z1P@ZJvowHy)5LSDktmTuO*c-M%X9hZJD9{gB>Ab3I+T*ifGLHGO8y}(VG}? zuk@hew_$zB#|-av8|%A>W@tit^LUC4sgSsa#C1Vu(3>NfzBR?#fM-V2CIa)-#VN7% zV^$MDj#VC^`Wvs$e=yBCcJ5FrR_Z)5Dj9Vj?ykJDv3|`_9wvKxTVq}Q=9*8M%<^(} zuF9YLT@Tee0(V4EUkXlZCLczGDcWOJe(=d>$&={A$}>u`to(*&m6@)*wgtnmjCmu4 z&s}*QHXAb*BDSqj=->;w$}kvcV&>K_rJ5LLt8)zO!tcO=mZe{(tuDMUWz(K7U)EK8 z^3FuO!c|0J2(YD6M_y(I3BJ-fvJ1%-n~DTRwe-s$Y?!De*<3P zzB6ZuAX<5lQkD*CydCX?P&OPESFX2b(p`+6RcaTWj zL}5-y7X~l_@ZBp=PAau;pU#ngiC{PQSt$ZJ-rJLsN0EVF?$MK)WJWW*DZL!W5#$_u;I(m!jiN(Ci~5F~ z(oUX7b9ad@f&18<*P=JXafaKNpYID$32RNWO2ZEO%oeA_Z}S^|TBe~Qf!u|>Lds?C zYAIt0x}c1hfud>E7%KpBu%OU2t&hO0VzENT))CBwc7~IVnnKivTumU2?~7CIHcf@J zyTm{!RO*aT2;??kPR#W(H#@lV*|TRaQ~tam3(>_$*H7Jff%RM7KU?l@QC67tx%hU^ zkoQKj0+hzLZ*Sjc;;H!a)-kas9tDlPyeuZKz(*}XWs>^7M=5a$H@aH&eB|A8k>=Tt zn+9c9rS~aYeqhJ6LG7xmXAW|{b7l$W5ruf9E#orB`^$MNEq@++Qz88hvA0s z5ODIx_jhr~1z*IpQt&)WiP2HuI$8j<^pJgi*{}2}{&_~yAi`R+R5T*N2Rhi0t_rQn zg)L55pf63xV%Hy+zY+b$>rns!HT6+s=m7A^VlE&t>_VPlR=Um`p)U@&bqegsF@9J&vPO&~~<(yimkYs^<2L zb=W$8fDA;Y8jy&w3u}sPkCp9b5CvW`|3bng=~SIUzU4pvXe^e@}~`RAIs zMnxV@6ME>pWwD8giRb^y=l0l8>|s;zh)Iv^sk|#2)>Kwjf(dH^@=INSuRzVlCg1+> zbwN|{j`DtGnjJ9{<=M08yC8BzLI#E<11li$1SNS|jD^%^?-IQ18=FoJC( zNCyF6d(ddeAcdAKTf)nVy@O9=;$ruk3`2us_2SjRD~rO)=UrG~W7V)dmu#qNOsv|52# zq9~!We$5?M$}}z=mk)2*Awq@<77eH-l2Z)E5_f?^wF{FxtLxc{z@P-uGzIdI)NP*Tq}W;JzR%F0F*HXnXTqcW{K<4%2fm$I`yxH~ z(c_7(V}Q$%1y7{IVNIfdOCM`Z6w2}c&>6zk^w!i2&$!;t>5{Zp5WU{+pEgUa4%&;g zTFkaOrh!?DB$NR@zKR4*NQUjaJ#onLrq{iDw1--xiA;TzY+`yTAh?C-J=l;{_+{j; zaL7+aG8TiLkf3n7qACLYOuPNd-=Cz`UQ|M~Trn!MdGj*i2nFg9iVxniWUz}Yhhork zKu5K1-7L9d7>wxGFaU~G^uO$4ebFkryxjp6Wj#KUe_&-L3I>6@*^E9tTap)MPlb+e zwj2K^g*5Ln3&~e}Vq)+Gba+j$5*(x0O)K$lz(W^GyTQgFjkv$#)k82a49W91o+m{L zZUsohNe!vOr?L!ee|Rb1+B1KE-mt_UVb%3@CyW?7n!=6Xmk{AeR;X z-S?4zDX{N!q!CVbt^4iUcA-7nGrypq;4MOkzPQ;}u38maFF*2oJRdvyYh`6#les92 zSD}M6ANv{vI)Ub%v*zE_sNd@NB^J2#j1;~!- zda@sFTBOE^wMQ<1h8IwlufWY<89O(2Kve_!paRgu6+|h;OffapS>KqN8*LnM@57UG zWg&Y%pFq5}zjEXLQcC=}Kok|o-4p17(1)d)nV8&d+i}pu(Le?Zc53Ylq*X71Z??BxMU=fJvK%;;=;)=F_MHcWXv(W0(>s*v+B_j} zG<_>o=={I;+AprY(Rs}${$o(xz{O@c|HrqFRXTxL-VcLL_XEb{U}AZek5U=0v`);6 zY*I;M3sT zZfyuIiRG8E3fi&T+VNNBoSt$@MXlL*rDowEenWu#B~za2;`F<#cxy*qzb z@$x#R%|LWWN-RtNzRL)s7P_yjy>Ww>RBUR_k9fv0)K)-Lj(655ta{Y2C!Vc*Wke&g z_U;uRsXH;0q8Ed2R>tld_}Fe3d>6NhgbYeU&rcmGWi3O_A>QOw9kuFx<7oZK?n&+p zKkkWK2uKFuNiB(>lRRv~{{v1E_2{BO9cycACv|dAdDIejmH&a|DrjXnzS$ez&ul_U zU%fJIvwO!a#wc(kHRZZkr{O)#n}^0c#lcKzTd;F_%;Lq1C0K;92wyTPV5x*2-~yg# zY3U141|jT|u<-P45wRjyqZ@wB0&su(4b>`W8}BAt^Kw}}juizYR#~jhGsVtkl&%ioh)>pr)x z#2c`mT{QMiGsWUPhyx6TO0G205=s=3e`Q)NWS4|xFQleH+5{BA{vojP@&2o}L!-;PoVZx5L4Z!EFa zIkaVy?E6{EP@J2K1{pTgIIu7bwwdhqTzbq}R}=yWB_5_uo?TyGA2q!conN_D&lh(5 zMix7?WH1HZPtGe~S_>l3$QSBUPhT(<>||XB|L#9hdAY0~>KH`6>B`o(oK|h0rVVqB z!p^LJdg9+tj+X3drogf(+FZAall3BMXuhQGHfSEARG6n0xEi-+OxqsqcO2z8cybk@ zP{Y{oy4_}&{-b3>mJK=3_+tbDIdajyg?yv!-`Bo>xIJiJ-^yxL)7jU%2WClL+^=XF z_(xW z(9)vvyFY#6_D_wXL$bB)O4ECf$1=luR|c2df1J}QF}*(x;m1ilD=VUs`%xtIG~1cL zm7y1lv8CKXf*e&$rM!FR&dkBr#R)-g$6t`L_2r(#CO&)j4#;Z(C*obMqDt++47>y2 zJX*mi&0lQXzpul}gt=U%F%i3(y=WwCo8#%tqu7I|C$tMa`c%Cb5?;(rB!FDQTf@K< zOYy_<>n2*peOXKSRfBn4&LhH%sH)K&W#bW$3W>-kkVivD$C)SwxznXsU@LL~OQC?~ z!E(>M*jW-ffeTQ;+_7WBMASn^4-Z zzWfdzocBHj{Bt0;jmE@Yij5!Hoit`xZcn|Nwj)|Qzg-FS+(7(~KsML74%V()2QU6R zT%TC>u%rRRyyh=m|Mn0eAU&`km^7hBL0Qpv$-F)cXafEA>o;)taJ{cJbOBLFMFc`2 zXh(whnNp)%trIy-TkKt_jSZtIQ;Ca{X{y40E*kV?%P76{Y=1CizIA-z_3ekeWv(Go zGbb{y^sDF9$YfoJAD#7AW}SRRnLKKjiIVqaEQ=hq&MEf0E0Ov|rE4&A&xqnGVk(t$F$EKRp4jX^BIT20c z$6r;B^KPX&`BJX_ULPL^_L1a(0EJ+sm;xpvHdbM@fT;y|D%3;qCRP^MT5dDp zX}(mQnqYo{yr6MuKb?Vq0B>aRZxO)NhTh`@BsT*`{S zXxs&a{*|q5_N=(5s4IXGxLgif`z~x1bhbpYA!R0*Y65>eti!d@ACrV_VUTw4-u=PB zHl>3;NGZ;L<}6ADbdWG{>HvN|Vd5J6eoDRBBwx@6R#b(mjd!h}7nVS5nkE;DjTY>n zKWJRYJW>o`tp@}LPevV)aUhZxGSyY4;S2~?R#W?zYo7C25HlKS2)Mb&YKLT&jDN@q5^=Z@6z;-*VaO2wsQ5uoPC+sy&1m(18{LXx;lsmh>W+7CNxgQ*A}?U(JLs01tgPs`Yp!+v%@{*}GGa$#5DF4;iNk{2+WyACxPsA^)&2 zOH6bjXbQw#VwSAZJ2<7y~>ZY&6b>helW>n@VO zz%C+2<@iKdIZKutJAF;5*>lIM+h{THF?d_WJfNuUxUX=RBj^a{o%H4iN)A$V5TWr? ze+)8QgldTBLJ)(6I2j0mHTye5kWQJY1a4xC{{xumDytfN2V&pG{#gMgy-K!P@PB6j zV1q7qFhBVaj!ao5_r|o70l~`)FZ3s!1VA>Bg=4nrUqIknJm5)v;#&3|Gp63lZgaC| zNX;`L5McIMzqp>dE2g*l$|FXFXTnC9bm@Z4#7p)2shF2NyF7GINNbibXS>g;`;^@z zKi|yGzIOZeshd5&Qf9%Rm{Bt@ruqmNiGtYYIf4ZJSpVUv7sF20B!5+7p9h&Gss?@3 z@j7?TImYW0w?FEJ?+apQp%cHxwijLEx=mEnQM&3z*DLAD{nsWpky)4MyEyr&tdyF) z@Fc9JolAk8KGy4~ekb+!n=SSV?#zjZE!V`Wj_fFBK{~x-;7ri|oV6%qHWQn^K4ap% z5x8yJAoJyUYu@=_)0sa9c5n&mb$j|d>NwFxGS>eA#{Zq8UcB+;aw1A zu<5a-jQ7e3Z5E!?{Et6K zQJk@0QmW3o?b>PStLer<`A;{qRI;4_WAO5AXm`cjNlDI%`)BdWahOIUN_*LUR`bR7 z_LUh{KHER_1J7eBNHjm==#U`!(>-q(MM=0Q^do>g#PoFJ=nHoC+?SS@clNfAUGo>q z33?e1RsCSjOrF~uFCdkDzjAuX`Rc@lO!ffvCc~k~rcz8dhYR@mF%Jw8O&ra!QcnrQ zVM*sNR9xJ%y+gPaO!YO+70H2O%p!5!gw(eC+Ov6hfcLIl-H`$Tb29$u#Jjc4#uEnp z?@y(d(k&DDu%w;dW;gyO?j;bwyk!A&Cywj3cTZ~V>E*~G6&&AX#P)F{bR75o($a0Q zvIBCiumL_0Wn(vZ%)4iM(cYYta>5{Kro`CB(Ko4TS4$bcc(mw?GD53K`I^?Q{B#g6 z`-KZNU#quL6-6QOZrga1q0>E0cJp|1DR)Abhrz!pgA%iRzt7Kv;Fh81xd|UZksy3^ z5EkSnq<*SYQBjc`)vknAfVPAG-*YiB>ZmeoiBdx`tCmQ>fgobS&F8kfq+Jl?n)x_!~**6?(lxk!~|1GK|A{81Q)WZu~ zvJtbplmL`OPW*m&Ly;x`ILSH;Z9xN6!go$$vKn@-lec|!l3Xc6WhNnQ>|Llme(}D0 zTauetcf<*hZ1Hh%6Uj8;G$n9o2seyO3p z&H!!g=gb}|<+Wi7^9u>_;t2rLIq)+%)&GdH5*+xJ%1(lz^6~;W+~Bq(xCZb(nv?(L zqO)3s?3^Nx>IH}$wlUu^#@ha`ztSi-1Zso2;70KzgJCTc9(-Ek{gLfMeT^ez$cd<< z0BOZ5FU$HKto#4AZeQ&&V-9nkh+2ns?$(cvfECjMoTls^P6CODM^I$4pwdD8IpLs) z#PL8^EGkx5?Y|HFgP2%!c<@lDSv*mM4&*{>s44kVAafWqhHw<FQvPI!6C47(;0JtvW(Fp z?2S-v_F^$S8Ts7G1TPTTjIrZ#ThpK4N-xFd|NruPX5`i@M&Zw|d`#&vaNwB-?Hquo zr6Moy#NFPD5yjLU=Dv)_obht;McEpteNc2|giqMHivk4?N+xTBzzIm3hw6?ib~OHl z2v(j5OJ0gi*}z64Ddfdaj6d)ov=!sT!{7Ne8}E93|2+Fc{{Aw=P*M!w>IK3Rm81af zDA;J!LTB$A!@ZC2fh*pJKS?pbXjOp%Q93Ca*iIu7>WWpjh%^6IV3=-`MyDfjAOc=1 za5ta`3cmP}<^{H;E4y+D$v9HrfVI7R^X4WCIPBdaMLlE47D*ft=Sot8~-RaAMe_c(j29V5G)oEa+7K&W<37o%agQB3O5q^mk{5^UlJ)X&=)cf9hWUs z&BX2sBNrkWnBU$nq=V&@XhD6*g&OMW4#ZFY$`8jzb{3O1{8ui;sW5slkVL9m+1&V( zInulWV1Fan@T)|XW{6#$p9r_pSpHNoSC18gGWI{-9h)f9-lj998p4+&^q6#>Vhh)p zq^p?jgWXL8Bpp!Fzggdh(q;PT89G2?Y*7k&)7Xu;%dYawmWI{64wfuqAN{P(ek!o7Qan z@t$ltZWtx{{cvA^U@A~u4ScjFe^{62t;4^bfLfVK)em5(gRT#7?{_&0T&W>~ zXI}}HPqQz?I-)Wi$I&orR%M~BwtupR0oA984|ZzaAHM{M^FG&Npa>{e_t%+RCE8%} z4RPTuwol92H}C&duJfUB%6BKr4biqJ^~6LW3Q5ZKIgDOap1kUn(?|~TV{o)q`ZA7s zkVf&nd!M}uxn=zh9hzTyfp!g-*=~#8C44N=RMODtqb8Iw<-B51#xrt8Vgh9lI4>i( zB9e0Gw@?*0E-@lRW{Zw-<#v9+>bgxBO&u{jku9}x=gOA})tS33jEI0RcsTsXZm z@xPrM97^oToyw0!L(}WV1=gMD3fP?f9?;XG&Eco!RiJa{$RR~Tz8zbMdQxnN@d309d2#&igjP9t&x(5T@voH6xOGI*|O&0mGTcn63VmresuZ5g;xP# zrLp2Rl)&Kwy=~fyWtq`g;7o%x3K>kz!Zv^Pm|KÐFTWpd{XQUrkD*B_OZg+?8cz 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/shenyy/introduction/assets/1563880582136.png b/src/main/java/com/shenyy/introduction/assets/1563880582136.png new file mode 100644 index 0000000000000000000000000000000000000000..89bf2b5d4d8a4522ef3a4f2d4a50766bf1e92e3f GIT binary patch literal 157407 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

EP4#Y1&ct{_{IikoQ%AeJW1o!xU&8SbRM&nN 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 z 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 NHGTfHGx{q%{tNw|plbjC literal 0 HcmV?d00001 From 81512468a696bab093a45aef66dcefb236cf420e Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 17:47:50 +0800 Subject: [PATCH 04/37] =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example01/ExampleMain.java | 56 +++++++++++++++++++ .../example01/factory/Factory.java | 30 ++++++++++ .../example01/factory/ListFactory.java | 29 ++++++++++ .../abstractfactory/example01/item/Item.java | 13 +++++ .../abstractfactory/example01/item/Link.java | 11 ++++ .../abstractfactory/example01/item/Page.java | 37 ++++++++++++ .../abstractfactory/example01/item/Tray.java | 18 ++++++ .../example01/list/ListLink.java | 20 +++++++ .../example01/list/ListPage.java | 36 ++++++++++++ .../example01/list/ListTray.java | 36 ++++++++++++ 10 files changed, 286 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/ExampleMain.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/factory/Factory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/factory/ListFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/item/Item.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/item/Link.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/item/Page.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/item/Tray.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListLink.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListPage.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListTray.java diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/ExampleMain.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/ExampleMain.java new file mode 100644 index 0000000..fff34f3 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/ExampleMain.java @@ -0,0 +1,56 @@ +package com.shenyy.dp.abstractfactory.example01; + + +import com.shenyy.dp.abstractfactory.example01.factory.Factory; +import com.shenyy.dp.abstractfactory.example01.item.Item; +import com.shenyy.dp.abstractfactory.example01.item.Link; +import com.shenyy.dp.abstractfactory.example01.item.Page; +import com.shenyy.dp.abstractfactory.example01.item.Tray; +import com.shenyy.dp.abstractfactory.example01.list.ListTray; + +public class ExampleMain { + + // 通过主程序参数控制具体工厂类型 + public static void main(String[] args) { + String concreteFactory = "ListFactory"; + + // 反射机制需要类的全名(带包名) + Factory factory = Factory.getFactory("com.shenyy.dp.abstractfactory.example01.factory." + concreteFactory); + + Link people = factory.createLink("人民日报", "http://www.people.com.cn/"); + Link gmw = factory.createLink("光明日报", "http://www.gmw.cn/"); + + Link us_yahoo = factory.createLink("Yahoo!", "http://www.yahoo.com/"); + Link jp_yahoo = factory.createLink("Yahoo!Japan", "http://www.yahoo.co.jp/"); + Link google = factory.createLink("Google", "http://www.google.com/"); + + Tray traynews = factory.createTray("日报"); + traynews.add(people); + traynews.add(gmw); + + Tray traysearch = factory.createTray("检索引擎"); + traysearch.add(us_yahoo); + traysearch.add(jp_yahoo); + traysearch.add(google); + + Page page = factory.createPage("Example0Main", "Jueee"); + page.add(traynews); + page.add(traysearch); + page.output(); + + Tray tray = new Tray("tray1") { + @Override + public String makeHTML() { + return null; + } + }; + tray.add(new Item("item1") { + @Override + public String makeHTML() { + return null; + } + }); + System.out.println(tray); + } + +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/factory/Factory.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/factory/Factory.java new file mode 100644 index 0000000..cd612cb --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/factory/Factory.java @@ -0,0 +1,30 @@ +package com.shenyy.dp.abstractfactory.example01.factory; + + +import com.shenyy.dp.abstractfactory.example01.item.Link; +import com.shenyy.dp.abstractfactory.example01.item.Page; +import com.shenyy.dp.abstractfactory.example01.item.Tray; + +// 抽象工厂类,其中通过反射机制利用参数传进来的包全名实例化类获得具体工厂类实例 +public abstract class Factory { + + public static Factory getFactory(String classname) { + Factory factory = null; + try { + factory = (Factory) Class.forName(classname).newInstance(); + System.out.println(factory); + } catch (ClassNotFoundException e) { + System.err.println("没有找到" + classname + "类"); + } catch (Exception e) { + e.printStackTrace(); + } + return factory; + } + + // 声明抽象工厂类中的抽象方法 + public abstract Link createLink(String caption, String url); + + public abstract Tray createTray(String caption); + + public abstract Page createPage(String title, String author); +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/factory/ListFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/factory/ListFactory.java new file mode 100644 index 0000000..a93b5b9 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/factory/ListFactory.java @@ -0,0 +1,29 @@ +package com.shenyy.dp.abstractfactory.example01.factory; + + +import com.shenyy.dp.abstractfactory.example01.item.Link; +import com.shenyy.dp.abstractfactory.example01.item.Page; +import com.shenyy.dp.abstractfactory.example01.item.Tray; +import com.shenyy.dp.abstractfactory.example01.list.ListLink; +import com.shenyy.dp.abstractfactory.example01.list.ListPage; +import com.shenyy.dp.abstractfactory.example01.list.ListTray; + +// 具体工厂类,如何配置零件 +public class ListFactory extends Factory { + + @Override + public Link createLink(String caption, String url) { + return new ListLink(caption, url); + } + + @Override + public Tray createTray(String caption) { + return new ListTray(caption); + } + + @Override + public Page createPage(String title, String author) { + return new ListPage(title, author); + } + +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Item.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Item.java new file mode 100644 index 0000000..6cf7e8d --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Item.java @@ -0,0 +1,13 @@ +package com.shenyy.dp.abstractfactory.example01.item; + +// 零件抽象类,构造函数,抽象方法 +public abstract class Item { + + protected String caption; + + public Item(String caption) { + this.caption = caption; + } + + public abstract String makeHTML(); +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Link.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Link.java new file mode 100644 index 0000000..db90ecb --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Link.java @@ -0,0 +1,11 @@ +package com.shenyy.dp.abstractfactory.example01.item; + +// 零件的抽象类,初始化 +public abstract class Link extends Item { + protected String url; + + public Link(String caption, String url) { + super(caption); + this.url = url; + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Page.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Page.java new file mode 100644 index 0000000..cd4081d --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Page.java @@ -0,0 +1,37 @@ +package com.shenyy.dp.abstractfactory.example01.item; + +import java.io.FileWriter; +import java.io.Writer; +import java.util.ArrayList; + +// 零件的抽象类,初始化 +public abstract class Page { + protected String title; + protected String author; + protected ArrayList content = new ArrayList(); + + public Page(String title, String author) { + // TODO Auto-generated constructor stub + this.title = title; + this.author = author; + } + + public void add(Item item) { + content.add(item); + } + + public void output() { + try { + String filename = title + ".html"; + Writer writer = new FileWriter(filename); + writer.write(this.makeHTML()); + writer.close(); + System.out.println(filename + "文件编写完成"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public abstract String makeHTML(); + +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Tray.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Tray.java new file mode 100644 index 0000000..ff17924 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/item/Tray.java @@ -0,0 +1,18 @@ +package com.shenyy.dp.abstractfactory.example01.item; + +import java.util.ArrayList; + +// 零件的抽象类,初始化 +public abstract class Tray extends Item { + + protected ArrayList tray = new ArrayList<>(); + + public Tray(String caption) { + super(caption); + } + + public void add(Item item) { + tray.add(item); + } + +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListLink.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListLink.java new file mode 100644 index 0000000..589770c --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListLink.java @@ -0,0 +1,20 @@ +package com.shenyy.dp.abstractfactory.example01.list; + + +import com.shenyy.dp.abstractfactory.example01.item.Link; + +public class ListLink extends Link { + + // 零件的具体类,继承抽象,实现其中的抽象方法 + public ListLink(String caption, String url) { + super(caption, url); + // TODO Auto-generated constructor stub + } + + @Override + public String makeHTML() { + // TODO Auto-generated method stub + return "

  • " + caption + "
  • \n"; + } + +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListPage.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListPage.java new file mode 100644 index 0000000..450aa6b --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListPage.java @@ -0,0 +1,36 @@ +package com.shenyy.dp.abstractfactory.example01.list; + + + +import com.shenyy.dp.abstractfactory.example01.item.Item; +import com.shenyy.dp.abstractfactory.example01.item.Page; + +import java.util.Iterator; + +// 零件的具体类,继承抽象,实现其中的抽象方法,Buffer存储html页面内容 +public class ListPage extends Page { + + public ListPage(String title, String author) { + super(title, author); + } + + @Override + public String makeHTML() { + // TODO Auto-generated method stub + StringBuffer buffer = new StringBuffer(); + buffer.append("" + title + "\n"); + buffer.append(""); + buffer.append("

    " + title + ""); + buffer.append("
      \n"); + Iterator it = content.iterator(); + while (it.hasNext()) { + Item item = (Item)it.next(); + buffer.append(item.makeHTML()); + } + buffer.append("
    \n"); + buffer.append("
    " + author + ""); + buffer.append("\n"); + return buffer.toString(); + } + +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListTray.java b/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListTray.java new file mode 100644 index 0000000..3f34e1b --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/example01/list/ListTray.java @@ -0,0 +1,36 @@ +package com.shenyy.dp.abstractfactory.example01.list; + + + +import com.shenyy.dp.abstractfactory.example01.item.Item; +import com.shenyy.dp.abstractfactory.example01.item.Tray; + +import java.util.Iterator; + +// 零件的具体类,继承抽象,实现其中的抽象方法 +public class ListTray extends Tray { + + public ListTray(String caption) { + super(caption); + // TODO Auto-generated constructor stub + } + + @Override + public String makeHTML() { + // TODO Auto-generated method stub + StringBuffer buffer = new StringBuffer(); + buffer.append("
  • \n"); + buffer.append(caption + "\n"); + buffer.append("
      \n"); + Iterator it = tray.iterator(); + while (it.hasNext()) { + Item item = (Item)it.next(); + buffer.append(item.makeHTML()); + + } + buffer.append("
    \n"); + buffer.append("
  • \n"); + return buffer.toString(); + } + +} From 1815aa0d59e00e40e34939ba71eb675c6eb585a5 Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 17:48:52 +0800 Subject: [PATCH 05/37] =?UTF-8?q?=E8=87=AA=E5=B7=B1=E7=BB=83=E4=B9=A0?= =?UTF-8?q?=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dp/abstractfactory/exercise/Bottle.java | 10 +++++ .../dp/abstractfactory/exercise/Cap.java | 10 +++++ .../dp/abstractfactory/exercise/Drink.java | 10 +++++ .../dp/abstractfactory/exercise/Factory.java | 21 ++++++++++ .../abstractfactory/exercise/ListBottle.java | 8 ++++ .../dp/abstractfactory/exercise/ListCap.java | 8 ++++ .../abstractfactory/exercise/ListDrink.java | 8 ++++ .../abstractfactory/exercise/ListFactory.java | 39 +++++++++++++++++++ 8 files changed, 114 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Bottle.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Cap.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Drink.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Factory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListBottle.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListCap.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListDrink.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListFactory.java diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/Bottle.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Bottle.java new file mode 100644 index 0000000..8934ef1 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Bottle.java @@ -0,0 +1,10 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public abstract class Bottle { + private String material; + + public Bottle(String material) { + this.material = material; + System.out.println("Bottle: " + material); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/Cap.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Cap.java new file mode 100644 index 0000000..d60685c --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Cap.java @@ -0,0 +1,10 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public abstract class Cap { + private String material; + + public Cap(String material) { + this.material = material; + System.out.println("Cap: " + material); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/Drink.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Drink.java new file mode 100644 index 0000000..278d39d --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Drink.java @@ -0,0 +1,10 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public abstract class Drink { + private String material; + + public Drink(String material) { + this.material = material; + System.out.println("Drink: " + material); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/Factory.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Factory.java new file mode 100644 index 0000000..457f103 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/Factory.java @@ -0,0 +1,21 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public abstract class Factory { + private String type; + + public String getType() { + return type; + } + + public Factory(String type) { + this.type = type; + } + + public abstract void produce(String cap, String bottle, String drink); + + public abstract void createBottle(String material); + + public abstract void createCap(String material); + + public abstract void createDrink(String material); +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListBottle.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListBottle.java new file mode 100644 index 0000000..436e609 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListBottle.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public class ListBottle extends Bottle { + + public ListBottle(String material) { + super(material); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListCap.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListCap.java new file mode 100644 index 0000000..967fda1 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListCap.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public class ListCap extends Cap{ + + public ListCap(String material) { + super(material); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListDrink.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListDrink.java new file mode 100644 index 0000000..ee61743 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListDrink.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public class ListDrink extends Drink { + + public ListDrink(String material) { + super(material); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListFactory.java new file mode 100644 index 0000000..bf4437e --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/exercise/ListFactory.java @@ -0,0 +1,39 @@ +package com.shenyy.dp.abstractfactory.exercise; + +public class ListFactory extends Factory { + public ListFactory(String type) { + super(type); + } + + public static void main(String[] args) { + Factory colaFactory = new ListFactory("Cola Factory"); + colaFactory.produce("steel", "glass", "Cola"); + + Factory distillery = new ListFactory("Distillery"); + distillery.produce("wood", "glass", "wine"); + } + + @Override + public void produce(String cap, String bottle, String drink) { + System.out.println(super.getType()); + createCap(cap); + createBottle(bottle); + createDrink(drink); + System.out.println(); + } + + @Override + public void createBottle(String material) { + Bottle bottle = new ListBottle(material); + } + + @Override + public void createCap(String material) { + Cap cap = new ListCap(material); + } + + @Override + public void createDrink(String material) { + Drink drink = new ListDrink(material); + } +} From a429526b6720710d5c5712a86b2a0b63719c17f7 Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 17:49:21 +0800 Subject: [PATCH 06/37] =?UTF-8?q?chatGPT=E6=8A=BD=E8=B1=A1=E5=B7=A5?= =?UTF-8?q?=E5=8E=82=E6=A8=A1=E5=BC=8F=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chatGPT/AbstractFactory.java | 7 ++++++ .../chatGPT/AbstractFactoryExample.java | 16 ++++++++++++++ .../dp/abstractfactory/chatGPT/Circle.java | 8 +++++++ .../dp/abstractfactory/chatGPT/Color.java | 5 +++++ .../abstractfactory/chatGPT/ColorFactory.java | 22 +++++++++++++++++++ .../chatGPT/FactoryProducer.java | 12 ++++++++++ .../dp/abstractfactory/chatGPT/Green.java | 8 +++++++ .../dp/abstractfactory/chatGPT/Red.java | 8 +++++++ .../dp/abstractfactory/chatGPT/Shape.java | 5 +++++ .../abstractfactory/chatGPT/ShapeFactory.java | 22 +++++++++++++++++++ .../dp/abstractfactory/chatGPT/Square.java | 8 +++++++ 11 files changed, 121 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactoryExample.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Circle.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Color.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ColorFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/FactoryProducer.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Green.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Red.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Shape.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ShapeFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Square.java diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactory.java new file mode 100644 index 0000000..ef4b411 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactory.java @@ -0,0 +1,7 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public abstract class AbstractFactory { + abstract Shape getShape(String shapeType); + + abstract Color getColor(String colorType); +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactoryExample.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactoryExample.java new file mode 100644 index 0000000..9fe9b51 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/AbstractFactoryExample.java @@ -0,0 +1,16 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class AbstractFactoryExample { + public static void main(String[] args) { + AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE"); + Shape shape1 = shapeFactory.getShape("CIRCLE"); + shape1.draw(); + Shape shape2 = shapeFactory.getShape("Square"); + shape2.draw(); + AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR"); + Color color1 = colorFactory.getColor("RED"); + color1.fill(); + Color color2 = colorFactory.getColor("GREEN"); + color2.fill(); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Circle.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Circle.java new file mode 100644 index 0000000..9bdbd81 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Circle.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class Circle implements Shape { + @Override + public void draw() { + System.out.println("Drawing Circle"); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Color.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Color.java new file mode 100644 index 0000000..d40679a --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Color.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public interface Color { + void fill(); +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ColorFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ColorFactory.java new file mode 100644 index 0000000..8cc293b --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ColorFactory.java @@ -0,0 +1,22 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class ColorFactory extends AbstractFactory { + @Override + Shape getShape(String shapeType) { + return null; + } + + @Override + Color getColor(String colorType) { + if (colorType == null) { + return null; + } + + if (colorType.equalsIgnoreCase("RED")) { + return new Red(); + } else if (colorType.equalsIgnoreCase("GREEN")) { + return new Green(); + } + return null; + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/FactoryProducer.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/FactoryProducer.java new file mode 100644 index 0000000..f6a3593 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/FactoryProducer.java @@ -0,0 +1,12 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class FactoryProducer { + public static AbstractFactory getFactory(String choice) { + if (choice.equalsIgnoreCase("SHAPE")) { + return new ShapeFactory(); + } else if (choice.equalsIgnoreCase("COLOR")) { + return new ColorFactory(); + } + return null; + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Green.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Green.java new file mode 100644 index 0000000..4f668c2 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Green.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class Green implements Color { + @Override + public void fill() { + System.out.println("Filling Green"); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Red.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Red.java new file mode 100644 index 0000000..5689474 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Red.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class Red implements Color { + @Override + public void fill() { + System.out.println("Filling Red"); + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Shape.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Shape.java new file mode 100644 index 0000000..aaf4736 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Shape.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public interface Shape { + void draw(); +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ShapeFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ShapeFactory.java new file mode 100644 index 0000000..bdcf3e6 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/ShapeFactory.java @@ -0,0 +1,22 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class ShapeFactory extends AbstractFactory { + @Override + Shape getShape(String shapeType) { + if (shapeType == null) { + return null; + } + + if (shapeType.equalsIgnoreCase("CIRCLE")) { + return new Circle(); + } else if (shapeType.equalsIgnoreCase("SQUARE")) { + return new Square(); + } + return null; + } + + @Override + Color getColor(String colorType) { + return null; + } +} diff --git a/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Square.java b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Square.java new file mode 100644 index 0000000..f49e443 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Square.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.abstractfactory.chatGPT; + +public class Square implements Shape { + @Override + public void draw() { + System.out.println("Drawing Square"); + } +} From accd4d4104d84635610dcc2a85a910df6b2d954f Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 18:08:37 +0800 Subject: [PATCH 07/37] =?UTF-8?q?=E5=B7=A5=E5=8E=82=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../abstractfactory/{ => example02}/AK47.java | 2 +- .../{ => example02}/AbastractFactory.java | 2 +- .../abstractfactory/{ => example02}/Bread.java | 2 +- .../abstractfactory/{ => example02}/Broom.java | 2 +- .../dp/abstractfactory/{ => example02}/Car.java | 2 +- .../abstractfactory/{ => example02}/Food.java | 2 +- .../{ => example02}/MagicFactory.java | 2 +- .../{ => example02}/MagicStick.java | 2 +- .../abstractfactory/{ => example02}/Main.java | 2 +- .../{ => example02}/ModernFactory.java | 2 +- .../{ => example02}/MushRoom.java | 2 +- .../{ => example02}/Vehicle.java | 2 +- .../abstractfactory/{ => example02}/Weapon.java | 2 +- .../com/shenyy/dp/factorymethod/Moveable.java | 5 ----- .../shenyy/dp/factorymethod/chatGPT/Cake.java | 8 ++++++++ .../dp/factorymethod/chatGPT/Dessert.java | 5 +++++ .../factorymethod/chatGPT/DessertFactory.java | 17 +++++++++++++++++ .../chatGPT/FactoryMethodExample.java | 8 ++++++++ .../dp/factorymethod/chatGPT/IceCream.java | 8 ++++++++ .../shenyy/dp/factorymethod/chatGPT/Pie.java | 8 ++++++++ ...\241\345\274\217\347\244\272\344\276\213.md" | 8 ++++++++ .../dp/factorymethod/{ => example01}/Broom.java | 2 +- .../dp/factorymethod/{ => example01}/Car.java | 2 +- .../{ => example01}/CarFactory.java | 2 +- .../dp/factorymethod/{ => example01}/Main.java | 2 +- .../dp/factorymethod/example01/Moveable.java | 5 +++++ .../dp/factorymethod/{ => example01}/Plane.java | 2 +- .../{ => example01}/SimpleVehicleFactory.java | 4 +++- 28 files changed, 88 insertions(+), 24 deletions(-) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/AK47.java (70%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/AbastractFactory.java (75%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Bread.java (68%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Broom.java (71%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Car.java (70%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Food.java (55%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/MagicFactory.java (85%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/MagicStick.java (70%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Main.java (85%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/ModernFactory.java (85%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/MushRoom.java (69%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Vehicle.java (59%) rename src/main/java/com/shenyy/dp/abstractfactory/{ => example02}/Weapon.java (55%) delete mode 100644 src/main/java/com/shenyy/dp/factorymethod/Moveable.java create mode 100644 src/main/java/com/shenyy/dp/factorymethod/chatGPT/Cake.java create mode 100644 src/main/java/com/shenyy/dp/factorymethod/chatGPT/Dessert.java create mode 100644 src/main/java/com/shenyy/dp/factorymethod/chatGPT/DessertFactory.java create mode 100644 src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java create mode 100644 src/main/java/com/shenyy/dp/factorymethod/chatGPT/IceCream.java create mode 100644 src/main/java/com/shenyy/dp/factorymethod/chatGPT/Pie.java create mode 100644 "src/main/java/com/shenyy/dp/factorymethod/chatGPT/\345\267\245\345\216\202\346\226\271\346\263\225\346\250\241\345\274\217\347\244\272\344\276\213.md" rename src/main/java/com/shenyy/dp/factorymethod/{ => example01}/Broom.java (76%) rename src/main/java/com/shenyy/dp/factorymethod/{ => example01}/Car.java (72%) rename src/main/java/com/shenyy/dp/factorymethod/{ => example01}/CarFactory.java (74%) rename src/main/java/com/shenyy/dp/factorymethod/{ => example01}/Main.java (74%) create mode 100644 src/main/java/com/shenyy/dp/factorymethod/example01/Moveable.java rename src/main/java/com/shenyy/dp/factorymethod/{ => example01}/Plane.java (73%) rename src/main/java/com/shenyy/dp/factorymethod/{ => example01}/SimpleVehicleFactory.java (70%) diff --git a/src/main/java/com/shenyy/dp/abstractfactory/AK47.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/AK47.java similarity index 70% rename from src/main/java/com/shenyy/dp/abstractfactory/AK47.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/AK47.java index a1c3ee7..3d21ad4 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/AK47.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/AK47.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class AK47 extends Weapon{ public void shoot() { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/AbastractFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/AbastractFactory.java similarity index 75% rename from src/main/java/com/shenyy/dp/abstractfactory/AbastractFactory.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/AbastractFactory.java index 689ae1f..a4fb0a3 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/AbastractFactory.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/AbastractFactory.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public abstract class AbastractFactory { abstract Food createFood(); diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Bread.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Bread.java similarity index 68% rename from src/main/java/com/shenyy/dp/abstractfactory/Bread.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Bread.java index 29fade6..dbe6d52 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Bread.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Bread.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class Bread extends Food{ public void printName() { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Broom.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Broom.java similarity index 71% rename from src/main/java/com/shenyy/dp/abstractfactory/Broom.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Broom.java index e5afe89..95cf1aa 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Broom.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Broom.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class Broom extends Vehicle{ public void go() { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Car.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Car.java similarity index 70% rename from src/main/java/com/shenyy/dp/abstractfactory/Car.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Car.java index ccc8e10..5b747a0 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Car.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Car.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class Car extends Vehicle{ diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Food.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Food.java similarity index 55% rename from src/main/java/com/shenyy/dp/abstractfactory/Food.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Food.java index 327712a..e282939 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Food.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Food.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public abstract class Food { abstract void printName(); diff --git a/src/main/java/com/shenyy/dp/abstractfactory/MagicFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/MagicFactory.java similarity index 85% rename from src/main/java/com/shenyy/dp/abstractfactory/MagicFactory.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/MagicFactory.java index 3897dda..5d0a3ca 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/MagicFactory.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/MagicFactory.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class MagicFactory extends AbastractFactory { @Override diff --git a/src/main/java/com/shenyy/dp/abstractfactory/MagicStick.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/MagicStick.java similarity index 70% rename from src/main/java/com/shenyy/dp/abstractfactory/MagicStick.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/MagicStick.java index 5f3308a..5750f71 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/MagicStick.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/MagicStick.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class MagicStick extends Weapon{ public void shoot() { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Main.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Main.java similarity index 85% rename from src/main/java/com/shenyy/dp/abstractfactory/Main.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Main.java index 8358955..3eb453b 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Main.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Main.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/ModernFactory.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/ModernFactory.java similarity index 85% rename from src/main/java/com/shenyy/dp/abstractfactory/ModernFactory.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/ModernFactory.java index 0c7b84d..6aef57c 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/ModernFactory.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/ModernFactory.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class ModernFactory extends AbastractFactory { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/MushRoom.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/MushRoom.java similarity index 69% rename from src/main/java/com/shenyy/dp/abstractfactory/MushRoom.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/MushRoom.java index ad96fb2..b1695dd 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/MushRoom.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/MushRoom.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public class MushRoom extends Food{ public void printName() { diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Vehicle.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Vehicle.java similarity index 59% rename from src/main/java/com/shenyy/dp/abstractfactory/Vehicle.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Vehicle.java index c2b0200..420b7b0 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Vehicle.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Vehicle.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public abstract class Vehicle { //interface abstract void go(); diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Weapon.java b/src/main/java/com/shenyy/dp/abstractfactory/example02/Weapon.java similarity index 55% rename from src/main/java/com/shenyy/dp/abstractfactory/Weapon.java rename to src/main/java/com/shenyy/dp/abstractfactory/example02/Weapon.java index 46b7e84..b52ec2b 100644 --- a/src/main/java/com/shenyy/dp/abstractfactory/Weapon.java +++ b/src/main/java/com/shenyy/dp/abstractfactory/example02/Weapon.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.abstractfactory; +package com.shenyy.dp.abstractfactory.example02; public abstract class Weapon { abstract void shoot(); diff --git a/src/main/java/com/shenyy/dp/factorymethod/Moveable.java b/src/main/java/com/shenyy/dp/factorymethod/Moveable.java deleted file mode 100644 index edbac6a..0000000 --- a/src/main/java/com/shenyy/dp/factorymethod/Moveable.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.shenyy.dp.factorymethod; - -public interface Moveable { - void go(); -} diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Cake.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Cake.java new file mode 100644 index 0000000..0fb1428 --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Cake.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.factorymethod.chatGPT; + +public class Cake extends Dessert { + @Override + void make() { + System.out.println("Making a cake"); + } +} diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Dessert.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Dessert.java new file mode 100644 index 0000000..7cada1b --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Dessert.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.factorymethod.chatGPT; + +public abstract class Dessert { + abstract void make(); +} diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/DessertFactory.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/DessertFactory.java new file mode 100644 index 0000000..087e46e --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/DessertFactory.java @@ -0,0 +1,17 @@ +package com.shenyy.dp.factorymethod.chatGPT; + +public class DessertFactory { + Dessert getDessert(String dessertType) { + if (dessertType == null) { + return null; + } + if (dessertType.equalsIgnoreCase("CAKE")) { + return new Cake(); + } else if (dessertType.equalsIgnoreCase("PIE")) { + return new Pie(); + } else if (dessertType.equalsIgnoreCase("ICECREAM")) { + return new IceCream(); + } + return null; + } +} diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java new file mode 100644 index 0000000..df5e6f6 --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.factorymethod.chatGPT; + +public class FactoryMethodExample { + public static void main(String[] args) { + Dessert dessert = new DessertFactory().getDessert("Cake"); + dessert.make(); + } +} diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/IceCream.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/IceCream.java new file mode 100644 index 0000000..ba81d77 --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/IceCream.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.factorymethod.chatGPT; + +public class IceCream extends Dessert { + @Override + void make() { + System.out.println("Making an ice cream"); + } +} diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Pie.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Pie.java new file mode 100644 index 0000000..1a00eca --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/Pie.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.factorymethod.chatGPT; + +public class Pie extends Dessert { + @Override + void make() { + System.out.println("Making a pie"); + } +} diff --git "a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/\345\267\245\345\216\202\346\226\271\346\263\225\346\250\241\345\274\217\347\244\272\344\276\213.md" "b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/\345\267\245\345\216\202\346\226\271\346\263\225\346\250\241\345\274\217\347\244\272\344\276\213.md" new file mode 100644 index 0000000..0121314 --- /dev/null +++ "b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/\345\267\245\345\216\202\346\226\271\346\263\225\346\250\241\345\274\217\347\244\272\344\276\213.md" @@ -0,0 +1,8 @@ +##工厂方法模式示例 +假设您有一家甜点店,您可以使用工厂方法模式来处理制作不同类型的甜点。 + +首先,创建一个抽象甜点类,名为Dessert,它包含了制作甜点的抽象方法。 + +然后,创建多个具体的甜点类,如Cake,Pie和IceCream,它们继承了Dessert类并实现了制作甜点的方法。 + +最后,创建一个工厂类,名为DessertFactory,它包含了制作甜点的工厂方法。该方法将返回抽象甜点类的具体实现。 \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/factorymethod/Broom.java b/src/main/java/com/shenyy/dp/factorymethod/example01/Broom.java similarity index 76% rename from src/main/java/com/shenyy/dp/factorymethod/Broom.java rename to src/main/java/com/shenyy/dp/factorymethod/example01/Broom.java index aa56f02..b9a1e72 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/Broom.java +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/Broom.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.factorymethod; +package com.shenyy.dp.factorymethod.example01; public class Broom implements Moveable{ diff --git a/src/main/java/com/shenyy/dp/factorymethod/Car.java b/src/main/java/com/shenyy/dp/factorymethod/example01/Car.java similarity index 72% rename from src/main/java/com/shenyy/dp/factorymethod/Car.java rename to src/main/java/com/shenyy/dp/factorymethod/example01/Car.java index f1d4898..999b5b7 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/Car.java +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/Car.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.factorymethod; +package com.shenyy.dp.factorymethod.example01; public class Car implements Moveable { diff --git a/src/main/java/com/shenyy/dp/factorymethod/CarFactory.java b/src/main/java/com/shenyy/dp/factorymethod/example01/CarFactory.java similarity index 74% rename from src/main/java/com/shenyy/dp/factorymethod/CarFactory.java rename to src/main/java/com/shenyy/dp/factorymethod/example01/CarFactory.java index fd4b879..2c19d26 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/CarFactory.java +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/CarFactory.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.factorymethod; +package com.shenyy.dp.factorymethod.example01; public class CarFactory { public Moveable create() { diff --git a/src/main/java/com/shenyy/dp/factorymethod/Main.java b/src/main/java/com/shenyy/dp/factorymethod/example01/Main.java similarity index 74% rename from src/main/java/com/shenyy/dp/factorymethod/Main.java rename to src/main/java/com/shenyy/dp/factorymethod/example01/Main.java index f877fce..0dcd677 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/Main.java +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/Main.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.factorymethod; +package com.shenyy.dp.factorymethod.example01; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/shenyy/dp/factorymethod/example01/Moveable.java b/src/main/java/com/shenyy/dp/factorymethod/example01/Moveable.java new file mode 100644 index 0000000..9b1340f --- /dev/null +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/Moveable.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.factorymethod.example01; + +public interface Moveable { + void go(); +} diff --git a/src/main/java/com/shenyy/dp/factorymethod/Plane.java b/src/main/java/com/shenyy/dp/factorymethod/example01/Plane.java similarity index 73% rename from src/main/java/com/shenyy/dp/factorymethod/Plane.java rename to src/main/java/com/shenyy/dp/factorymethod/example01/Plane.java index 94e0055..29d9000 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/Plane.java +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/Plane.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.factorymethod; +package com.shenyy.dp.factorymethod.example01; public class Plane implements Moveable { public void go() { diff --git a/src/main/java/com/shenyy/dp/factorymethod/SimpleVehicleFactory.java b/src/main/java/com/shenyy/dp/factorymethod/example01/SimpleVehicleFactory.java similarity index 70% rename from src/main/java/com/shenyy/dp/factorymethod/SimpleVehicleFactory.java rename to src/main/java/com/shenyy/dp/factorymethod/example01/SimpleVehicleFactory.java index 9e4e3ca..012d5ca 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/SimpleVehicleFactory.java +++ b/src/main/java/com/shenyy/dp/factorymethod/example01/SimpleVehicleFactory.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.factorymethod; +package com.shenyy.dp.factorymethod.example01; /** * 简单工厂的可扩展性不好 @@ -12,4 +12,6 @@ public Car createCar() { public Broom createBroom() { return new Broom(); } + + public Plane createPlane() {return new Plane();} } From d6a6112681de5af1e4836b5fe58a11ae7ba7d0da Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 2 Feb 2023 18:09:41 +0800 Subject: [PATCH 08/37] =?UTF-8?q?=E5=B7=A5=E5=8E=82=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java index df5e6f6..cf4385f 100644 --- a/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java +++ b/src/main/java/com/shenyy/dp/factorymethod/chatGPT/FactoryMethodExample.java @@ -4,5 +4,7 @@ public class FactoryMethodExample { public static void main(String[] args) { Dessert dessert = new DessertFactory().getDessert("Cake"); dessert.make(); + Dessert dessert1 = new DessertFactory().getDessert("Pie"); + dessert1.make(); } } From ea4d62534456d122f7aaa0f6b2dbdfd6be7bcc0c Mon Sep 17 00:00:00 2001 From: shenyy Date: Mon, 6 Feb 2023 16:44:06 +0800 Subject: [PATCH 09/37] prototype pattern demo --- .../prototype/chatgpt/ConcretePrototypeA.java | 22 +++++++++++++++++++ .../prototype/chatgpt/ConcretePrototypeB.java | 14 ++++++++++++ .../dp/prototype/chatgpt/Description.md | 3 +++ .../dp/prototype/chatgpt/Prototype.java | 8 +++++++ .../prototype/chatgpt/PrototypeExample.java | 16 ++++++++++++++ 5 files changed, 63 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeA.java create mode 100644 src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeB.java create mode 100644 src/main/java/com/shenyy/dp/prototype/chatgpt/Description.md create mode 100644 src/main/java/com/shenyy/dp/prototype/chatgpt/Prototype.java create mode 100644 src/main/java/com/shenyy/dp/prototype/chatgpt/PrototypeExample.java diff --git a/src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeA.java b/src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeA.java new file mode 100644 index 0000000..be692dc --- /dev/null +++ b/src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeA.java @@ -0,0 +1,22 @@ +package com.shenyy.dp.prototype.chatgpt; + +public class ConcretePrototypeA extends Prototype { + private String fieldA; + + public String getFieldA() { + return fieldA; + } + + public void setFieldA(String fieldA) { + this.fieldA = fieldA; + } + + public ConcretePrototypeA(String fieldA) { + this.fieldA = fieldA; + } + + @Override + public Prototype clone() { + return new ConcretePrototypeA(fieldA); + } +} diff --git a/src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeB.java b/src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeB.java new file mode 100644 index 0000000..94e81cf --- /dev/null +++ b/src/main/java/com/shenyy/dp/prototype/chatgpt/ConcretePrototypeB.java @@ -0,0 +1,14 @@ +package com.shenyy.dp.prototype.chatgpt; + +public class ConcretePrototypeB extends Prototype { + private int fieldB; + + public ConcretePrototypeB(int fieldB) { + this.fieldB = fieldB; + } + + @Override + public Prototype clone() { + return new ConcretePrototypeB(fieldB); + } +} diff --git a/src/main/java/com/shenyy/dp/prototype/chatgpt/Description.md b/src/main/java/com/shenyy/dp/prototype/chatgpt/Description.md new file mode 100644 index 0000000..fe6a1d7 --- /dev/null +++ b/src/main/java/com/shenyy/dp/prototype/chatgpt/Description.md @@ -0,0 +1,3 @@ +##Prototype + +Prototype pattern is a creational design pattern in software development that is used to instantiate a new object by copying all of the properties of an existing object, creating a distinct object with the same properties. This approach can be faster than creating a new object from scratch and can also be used to implement a deep copy, meaning all the objects referenced within the new object are also copied. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/prototype/chatgpt/Prototype.java b/src/main/java/com/shenyy/dp/prototype/chatgpt/Prototype.java new file mode 100644 index 0000000..876ee91 --- /dev/null +++ b/src/main/java/com/shenyy/dp/prototype/chatgpt/Prototype.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.prototype.chatgpt; + +public abstract class Prototype { + public Prototype() { + } + + public abstract Prototype clone(); +} diff --git a/src/main/java/com/shenyy/dp/prototype/chatgpt/PrototypeExample.java b/src/main/java/com/shenyy/dp/prototype/chatgpt/PrototypeExample.java new file mode 100644 index 0000000..8eb430a --- /dev/null +++ b/src/main/java/com/shenyy/dp/prototype/chatgpt/PrototypeExample.java @@ -0,0 +1,16 @@ +package com.shenyy.dp.prototype.chatgpt; + +public class PrototypeExample { + + private static Prototype prototype1; + + public static void main(String[] args) { + Prototype prototype; + prototype = new ConcretePrototypeA("germination"); + System.out.println(prototype); + + Prototype prototype1 = prototype.clone(); + System.out.println(prototype); + System.out.println(prototype1); + } +} From 70c364ae05069c7518972fda7e37d5f3c4dcd6b1 Mon Sep 17 00:00:00 2001 From: shenyy Date: Mon, 6 Feb 2023 16:44:22 +0800 Subject: [PATCH 10/37] singleton pattern demo --- .../dp/singleton/chatgpt/Description.md | 5 ++++ .../dp/singleton/chatgpt/Singleton.java | 24 +++++++++++++++++++ .../singleton/chatgpt/SingletonExample.java | 15 ++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/singleton/chatgpt/Description.md create mode 100644 src/main/java/com/shenyy/dp/singleton/chatgpt/Singleton.java create mode 100644 src/main/java/com/shenyy/dp/singleton/chatgpt/SingletonExample.java diff --git a/src/main/java/com/shenyy/dp/singleton/chatgpt/Description.md b/src/main/java/com/shenyy/dp/singleton/chatgpt/Description.md new file mode 100644 index 0000000..eb33cba --- /dev/null +++ b/src/main/java/com/shenyy/dp/singleton/chatgpt/Description.md @@ -0,0 +1,5 @@ +##Singleton + +Singleton pattern is a creational design pattern in software development that restricts a class to have only one instance and provides a global point of access to that instance. This ensures that the class only has one instance across the entire application, making it easy to manage and maintain the state of the object. + +In this example, the Singleton class has a private constructor to prevent external classes from creating multiple instances of the class. The getInstance method is used to access the singleton instance and creates the instance if it doesn't exist. The method is also synchronized to ensure that it is thread-safe. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/singleton/chatgpt/Singleton.java b/src/main/java/com/shenyy/dp/singleton/chatgpt/Singleton.java new file mode 100644 index 0000000..1a5df37 --- /dev/null +++ b/src/main/java/com/shenyy/dp/singleton/chatgpt/Singleton.java @@ -0,0 +1,24 @@ +package com.shenyy.dp.singleton.chatgpt; + +public class Singleton { + private String windowName; + + public String getWindowName() { + return windowName; + } + + public void setWindowName(String windowName) { + this.windowName = windowName; + } + + private static Singleton instance; + + private Singleton() {} + + public static synchronized Singleton getInstance(){ + if(instance == null){ + instance = new Singleton(); + } + return instance; + } +} diff --git a/src/main/java/com/shenyy/dp/singleton/chatgpt/SingletonExample.java b/src/main/java/com/shenyy/dp/singleton/chatgpt/SingletonExample.java new file mode 100644 index 0000000..596e24e --- /dev/null +++ b/src/main/java/com/shenyy/dp/singleton/chatgpt/SingletonExample.java @@ -0,0 +1,15 @@ +package com.shenyy.dp.singleton.chatgpt; + +public class SingletonExample { + public static void main(String[] args) { + Singleton singleton = Singleton.getInstance(); + Singleton.getInstance(); + singleton.setWindowName("window"); + System.out.println(singleton); + + Singleton singleton1 = Singleton.getInstance(); + singleton1.setWindowName("new window"); + System.out.println(singleton.getWindowName()); + System.out.println(singleton1.getWindowName()); + } +} From 4660b8126b7bdec323b6b820ebcfa7d278188592 Mon Sep 17 00:00:00 2001 From: shenyy Date: Mon, 6 Feb 2023 16:44:39 +0800 Subject: [PATCH 11/37] builder pattern demo --- ...15\345\217\212\347\244\272\344\276\213.md" | 5 ++ .../dp/builder/chatGPT/BuilderExample.java | 15 +++++ .../com/shenyy/dp/builder/chatGPT/Burger.java | 55 +++++++++++++++++++ .../ComplexTerrainBuilder.java | 2 +- .../dp/builder/{ => example01}/Main.java | 2 +- .../dp/builder/{ => example01}/Person.java | 2 +- .../dp/builder/{ => example01}/Terrain.java | 2 +- .../{ => example01}/TerrainBuilder.java | 2 +- 8 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 "src/main/java/com/shenyy/dp/builder/chatGPT/ \346\236\204\345\273\272\346\250\241\345\274\217\344\273\213\347\273\215\345\217\212\347\244\272\344\276\213.md" create mode 100644 src/main/java/com/shenyy/dp/builder/chatGPT/BuilderExample.java create mode 100644 src/main/java/com/shenyy/dp/builder/chatGPT/Burger.java rename src/main/java/com/shenyy/dp/builder/{ => example01}/ComplexTerrainBuilder.java (93%) rename src/main/java/com/shenyy/dp/builder/{ => example01}/Main.java (92%) rename src/main/java/com/shenyy/dp/builder/{ => example01}/Person.java (96%) rename src/main/java/com/shenyy/dp/builder/{ => example01}/Terrain.java (93%) rename src/main/java/com/shenyy/dp/builder/{ => example01}/TerrainBuilder.java (78%) diff --git "a/src/main/java/com/shenyy/dp/builder/chatGPT/ \346\236\204\345\273\272\346\250\241\345\274\217\344\273\213\347\273\215\345\217\212\347\244\272\344\276\213.md" "b/src/main/java/com/shenyy/dp/builder/chatGPT/ \346\236\204\345\273\272\346\250\241\345\274\217\344\273\213\347\273\215\345\217\212\347\244\272\344\276\213.md" new file mode 100644 index 0000000..d275355 --- /dev/null +++ "b/src/main/java/com/shenyy/dp/builder/chatGPT/ \346\236\204\345\273\272\346\250\241\345\274\217\344\273\213\347\273\215\345\217\212\347\244\272\344\276\213.md" @@ -0,0 +1,5 @@ +##构建模式介绍及示例 + +Builder pattern is a creational design pattern that allows constructing complex objects step by step. The pattern involves a builder object that is used to define the types and amounts of ingredients to be used in a product (such as a burger). + +For example, consider a burger restaurant that offers different types of burgers with different ingredients. To build a burger, you may use the following code \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/builder/chatGPT/BuilderExample.java b/src/main/java/com/shenyy/dp/builder/chatGPT/BuilderExample.java new file mode 100644 index 0000000..97908a9 --- /dev/null +++ b/src/main/java/com/shenyy/dp/builder/chatGPT/BuilderExample.java @@ -0,0 +1,15 @@ +package com.shenyy.dp.builder.chatGPT; + +public class BuilderExample { + public static void main(String[] args) { + Burger burger = new Burger.Builder() + .meat("chicken") + .bread("wheat") + .cheese("cheese") + .sauce("BBQ") + .vegetables(new String[]{"tomato", "onion"}) + .build(); + + System.out.println(burger); + } +} diff --git a/src/main/java/com/shenyy/dp/builder/chatGPT/Burger.java b/src/main/java/com/shenyy/dp/builder/chatGPT/Burger.java new file mode 100644 index 0000000..ee6fb0c --- /dev/null +++ b/src/main/java/com/shenyy/dp/builder/chatGPT/Burger.java @@ -0,0 +1,55 @@ +package com.shenyy.dp.builder.chatGPT; + +public class Burger { + private String bread; + private String meat; + private String sauce; + private String cheese; + private String vegetables[]; + + public Burger(Builder builder) { + this.bread = builder.bread; + this.meat = builder.meat; + this.sauce = builder.sauce; + this.cheese = builder.cheese; + this.vegetables = builder.vegetables; + } + + public static class Builder { + private String bread; + private String meat; + private String sauce; + private String cheese; + private String vegetables[]; + + public Builder bread(String bread) { + this.bread = bread; + return this; + } + + public Builder meat(String meat) { + this.meat = meat; + return this; + } + + public Builder sauce(String sauce) { + this.sauce = sauce; + return this; + } + + public Builder cheese(String cheese) { + this.cheese = cheese; + return this; + } + + public Builder vegetables(String[] vegetables) { + this.vegetables = vegetables; + return this; + } + + public Burger build() { + return new Burger(this); + } + } + +} diff --git a/src/main/java/com/shenyy/dp/builder/ComplexTerrainBuilder.java b/src/main/java/com/shenyy/dp/builder/example01/ComplexTerrainBuilder.java similarity index 93% rename from src/main/java/com/shenyy/dp/builder/ComplexTerrainBuilder.java rename to src/main/java/com/shenyy/dp/builder/example01/ComplexTerrainBuilder.java index a7f9a8a..d364dd7 100644 --- a/src/main/java/com/shenyy/dp/builder/ComplexTerrainBuilder.java +++ b/src/main/java/com/shenyy/dp/builder/example01/ComplexTerrainBuilder.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.builder; +package com.shenyy.dp.builder.example01; public class ComplexTerrainBuilder implements TerrainBuilder { Terrain terrain = new Terrain(); diff --git a/src/main/java/com/shenyy/dp/builder/Main.java b/src/main/java/com/shenyy/dp/builder/example01/Main.java similarity index 92% rename from src/main/java/com/shenyy/dp/builder/Main.java rename to src/main/java/com/shenyy/dp/builder/example01/Main.java index 25039c9..2f9020c 100644 --- a/src/main/java/com/shenyy/dp/builder/Main.java +++ b/src/main/java/com/shenyy/dp/builder/example01/Main.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.builder; +package com.shenyy.dp.builder.example01; public class Main { public static void main(String[] args) { diff --git a/src/main/java/com/shenyy/dp/builder/Person.java b/src/main/java/com/shenyy/dp/builder/example01/Person.java similarity index 96% rename from src/main/java/com/shenyy/dp/builder/Person.java rename to src/main/java/com/shenyy/dp/builder/example01/Person.java index 8d583a0..10cab1c 100644 --- a/src/main/java/com/shenyy/dp/builder/Person.java +++ b/src/main/java/com/shenyy/dp/builder/example01/Person.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.builder; +package com.shenyy.dp.builder.example01; public class Person { int id; diff --git a/src/main/java/com/shenyy/dp/builder/Terrain.java b/src/main/java/com/shenyy/dp/builder/example01/Terrain.java similarity index 93% rename from src/main/java/com/shenyy/dp/builder/Terrain.java rename to src/main/java/com/shenyy/dp/builder/example01/Terrain.java index 39a7dc4..26a64f8 100644 --- a/src/main/java/com/shenyy/dp/builder/Terrain.java +++ b/src/main/java/com/shenyy/dp/builder/example01/Terrain.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.builder; +package com.shenyy.dp.builder.example01; public class Terrain { Wall w; diff --git a/src/main/java/com/shenyy/dp/builder/TerrainBuilder.java b/src/main/java/com/shenyy/dp/builder/example01/TerrainBuilder.java similarity index 78% rename from src/main/java/com/shenyy/dp/builder/TerrainBuilder.java rename to src/main/java/com/shenyy/dp/builder/example01/TerrainBuilder.java index 080e902..d021393 100644 --- a/src/main/java/com/shenyy/dp/builder/TerrainBuilder.java +++ b/src/main/java/com/shenyy/dp/builder/example01/TerrainBuilder.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.builder; +package com.shenyy.dp.builder.example01; public interface TerrainBuilder { TerrainBuilder buildWall(); From 33b3f9488a4da665b2d441ad71cfdaa9586ae21f Mon Sep 17 00:00:00 2001 From: shenyy Date: Mon, 6 Feb 2023 16:44:54 +0800 Subject: [PATCH 12/37] adapter pattern demo --- .../shenyy/dp/adapter/chatgpt/Adaptee.java | 7 +++++++ .../shenyy/dp/adapter/chatgpt/Adapter.java | 14 ++++++++++++++ .../dp/adapter/chatgpt/AdapterExample.java | 10 ++++++++++ .../shenyy/dp/adapter/chatgpt/Description.md | 5 +++++ .../com/shenyy/dp/adapter/chatgpt/Target.java | 5 +++++ .../dp/adapter/exercise/ApiAdapter.java | 19 +++++++++++++++++++ .../shenyy/dp/adapter/exercise/TargetApi.java | 5 +++++ .../shenyy/dp/adapter/exercise/UserApi.java | 7 +++++++ 8 files changed, 72 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/adapter/chatgpt/Adaptee.java create mode 100644 src/main/java/com/shenyy/dp/adapter/chatgpt/Adapter.java create mode 100644 src/main/java/com/shenyy/dp/adapter/chatgpt/AdapterExample.java create mode 100644 src/main/java/com/shenyy/dp/adapter/chatgpt/Description.md create mode 100644 src/main/java/com/shenyy/dp/adapter/chatgpt/Target.java create mode 100644 src/main/java/com/shenyy/dp/adapter/exercise/ApiAdapter.java create mode 100644 src/main/java/com/shenyy/dp/adapter/exercise/TargetApi.java create mode 100644 src/main/java/com/shenyy/dp/adapter/exercise/UserApi.java diff --git a/src/main/java/com/shenyy/dp/adapter/chatgpt/Adaptee.java b/src/main/java/com/shenyy/dp/adapter/chatgpt/Adaptee.java new file mode 100644 index 0000000..85aa603 --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/chatgpt/Adaptee.java @@ -0,0 +1,7 @@ +package com.shenyy.dp.adapter.chatgpt; + +public class Adaptee { + public void specificRequest(){ + System.out.println("Specific Request"); + } +} diff --git a/src/main/java/com/shenyy/dp/adapter/chatgpt/Adapter.java b/src/main/java/com/shenyy/dp/adapter/chatgpt/Adapter.java new file mode 100644 index 0000000..ba9c0be --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/chatgpt/Adapter.java @@ -0,0 +1,14 @@ +package com.shenyy.dp.adapter.chatgpt; + +public class Adapter implements Target{ + private Adaptee adaptee; + + public Adapter(Adaptee adaptee) { + this.adaptee = adaptee; + } + + @Override + public void request() { + adaptee.specificRequest(); + } +} diff --git a/src/main/java/com/shenyy/dp/adapter/chatgpt/AdapterExample.java b/src/main/java/com/shenyy/dp/adapter/chatgpt/AdapterExample.java new file mode 100644 index 0000000..9dffa6f --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/chatgpt/AdapterExample.java @@ -0,0 +1,10 @@ +package com.shenyy.dp.adapter.chatgpt; + +public class AdapterExample { + public static void main(String[] args) { + Adaptee adaptee = new Adaptee(); + Target target = new Adapter(adaptee); + + target.request(); + } +} diff --git a/src/main/java/com/shenyy/dp/adapter/chatgpt/Description.md b/src/main/java/com/shenyy/dp/adapter/chatgpt/Description.md new file mode 100644 index 0000000..a5d85df --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/chatgpt/Description.md @@ -0,0 +1,5 @@ +##Description + +Adapter pattern is a structural design pattern in software development that allows two incompatible classes to work together by converting the interface of one class into an interface that the other class can understand. The adapter class acts as a bridge between two classes by converting the incoming request from the client into a format that the adapted class can understand, and vice versa. + +In this example, the Adaptee class has a specific request method that the client wants to use. The Target interface defines the request method that the client needs. The Adapter class implements the Target interface and has a reference to an instance of the Adaptee class. The Adapter class implements the request method by calling the specificRequest method of the Adaptee class, making it possible for the client to use the Adaptee class through the Target interface. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/adapter/chatgpt/Target.java b/src/main/java/com/shenyy/dp/adapter/chatgpt/Target.java new file mode 100644 index 0000000..2175abe --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/chatgpt/Target.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.adapter.chatgpt; + +public interface Target { + void request(); +} diff --git a/src/main/java/com/shenyy/dp/adapter/exercise/ApiAdapter.java b/src/main/java/com/shenyy/dp/adapter/exercise/ApiAdapter.java new file mode 100644 index 0000000..3754853 --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/exercise/ApiAdapter.java @@ -0,0 +1,19 @@ +package com.shenyy.dp.adapter.exercise; + +public class ApiAdapter implements TargetApi{ + public static void main(String[] args) { + TargetApi adapter = new ApiAdapter(new UserApi()); + adapter.postRequest(); + } + + UserApi userApi; + + public ApiAdapter(UserApi userApi) { + this.userApi = userApi; + } + + @Override + public void postRequest() { + userApi.getRequest(); + } +} diff --git a/src/main/java/com/shenyy/dp/adapter/exercise/TargetApi.java b/src/main/java/com/shenyy/dp/adapter/exercise/TargetApi.java new file mode 100644 index 0000000..189d98c --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/exercise/TargetApi.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.adapter.exercise; + +public interface TargetApi { + public void postRequest(); +} diff --git a/src/main/java/com/shenyy/dp/adapter/exercise/UserApi.java b/src/main/java/com/shenyy/dp/adapter/exercise/UserApi.java new file mode 100644 index 0000000..4d5e380 --- /dev/null +++ b/src/main/java/com/shenyy/dp/adapter/exercise/UserApi.java @@ -0,0 +1,7 @@ +package com.shenyy.dp.adapter.exercise; + +public class UserApi { + public void getRequest() { + System.out.println("Get Request"); + } +} From c17b20e1fae6347ca3323dd60bf591067a60f290 Mon Sep 17 00:00:00 2001 From: shenyy Date: Mon, 6 Feb 2023 18:00:19 +0800 Subject: [PATCH 13/37] Facade pattern demo --- .../com/shenyy/dp/facade/assets/facadeA.png | Bin 0 -> 36079 bytes .../shenyy/dp/facade/chatgpt/Description.md | 9 +++++ .../com/shenyy/dp/facade/chatgpt/Facade.java | 33 ++++++++++++++++++ .../com/shenyy/dp/facade/chatgpt/SystemA.java | 7 ++++ .../com/shenyy/dp/facade/chatgpt/SystemB.java | 7 ++++ .../com/shenyy/dp/facade/chatgpt/SystemC.java | 7 ++++ .../com/shenyy/dp/facade/exercise/Client.java | 10 ++++++ .../com/shenyy/dp/facade/exercise/Keeper.java | 9 +++++ .../com/shenyy/dp/facade/exercise/Menu.java | 9 +++++ .../dp/facade/exercise/NonVegRestaurant.java | 9 +++++ .../shenyy/dp/facade/exercise/Restaurant.java | 5 +++ .../dp/facade/exercise/RestaurantKeeper.java | 22 ++++++++++++ .../dp/facade/exercise/VegNonRestaurant.java | 9 +++++ .../dp/facade/exercise/VegRestaurant.java | 9 +++++ 14 files changed, 145 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/facade/assets/facadeA.png create mode 100644 src/main/java/com/shenyy/dp/facade/chatgpt/Description.md create mode 100644 src/main/java/com/shenyy/dp/facade/chatgpt/Facade.java create mode 100644 src/main/java/com/shenyy/dp/facade/chatgpt/SystemA.java create mode 100644 src/main/java/com/shenyy/dp/facade/chatgpt/SystemB.java create mode 100644 src/main/java/com/shenyy/dp/facade/chatgpt/SystemC.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/Client.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/Keeper.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/Menu.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/NonVegRestaurant.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/Restaurant.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/RestaurantKeeper.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/VegNonRestaurant.java create mode 100644 src/main/java/com/shenyy/dp/facade/exercise/VegRestaurant.java diff --git a/src/main/java/com/shenyy/dp/facade/assets/facadeA.png b/src/main/java/com/shenyy/dp/facade/assets/facadeA.png new file mode 100644 index 0000000000000000000000000000000000000000..e5914bf2b5f079882eaba08ac4889bc4962b4b74 GIT binary patch literal 36079 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%0AIa5lIe^W~g~#K$#a-NsPij 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 Z>*0Mg*J$=hGYbC6%PL>ZkuiAkzW_ztV*CIA literal 0 HcmV?d00001 diff --git a/src/main/java/com/shenyy/dp/facade/chatgpt/Description.md b/src/main/java/com/shenyy/dp/facade/chatgpt/Description.md new file mode 100644 index 0000000..fe510bd --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/chatgpt/Description.md @@ -0,0 +1,9 @@ +##Description + +The facade pattern is appropriate when you have a complex system that you want to expose to clients in a simplified way, or you want to make an external communication layer over an existing system which is incompatible with the system. Facade deals with interfaces, not implementation. Its purpose is to hide internal complexity behind a single interface that appears simple on the outside. + +In Java, the interface JDBC can be called a facade because, we as users or clients create connection using the “java.sql.Connection” interface, the implementation of which we are not concerned about. The implementation is left to the vendor of driver. Another good example can be the startup of a computer. When a computer starts up, it involves the work of cpu, memory, hard drive, etc. To make it easy to use for users, we can add a facade which wrap the complexity of the task, and provide one simple interface instead. Same goes for the Facade Design Pattern. It hides the complexities of the system and provides an interface to the client from where the client can access + +![facadeA](../assets/facadeA.png) + +This example shows a Facade class that provides a unified interface to a set of individual systems (SystemA, SystemB, and SystemC). The main method creates an instance of the Facade class and calls the methodA, methodB, and methodC methods, which in turn call the corresponding methods in the individual systems. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/facade/chatgpt/Facade.java b/src/main/java/com/shenyy/dp/facade/chatgpt/Facade.java new file mode 100644 index 0000000..76d8ad9 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/chatgpt/Facade.java @@ -0,0 +1,33 @@ +package com.shenyy.dp.facade.chatgpt; + +public class Facade { + public static void main(String[] args) { + Facade facade = new Facade(); + facade.methodA(); + facade.methodB(); + facade.methodC(); + } + + private SystemA systemA; + private SystemB systemB; + private SystemC systemC; + + public Facade() { + this.systemA = new SystemA(); + this.systemB = new SystemB(); + this.systemC = new SystemC(); + } + + public void methodA() { + systemA.methodA(); + } + + public void methodB() { + systemB.methodB(); + } + + public void methodC() { + systemC.methodC(); + } + +} diff --git a/src/main/java/com/shenyy/dp/facade/chatgpt/SystemA.java b/src/main/java/com/shenyy/dp/facade/chatgpt/SystemA.java new file mode 100644 index 0000000..a38798c --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/chatgpt/SystemA.java @@ -0,0 +1,7 @@ +package com.shenyy.dp.facade.chatgpt; + +public class SystemA { + public void methodA() { + System.out.println("Method A of System A is called"); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/chatgpt/SystemB.java b/src/main/java/com/shenyy/dp/facade/chatgpt/SystemB.java new file mode 100644 index 0000000..8818bf4 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/chatgpt/SystemB.java @@ -0,0 +1,7 @@ +package com.shenyy.dp.facade.chatgpt; + +public class SystemB { + public void methodB() { + System.out.println("Method B of System B is called"); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/chatgpt/SystemC.java b/src/main/java/com/shenyy/dp/facade/chatgpt/SystemC.java new file mode 100644 index 0000000..942f78b --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/chatgpt/SystemC.java @@ -0,0 +1,7 @@ +package com.shenyy.dp.facade.chatgpt; + +public class SystemC { + public void methodC() { + System.out.println("Method C of System C is called"); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/Client.java b/src/main/java/com/shenyy/dp/facade/exercise/Client.java new file mode 100644 index 0000000..697dcd6 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/Client.java @@ -0,0 +1,10 @@ +package com.shenyy.dp.facade.exercise; + +public class Client { + public static void main(String[] args) { + Keeper restaurantKeeper = new RestaurantKeeper(); + restaurantKeeper.getVegMenu(); + restaurantKeeper.getNonVegMenu(); + restaurantKeeper.getVegNonMenu(); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/Keeper.java b/src/main/java/com/shenyy/dp/facade/exercise/Keeper.java new file mode 100644 index 0000000..5bf6d04 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/Keeper.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.facade.exercise; + +public interface Keeper { + public Menu getVegMenu(); + + public Menu getNonVegMenu(); + + public Menu getVegNonMenu(); +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/Menu.java b/src/main/java/com/shenyy/dp/facade/exercise/Menu.java new file mode 100644 index 0000000..e85f096 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/Menu.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.facade.exercise; + +public class Menu { + private String content; + + public Menu(String content) { + this.content = content; + } +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/NonVegRestaurant.java b/src/main/java/com/shenyy/dp/facade/exercise/NonVegRestaurant.java new file mode 100644 index 0000000..cbebbb4 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/NonVegRestaurant.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.facade.exercise; + +public class NonVegRestaurant implements Restaurant{ + @Override + public Menu getMenu() { + System.out.println("NonVeg"); + return new Menu("NonVeg"); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/Restaurant.java b/src/main/java/com/shenyy/dp/facade/exercise/Restaurant.java new file mode 100644 index 0000000..e53a4e0 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/Restaurant.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.facade.exercise; + +public interface Restaurant { + public Menu getMenu(); +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/RestaurantKeeper.java b/src/main/java/com/shenyy/dp/facade/exercise/RestaurantKeeper.java new file mode 100644 index 0000000..dcd2102 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/RestaurantKeeper.java @@ -0,0 +1,22 @@ +package com.shenyy.dp.facade.exercise; + +public class RestaurantKeeper implements Keeper { + + @Override + public Menu getVegMenu() { + VegRestaurant vegRestaurant = new VegRestaurant(); + return vegRestaurant.getMenu(); + } + + @Override + public Menu getNonVegMenu() { + NonVegRestaurant nonVegRestaurant = new NonVegRestaurant(); + return nonVegRestaurant.getMenu(); + } + + @Override + public Menu getVegNonMenu() { + VegNonRestaurant vegNonRestaurant = new VegNonRestaurant(); + return vegNonRestaurant.getMenu(); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/VegNonRestaurant.java b/src/main/java/com/shenyy/dp/facade/exercise/VegNonRestaurant.java new file mode 100644 index 0000000..8b253d3 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/VegNonRestaurant.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.facade.exercise; + +public class VegNonRestaurant implements Restaurant { + @Override + public Menu getMenu() { + System.out.println("VegNon"); + return new Menu("VegNon"); + } +} diff --git a/src/main/java/com/shenyy/dp/facade/exercise/VegRestaurant.java b/src/main/java/com/shenyy/dp/facade/exercise/VegRestaurant.java new file mode 100644 index 0000000..c1841b5 --- /dev/null +++ b/src/main/java/com/shenyy/dp/facade/exercise/VegRestaurant.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.facade.exercise; + +public class VegRestaurant implements Restaurant{ + @Override + public Menu getMenu() { + System.out.println("Veg"); + return new Menu("Veg"); + } +} From 0e3422a71f88afd650d4c01adb88d08f2da91695 Mon Sep 17 00:00:00 2001 From: shenyy Date: Mon, 6 Feb 2023 18:40:30 +0800 Subject: [PATCH 14/37] Decorator pattern demo --- .../shenyy/dp/decorator/exercise/Bottom.java | 15 +++++++++++++++ .../decorator/exercise/DecoratorExample.java | 17 +++++++++++++++++ .../dp/decorator/exercise/GlassBottom.java | 12 ++++++++++++ .../dp/decorator/exercise/SteelBottom.java | 12 ++++++++++++ .../dp/decorator/exercise/ToppingA.java | 19 +++++++++++++++++++ .../dp/decorator/exercise/ToppingB.java | 19 +++++++++++++++++++ .../decorator/exercise/ToppingsDecorator.java | 5 +++++ 7 files changed, 99 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/Bottom.java create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/DecoratorExample.java create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/GlassBottom.java create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/SteelBottom.java create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/ToppingA.java create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/ToppingB.java create mode 100644 src/main/java/com/shenyy/dp/decorator/exercise/ToppingsDecorator.java diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/Bottom.java b/src/main/java/com/shenyy/dp/decorator/exercise/Bottom.java new file mode 100644 index 0000000..f426993 --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/Bottom.java @@ -0,0 +1,15 @@ +package com.shenyy.dp.decorator.exercise; + +public abstract class Bottom { + private String description = "Unknown bottom"; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public abstract int getCost(); +} diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/DecoratorExample.java b/src/main/java/com/shenyy/dp/decorator/exercise/DecoratorExample.java new file mode 100644 index 0000000..fb30617 --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/DecoratorExample.java @@ -0,0 +1,17 @@ +package com.shenyy.dp.decorator.exercise; + +public class DecoratorExample { + public static void main(String[] args) { + Bottom bottom = new SteelBottom(); + bottom = new ToppingA(bottom); + bottom = new ToppingB(bottom); + System.out.println(bottom.getDescription() + " Cost: " + bottom.getCost()); + + Bottom bottom1 = new GlassBottom(); + bottom1 = new ToppingB(bottom1); + bottom1 = new ToppingB(bottom1); + bottom1 = new ToppingB(bottom1); + bottom1 = new ToppingB(bottom1); + System.out.println(bottom1.getDescription() + " Cost: " + bottom1.getCost()); + } +} diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/GlassBottom.java b/src/main/java/com/shenyy/dp/decorator/exercise/GlassBottom.java new file mode 100644 index 0000000..d4200b4 --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/GlassBottom.java @@ -0,0 +1,12 @@ +package com.shenyy.dp.decorator.exercise; + +public class GlassBottom extends Bottom{ + @Override + public int getCost() { + return 200; + } + + public GlassBottom() { + setDescription("GlassBottom"); + } +} diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/SteelBottom.java b/src/main/java/com/shenyy/dp/decorator/exercise/SteelBottom.java new file mode 100644 index 0000000..becabbc --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/SteelBottom.java @@ -0,0 +1,12 @@ +package com.shenyy.dp.decorator.exercise; + +public class SteelBottom extends Bottom { + public SteelBottom() { + setDescription("SteelBottom"); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/ToppingA.java b/src/main/java/com/shenyy/dp/decorator/exercise/ToppingA.java new file mode 100644 index 0000000..1f64399 --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/ToppingA.java @@ -0,0 +1,19 @@ +package com.shenyy.dp.decorator.exercise; + +public class ToppingA extends ToppingsDecorator { + Bottom bottom; + + public ToppingA(Bottom bottom) { + this.bottom = bottom; + } + + @Override + public int getCost() { + return bottom.getCost() + 100; + } + + @Override + public String getDescription() { + return bottom.getDescription() + ", ToppingA"; + } +} diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/ToppingB.java b/src/main/java/com/shenyy/dp/decorator/exercise/ToppingB.java new file mode 100644 index 0000000..5f54f41 --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/ToppingB.java @@ -0,0 +1,19 @@ +package com.shenyy.dp.decorator.exercise; + +public class ToppingB extends ToppingsDecorator{ + Bottom bottom; + + public ToppingB(Bottom bottom) { + this.bottom = bottom; + } + + @Override + public int getCost() { + return bottom.getCost() + 50; + } + + @Override + public String getDescription() { + return bottom.getDescription() + ", ToppingB"; + } +} diff --git a/src/main/java/com/shenyy/dp/decorator/exercise/ToppingsDecorator.java b/src/main/java/com/shenyy/dp/decorator/exercise/ToppingsDecorator.java new file mode 100644 index 0000000..f01fe4c --- /dev/null +++ b/src/main/java/com/shenyy/dp/decorator/exercise/ToppingsDecorator.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.decorator.exercise; + +public abstract class ToppingsDecorator extends Bottom { + public abstract String getDescription(); +} From 9913c7c0b004e1921ad12a77db71c4b0145ccca6 Mon Sep 17 00:00:00 2001 From: shenyy Date: Tue, 7 Feb 2023 18:00:55 +0800 Subject: [PATCH 15/37] Decorator pattern demo --- src/main/java/com/shenyy/dp/decorator/{ => example}/Main.java | 2 +- src/main/java/com/shenyy/dp/decorator/{ => example}/readme | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/main/java/com/shenyy/dp/decorator/{ => example}/Main.java (91%) rename src/main/java/com/shenyy/dp/decorator/{ => example}/readme (100%) diff --git a/src/main/java/com/shenyy/dp/decorator/Main.java b/src/main/java/com/shenyy/dp/decorator/example/Main.java similarity index 91% rename from src/main/java/com/shenyy/dp/decorator/Main.java rename to src/main/java/com/shenyy/dp/decorator/example/Main.java index 53293d4..33157fa 100644 --- a/src/main/java/com/shenyy/dp/decorator/Main.java +++ b/src/main/java/com/shenyy/dp/decorator/example/Main.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.decorator; +package com.shenyy.dp.decorator.example; import java.io.*; diff --git a/src/main/java/com/shenyy/dp/decorator/readme b/src/main/java/com/shenyy/dp/decorator/example/readme similarity index 100% rename from src/main/java/com/shenyy/dp/decorator/readme rename to src/main/java/com/shenyy/dp/decorator/example/readme From d4adaa6edef19a17ad2213a50263588b8afe78d3 Mon Sep 17 00:00:00 2001 From: shenyy Date: Tue, 7 Feb 2023 18:01:19 +0800 Subject: [PATCH 16/37] Bridge pattern demo --- .../java/com/shenyy/dp/bridge/Description.md | 49 ++++++++++++++++++ .../shenyy/dp/bridge/assets/BridgeDesign3.png | Bin 0 -> 12600 bytes .../shenyy/dp/bridge/assets/Bridge_Design.png | Bin 0 -> 32640 bytes .../java/com/shenyy/dp/bridge/assets/im2.png | Bin 0 -> 22421 bytes .../dp/bridge/chatgpt/BridgeExample.java | 12 +++++ .../com/shenyy/dp/bridge/chatgpt/Circle.java | 14 +++++ .../com/shenyy/dp/bridge/chatgpt/Color.java | 5 ++ .../com/shenyy/dp/bridge/chatgpt/Green.java | 8 +++ .../com/shenyy/dp/bridge/chatgpt/Red.java | 8 +++ .../com/shenyy/dp/bridge/chatgpt/Shape.java | 11 ++++ .../shenyy/dp/bridge/chatgpt/Triangle.java | 13 +++++ .../shenyy/dp/bridge/exercise/Assemble.java | 8 +++ .../dp/bridge/exercise/BridgeExample.java | 8 +++ .../com/shenyy/dp/bridge/exercise/Car.java | 14 +++++ .../shenyy/dp/bridge/exercise/Produce.java | 8 +++ .../shenyy/dp/bridge/exercise/Vehicle.java | 13 +++++ .../shenyy/dp/bridge/exercise/Workshop.java | 5 ++ 17 files changed, 176 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/bridge/Description.md create mode 100644 src/main/java/com/shenyy/dp/bridge/assets/BridgeDesign3.png create mode 100644 src/main/java/com/shenyy/dp/bridge/assets/Bridge_Design.png create mode 100644 src/main/java/com/shenyy/dp/bridge/assets/im2.png create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/BridgeExample.java create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/Circle.java create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/Color.java create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/Green.java create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/Red.java create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/Shape.java create mode 100644 src/main/java/com/shenyy/dp/bridge/chatgpt/Triangle.java create mode 100644 src/main/java/com/shenyy/dp/bridge/exercise/Assemble.java create mode 100644 src/main/java/com/shenyy/dp/bridge/exercise/BridgeExample.java create mode 100644 src/main/java/com/shenyy/dp/bridge/exercise/Car.java create mode 100644 src/main/java/com/shenyy/dp/bridge/exercise/Produce.java create mode 100644 src/main/java/com/shenyy/dp/bridge/exercise/Vehicle.java create mode 100644 src/main/java/com/shenyy/dp/bridge/exercise/Workshop.java diff --git a/src/main/java/com/shenyy/dp/bridge/Description.md b/src/main/java/com/shenyy/dp/bridge/Description.md new file mode 100644 index 0000000..d404511 --- /dev/null +++ b/src/main/java/com/shenyy/dp/bridge/Description.md @@ -0,0 +1,49 @@ +##Description + +The Bridge design pattern allows you to separate the abstraction from the implementation. It is a structural design pattern. + +**There are 2 parts in Bridge design pattern :** + +1. Abstraction +2. Implementation + +This is a design mechanism that encapsulates an implementation class inside an interface class. + +* The bridge pattern allows the Abstraction, and the Implementation to be developed independently and the client code can access only the Abstraction part without being concerned about the Implementation part. +* The abstraction is an interface or abstract class, and the implementer is also an interface or abstract class. +* The abstraction contains a reference to the implementer. Children of the abstraction are referred to as refined abstractions, and children of the implementer are concrete implementers. Since we can change the reference to the implementer in the abstraction, we are able to change the abstraction’s implementer at run-time. Changes to the implementer do not affect client code. +* It increases the loose coupling between class abstraction, and it’s implementation. + +##UML Diagram of Bridge Design Pattern + +![](assets/Bridge_Design.png) + +##Elements of Bridge Design Pattern + +* **Abstraction** – core of the bridge design pattern and defines the crux. Contains a reference to the implementer. +* **Refined Abstraction** – Extends the abstraction takes the finer detail one level below. Hides the finer elements from implementers. +* **Implementer** – It defines the interface for implementation classes. This interface does not need to correspond directly to the abstraction interface and can be very different. Abstraction imp provides an implementation in terms of operations provided by the Implementer interface. +* **Concrete** Implementation – Implements the above implementer by providing the concrete implementation. + +##When we need bridge design pattern + +The Bridge pattern is an application of the old advice, “prefer composition over inheritance”. It becomes handy when you must subclass different times in ways that are orthogonal with one another. + +##Without Bridge Design Pattern + +But the above solution has a problem. If you want to change the Bus class, then you may end up changing ProduceBus and AssembleBus as well and if the change is workshop specific then you may need to change the Bike class as well. +![](assets/im2.png) + +##With Bridge Design Pattern + +You can solve the above problem by decoupling the Vehicle and Workshop interfaces in the below manner. +![](assets/BridgeDesign3.png) + +##Advantages +1. Bridge pattern decouple an abstraction from its implementation so that the two can vary independently. +2. It is used mainly for implementing platform independence features. +3. It adds one more method level redirection to achieve the objective. +4. Publish abstraction interface in a separate inheritance hierarchy, and put the implementation in its own inheritance hierarchy. +5. Use bridge pattern to run-time binding of the implementation. +6. Use bridge pattern to map orthogonal class hierarchies +7. Bridge is designed up-front to let the abstraction and the implementation vary independently. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/bridge/assets/BridgeDesign3.png b/src/main/java/com/shenyy/dp/bridge/assets/BridgeDesign3.png new file mode 100644 index 0000000000000000000000000000000000000000..04683f221d9afeffd0ec950207f5840e4c16c5ad GIT binary patch literal 12600 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/shenyy/dp/bridge/assets/Bridge_Design.png b/src/main/java/com/shenyy/dp/bridge/assets/Bridge_Design.png new file mode 100644 index 0000000000000000000000000000000000000000..483fc085db1dc97f95acd3954f430bfd6fb007bd GIT binary patch literal 32640 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 Date: Tue, 7 Feb 2023 18:05:20 +0800 Subject: [PATCH 17/37] Empty file added --- src/main/java/com/shenyy/dp/composite/Description.md | 0 src/main/java/com/shenyy/dp/composite/{ => example01}/Main.java | 2 +- src/main/java/com/shenyy/dp/flyweight/Description.md | 0 .../java/com/shenyy/dp/flyweight/{ => example}/BulletPool.java | 2 +- .../java/com/shenyy/dp/flyweight/{ => example}/TestString.java | 2 +- src/main/java/com/shenyy/dp/proxy/Description.md | 0 6 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/shenyy/dp/composite/Description.md rename src/main/java/com/shenyy/dp/composite/{ => example01}/Main.java (97%) create mode 100644 src/main/java/com/shenyy/dp/flyweight/Description.md rename src/main/java/com/shenyy/dp/flyweight/{ => example}/BulletPool.java (95%) rename src/main/java/com/shenyy/dp/flyweight/{ => example}/TestString.java (91%) create mode 100644 src/main/java/com/shenyy/dp/proxy/Description.md diff --git a/src/main/java/com/shenyy/dp/composite/Description.md b/src/main/java/com/shenyy/dp/composite/Description.md new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/shenyy/dp/composite/Main.java b/src/main/java/com/shenyy/dp/composite/example01/Main.java similarity index 97% rename from src/main/java/com/shenyy/dp/composite/Main.java rename to src/main/java/com/shenyy/dp/composite/example01/Main.java index 284ef21..ddcf9ca 100644 --- a/src/main/java/com/shenyy/dp/composite/Main.java +++ b/src/main/java/com/shenyy/dp/composite/example01/Main.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.composite; +package com.shenyy.dp.composite.example01; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shenyy/dp/flyweight/Description.md b/src/main/java/com/shenyy/dp/flyweight/Description.md new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/shenyy/dp/flyweight/BulletPool.java b/src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java similarity index 95% rename from src/main/java/com/shenyy/dp/flyweight/BulletPool.java rename to src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java index f1e5e15..885b45f 100644 --- a/src/main/java/com/shenyy/dp/flyweight/BulletPool.java +++ b/src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.flyweight; +package com.shenyy.dp.flyweight.example; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/shenyy/dp/flyweight/TestString.java b/src/main/java/com/shenyy/dp/flyweight/example/TestString.java similarity index 91% rename from src/main/java/com/shenyy/dp/flyweight/TestString.java rename to src/main/java/com/shenyy/dp/flyweight/example/TestString.java index aaed66d..e9fe433 100644 --- a/src/main/java/com/shenyy/dp/flyweight/TestString.java +++ b/src/main/java/com/shenyy/dp/flyweight/example/TestString.java @@ -1,4 +1,4 @@ -package com.shenyy.dp.flyweight; +package com.shenyy.dp.flyweight.example; public class TestString { public static void main(String[] args) { diff --git a/src/main/java/com/shenyy/dp/proxy/Description.md b/src/main/java/com/shenyy/dp/proxy/Description.md new file mode 100644 index 0000000..e69de29 From a12650e6a0d1858a240d23143b04014e1bc7ccfc Mon Sep 17 00:00:00 2001 From: shenyy Date: Wed, 8 Feb 2023 10:38:40 +0800 Subject: [PATCH 18/37] Abstract Factory exercise replace --- .../shenyy/dp/abstractfactory/Description.md | 11 +++++ .../assets/AbstractFactoryPattern-2.png | Bin 0 -> 46359 bytes .../dp/abstractfactory/exercise/Bottle.java | 10 ----- .../dp/abstractfactory/exercise/Cap.java | 10 ----- .../dp/abstractfactory/exercise/Drink.java | 10 ----- .../dp/abstractfactory/exercise/Factory.java | 21 ---------- .../abstractfactory/exercise/ListBottle.java | 8 ---- .../dp/abstractfactory/exercise/ListCap.java | 8 ---- .../abstractfactory/exercise/ListDrink.java | 8 ---- .../abstractfactory/exercise/ListFactory.java | 39 ------------------ .../dp/abstractfactory/exercise2/Car.java | 13 ++++++ .../abstractfactory/exercise2/CarFactory.java | 9 ++++ .../dp/abstractfactory/exercise2/CarType.java | 7 ++++ .../exercise2/ChinaFactory.java | 21 ++++++++++ .../exercise2/FactoryProducer.java | 13 ++++++ .../exercise2/IndiaFactory.java | 20 +++++++++ .../abstractfactory/exercise2/Location.java | 7 ++++ .../abstractfactory/exercise2/LuxuryCar.java | 12 ++++++ .../abstractfactory/exercise2/MicroCar.java | 12 ++++++ .../dp/abstractfactory/exercise2/MiniCar.java | 12 ++++++ 20 files changed, 137 insertions(+), 114 deletions(-) create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/Description.md create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/assets/AbstractFactoryPattern-2.png delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Bottle.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Cap.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Drink.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/Factory.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListBottle.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListCap.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListDrink.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise/ListFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/Car.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/CarFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/CarType.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/ChinaFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/FactoryProducer.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/IndiaFactory.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/Location.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/LuxuryCar.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/MicroCar.java create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/exercise2/MiniCar.java diff --git a/src/main/java/com/shenyy/dp/abstractfactory/Description.md b/src/main/java/com/shenyy/dp/abstractfactory/Description.md new file mode 100644 index 0000000..059f593 --- /dev/null +++ b/src/main/java/com/shenyy/dp/abstractfactory/Description.md @@ -0,0 +1,11 @@ +##Description + +Abstract Factory design pattern is one of the Creational pattern. Abstract Factory pattern is almost similar to Factory Pattern and is considered as another layer of abstraction over factory pattern. Abstract Factory patterns work around a super-factory which creates other factories. +Abstract factory pattern implementation provides us with a framework that allows us to create objects that follow a general pattern. So at runtime, the abstract factory is coupled with any desired concrete factory which can create objects of the desired type. + +![UML class diagram example](assets/AbstractFactoryPattern-2.png) + +* **AbstractFactory**: Declares an interface for operations that create abstract product objects. +* **ConcreteFactory**: Implements the operations declared in the AbstractFactory to create concrete product objects. +* **Product**: Defines a product object to be created by the corresponding concrete factory and implements the AbstractProduct interface. +* **Client**: Uses only interfaces declared by AbstractFactory and AbstractProduct classes. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/abstractfactory/assets/AbstractFactoryPattern-2.png b/src/main/java/com/shenyy/dp/abstractfactory/assets/AbstractFactoryPattern-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b9644e933326c8f4d0c1c590d352a9b2356db9 GIT binary patch literal 46359 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 Date: Wed, 8 Feb 2023 11:37:10 +0800 Subject: [PATCH 19/37] Composite pattern demo --- .../com/shenyy/dp/composite/Description.md | 37 ++++++++++++++++++ .../Composite-Design-Pattern-Diagram-1.png | Bin 0 -> 24243 bytes .../Composite-Design-Pattern-Diagram.png | Bin 0 -> 8696 bytes .../dp/composite/chatgpt/Component.java | 5 +++ .../dp/composite/chatgpt/Composite.java | 23 +++++++++++ .../composite/chatgpt/CompositeExample.java | 16 ++++++++ .../com/shenyy/dp/composite/chatgpt/Leaf.java | 14 +++++++ 7 files changed, 95 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/composite/assets/Composite-Design-Pattern-Diagram-1.png create mode 100644 src/main/java/com/shenyy/dp/composite/assets/Composite-Design-Pattern-Diagram.png create mode 100644 src/main/java/com/shenyy/dp/composite/chatgpt/Component.java create mode 100644 src/main/java/com/shenyy/dp/composite/chatgpt/Composite.java create mode 100644 src/main/java/com/shenyy/dp/composite/chatgpt/CompositeExample.java create mode 100644 src/main/java/com/shenyy/dp/composite/chatgpt/Leaf.java diff --git a/src/main/java/com/shenyy/dp/composite/Description.md b/src/main/java/com/shenyy/dp/composite/Description.md index e69de29..7fecaaf 100644 --- a/src/main/java/com/shenyy/dp/composite/Description.md +++ b/src/main/java/com/shenyy/dp/composite/Description.md @@ -0,0 +1,37 @@ +##Description + +Composite pattern is a partitioning design pattern and describes a group of objects that is treated the same way as a single instance of the same type of object. The intent of a composite is to “compose” objects into tree structures to represent part-whole hierarchies. It allows you to have a tree structure and ask each node in the tree structure to perform a task. + +* As described by Gof, “Compose objects into tree structure to represent part-whole hierarchies. Composite lets client treat individual objects and compositions of objects uniformly”. +* When dealing with Tree-structured data, programmers often have to discriminate between a leaf-node and a branch. This makes code more complex, and therefore, error prone. The solution is an interface that allows treating complex and primitive objects uniformly. +* In object-oriented programming, a composite is an object designed as a composition of one-or-more similar objects, all exhibiting similar functionality. This is known as a “has-a” relationship between objects. + +The key concept is that you can manipulate a single instance of the object just as you would manipulate a group of them. The operations you can perform on all the composite objects often have a least common denominator relationship. + +**The Composite Pattern has four participants:** + +1. Component – Component declares the interface for objects in the composition and for accessing and managing its child components. It also implements default behavior for the interface common to all classes as appropriate. +2. Leaf – Leaf defines behavior for primitive objects in the composition. It represents leaf objects in the composition. +3. Composite – Composite stores child components and implements child related operations in the component interface. +4. Client – Client manipulates the objects in the composition through the component interface. + +Client use the component class interface to interact with objects in the composition structure. If recipient is a leaf then request is handled directly. If recipient is a composite, then it usually forwards request to its child components, possibly performing additional operations before and after forwarding. + +In an organization, It have general managers and under general managers, there can be managers and under managers there can be developers. Now you can set a tree structure and ask each node to perform common operation like getSalary(). +Composite design pattern treats each node in two ways: +1) Composite – Composite means it can have other objects below it. +2) leaf – leaf means it has no objects below it. + +![Tree Structure](assets/Composite-Design-Pattern-Diagram.png) + +![UML Diagram](assets/Composite-Design-Pattern-Diagram-1.png) + +The above figure shows a typical Composite object structure. As you can see, there can be many children to a single parent i.e. Composite, but only one parent per child. + +##When to use Composite Design Pattern? + +Composite Pattern should be used when clients need to ignore the difference between compositions of objects and individual objects. If programmers find that they are using multiple objects in the same way, and often have nearly identical code to handle each of them, then composite is a good choice, it is less complex in this situation to treat primitives and composites as homogeneous. + +1. Less number of objects reduces the memory usage, and it manages to keep us away from errors related to memory like java.lang.OutOfMemoryError. +2. Although creating an object in Java is really fast, we can still reduce the execution time of our program by sharing objects. + diff --git a/src/main/java/com/shenyy/dp/composite/assets/Composite-Design-Pattern-Diagram-1.png b/src/main/java/com/shenyy/dp/composite/assets/Composite-Design-Pattern-Diagram-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0dc85a25b81f1f4cef440836754c212fc6c1317 GIT binary patch literal 24243 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 children = new ArrayList<>(); + + public void add(Component component) { + children.add(component); + } + + public void remove(Component component) { + children.remove(component); + } + + @Override + public void operation() { + for (Component child : children) { + child.operation(); + } + } +} diff --git a/src/main/java/com/shenyy/dp/composite/chatgpt/CompositeExample.java b/src/main/java/com/shenyy/dp/composite/chatgpt/CompositeExample.java new file mode 100644 index 0000000..5a80b17 --- /dev/null +++ b/src/main/java/com/shenyy/dp/composite/chatgpt/CompositeExample.java @@ -0,0 +1,16 @@ +package com.shenyy.dp.composite.chatgpt; + +public class CompositeExample { + public static void main(String[] args) { + Component leaf1 = new Leaf("leaf1"); + Component leaf2 = new Leaf("leaf2"); + Composite composite = new Composite(); + composite.add(leaf1); + composite.add(leaf2); + Composite composite1 = new Composite(); + composite1.add(composite); + Component leaf3 = new Leaf("leaf3"); + composite1.add(leaf3); + composite1.operation(); + } +} diff --git a/src/main/java/com/shenyy/dp/composite/chatgpt/Leaf.java b/src/main/java/com/shenyy/dp/composite/chatgpt/Leaf.java new file mode 100644 index 0000000..f880a70 --- /dev/null +++ b/src/main/java/com/shenyy/dp/composite/chatgpt/Leaf.java @@ -0,0 +1,14 @@ +package com.shenyy.dp.composite.chatgpt; + +public class Leaf implements Component { + private String name; + + public Leaf(String name) { + this.name = name; + } + + @Override + public void operation() { + System.out.println(name); + } +} From fe7807c5e0998e9ee2b45152b35cb0565fea6fe2 Mon Sep 17 00:00:00 2001 From: shenyy Date: Wed, 8 Feb 2023 14:17:00 +0800 Subject: [PATCH 20/37] Flyweight pattern demo --- .../java/com/shenyy/dp/flyweight/Description.md | 16 ++++++++++++++++ .../dp/flyweight/chatgpt/ConcreteFlyweight.java | 14 ++++++++++++++ .../shenyy/dp/flyweight/chatgpt/Flyweight.java | 5 +++++ .../dp/flyweight/chatgpt/FlyweightExample.java | 15 +++++++++++++++ .../dp/flyweight/chatgpt/FlyweightFactory.java | 15 +++++++++++++++ .../shenyy/dp/flyweight/example/BulletPool.java | 11 ++++++----- 6 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/shenyy/dp/flyweight/chatgpt/ConcreteFlyweight.java create mode 100644 src/main/java/com/shenyy/dp/flyweight/chatgpt/Flyweight.java create mode 100644 src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightExample.java create mode 100644 src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightFactory.java diff --git a/src/main/java/com/shenyy/dp/flyweight/Description.md b/src/main/java/com/shenyy/dp/flyweight/Description.md index e69de29..c878e48 100644 --- a/src/main/java/com/shenyy/dp/flyweight/Description.md +++ b/src/main/java/com/shenyy/dp/flyweight/Description.md @@ -0,0 +1,16 @@ +##Description + +Flyweight pattern is one of the structural design patterns as this pattern provides ways to decrease object count thus improving application required objects structure. Flyweight pattern is used when we need to create a large number of similar objects (say 10^5). One important feature of flyweight objects is that they are immutable. This means that they cannot be modified once they have been constructed. + +###Why do we care for number of objects in our program? +* Less number of objects reduces the memory usage, and it manages to keep us away from errors related to memory like java.lang.OutOfMemoryError. +* Although creating an object in Java is really fast, we can still reduce the execution time of our program by sharing objects. + +In Flyweight pattern we use a HashMap that stores reference to the object which have already been created, every object is associated with a key. Now when a client wants to create an object, he simply has to pass a key associated with it and if the object has already been created we simply get the reference to that object else it creates a new object and then returns it reference to the client. + +###Intrinsic and Extrinsic States +To understand Intrinsic and Extrinsic state, let us consider an example. + +Suppose in a text editor when we enter a character, an object of Character class is created, the attributes of the Character class are {name, font, size}. We do not need to create an object every time client enters a character since letter ‘B’ is no different from another ‘B’ . If client again types a ‘B’ we simply return the object which we have already created before. Now all these are intrinsic states (name, font, size), since they can be shared among the different objects as they are similar to each other. + +Now we add to more attributes to the Character class, they are row and column. They specify the position of a character in the document. Now these attributes will not be similar even for same characters, since no two characters will have the same position in a document, these states are termed as extrinsic states, and they can’t be shared among objects. diff --git a/src/main/java/com/shenyy/dp/flyweight/chatgpt/ConcreteFlyweight.java b/src/main/java/com/shenyy/dp/flyweight/chatgpt/ConcreteFlyweight.java new file mode 100644 index 0000000..c325fc3 --- /dev/null +++ b/src/main/java/com/shenyy/dp/flyweight/chatgpt/ConcreteFlyweight.java @@ -0,0 +1,14 @@ +package com.shenyy.dp.flyweight.chatgpt; + +public class ConcreteFlyweight implements Flyweight { + private int intrinsicState; + + public ConcreteFlyweight(int intrinsicState) { + this.intrinsicState = intrinsicState; + } + + @Override + public void operation(int extrinsicState) { + System.out.println("Intrinsic State: " + intrinsicState + " Extrinsic State: " + extrinsicState); + } +} diff --git a/src/main/java/com/shenyy/dp/flyweight/chatgpt/Flyweight.java b/src/main/java/com/shenyy/dp/flyweight/chatgpt/Flyweight.java new file mode 100644 index 0000000..d6fc298 --- /dev/null +++ b/src/main/java/com/shenyy/dp/flyweight/chatgpt/Flyweight.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.flyweight.chatgpt; + +public interface Flyweight { + void operation(int extrinsicState); +} diff --git a/src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightExample.java b/src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightExample.java new file mode 100644 index 0000000..512a4a3 --- /dev/null +++ b/src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightExample.java @@ -0,0 +1,15 @@ +package com.shenyy.dp.flyweight.chatgpt; + +public class FlyweightExample { + public static void main(String[] args) { + FlyweightFactory factory = new FlyweightFactory(); + Flyweight flyweight1 = factory.getFlyweight(1); + Flyweight flyweight2 = factory.getFlyweight(2); + Flyweight flyweight3 = factory.getFlyweight(1); + + flyweight1.operation(100); + flyweight2.operation(200); + flyweight3.operation(300); + System.out.println(""); + } +} diff --git a/src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightFactory.java b/src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightFactory.java new file mode 100644 index 0000000..879893f --- /dev/null +++ b/src/main/java/com/shenyy/dp/flyweight/chatgpt/FlyweightFactory.java @@ -0,0 +1,15 @@ +package com.shenyy.dp.flyweight.chatgpt; + +import java.util.HashMap; +import java.util.Map; + +public class FlyweightFactory { + private static Map flyweights = new HashMap<>(); + + Flyweight getFlyweight(int key) { + if (!flyweights.containsKey(key)) { + flyweights.put(key, new ConcreteFlyweight(key)); + } + return flyweights.get(key); + } +} diff --git a/src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java b/src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java index 885b45f..29c05d5 100644 --- a/src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java +++ b/src/main/java/com/shenyy/dp/flyweight/example/BulletPool.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.UUID; -class Bullet{ +class Bullet { public UUID id = UUID.randomUUID(); boolean living = true; @@ -18,14 +18,15 @@ public String toString() { public class BulletPool { List bullets = new ArrayList<>(); + { - for(int i=0; i<5; i++) bullets.add(new Bullet()); + for (int i = 0; i < 5; i++) bullets.add(new Bullet()); } public Bullet getBullet() { - for(int i=0; i Date: Wed, 8 Feb 2023 16:22:18 +0800 Subject: [PATCH 21/37] Proxy pattern demo --- .../java/com/shenyy/dp/proxy/Description.md | 29 ++++++++++++++++++ .../shenyy/dp/proxy/assets/UML_Diagram.jpg | Bin 0 -> 35503 bytes .../com/shenyy/dp/proxy/example/Client.java | 18 +++++++++++ .../com/shenyy/dp/proxy/example/Internet.java | 5 +++ .../dp/proxy/example/ProxyInternet.java | 24 +++++++++++++++ .../shenyy/dp/proxy/example/RealInternet.java | 8 +++++ 6 files changed, 84 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/proxy/assets/UML_Diagram.jpg create mode 100644 src/main/java/com/shenyy/dp/proxy/example/Client.java create mode 100644 src/main/java/com/shenyy/dp/proxy/example/Internet.java create mode 100644 src/main/java/com/shenyy/dp/proxy/example/ProxyInternet.java create mode 100644 src/main/java/com/shenyy/dp/proxy/example/RealInternet.java diff --git a/src/main/java/com/shenyy/dp/proxy/Description.md b/src/main/java/com/shenyy/dp/proxy/Description.md index e69de29..37b1a6f 100644 --- a/src/main/java/com/shenyy/dp/proxy/Description.md +++ b/src/main/java/com/shenyy/dp/proxy/Description.md @@ -0,0 +1,29 @@ +##Description + +Proxy means ‘in place of’, 'representing’ or ‘in place of’ or ‘on behalf of’ are literal meanings of proxy and that directly explains Proxy Design Pattern. +Proxies are also called surrogates, handles, and wrappers. They are closely related in structure, but not purpose, to Adapters and Decorators. + +A real world example can be a cheque or credit card is a proxy for what is in our bank account. It can be used in place of cash, and provides a means of accessing that cash when required. And that’s exactly what the Proxy pattern does – “Controls and manage access to the object they are protecting“. + +###Behavior +As in the decorator pattern, proxies can be chained together. The client and each proxy, believes it is delegating messages to the real server: + +![Example](assets/UML_Diagram.jpg) + +###When to use this pattern? +Proxy pattern is used when we need to create a wrapper to cover the main object’s complexity from the client. + +###Types of proxies +* ####Remote proxy: +They are responsible for representing the object located remotely. Talking to the real object might involve marshalling and unmarshalling of data and talking to the remote object. All that logic is encapsulated in these proxies and the client application need not worry about them. +* ####Virtual proxy: +These proxies will provide some default and instant results if the real object is supposed to take some time to produce results. These proxies initiate the operation on real objects and provide a default result to the application. Once the real object is done, these proxies push the actual data to the client where it has provided dummy data earlier. +* ####Protection proxy: +If an application does not have access to some resource then such proxies will talk to the objects in applications that have access to that resource and then get the result back. +* ####Smart Proxy: +A smart proxy provides additional layer of security by interposing specific actions when the object is accessed. An example can be to check if the real object is locked before it is accessed to ensure that no other object can change it. + +###
    Example
    +A very simple real life scenario is our college internet, which restricts few site access. The proxy first checks the host you are connecting to, if it is not part of restricted site list, then it connects to the real internet. This example is based on Protection proxies. + +see this example in the _'/example/...'_ diff --git a/src/main/java/com/shenyy/dp/proxy/assets/UML_Diagram.jpg b/src/main/java/com/shenyy/dp/proxy/assets/UML_Diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14dcd895796285dcfa9f772a3a7ee56f1cb4cc93 GIT binary patch literal 35503 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 z
    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�Rf@WJU(pJ#oGn$yFROWFU{Co$|hNS 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 Z6F(0b|MUIVA@qOR bannedSites = new ArrayList<>(); + + static { + bannedSites.add("facebook.com"); + bannedSites.add("google.com"); + } + + @Override + public void connectTo(String serverHost) throws Exception { + if (bannedSites.contains(serverHost)) { + throw new Exception("Access Denied"); + } + + internet.connectTo(serverHost); + } +} diff --git a/src/main/java/com/shenyy/dp/proxy/example/RealInternet.java b/src/main/java/com/shenyy/dp/proxy/example/RealInternet.java new file mode 100644 index 0000000..31c4151 --- /dev/null +++ b/src/main/java/com/shenyy/dp/proxy/example/RealInternet.java @@ -0,0 +1,8 @@ +package com.shenyy.dp.proxy.example; + +public class RealInternet implements Internet { + @Override + public void connectTo(String serverHost) throws Exception { + System.out.println("Connecting to " + serverHost); + } +} From 33e804fa48a7f94770c873b9bfcc52b28311c0ab Mon Sep 17 00:00:00 2001 From: shenyy Date: Wed, 8 Feb 2023 16:39:11 +0800 Subject: [PATCH 22/37] Change "groupId" to com.shenyy; change java8 to java11 --- DesignPatterns.iml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DesignPatterns.iml b/DesignPatterns.iml index 018b9cf..deb86e5 100644 --- a/DesignPatterns.iml +++ b/DesignPatterns.iml @@ -1,6 +1,6 @@ - + diff --git a/pom.xml b/pom.xml index 5833983..3769957 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - mashibing.com + com.shenyy DesignPatterns 1.0-SNAPSHOT From a3cafe09a1e16e1a947e6403911e5ab646ae5a5a Mon Sep 17 00:00:00 2001 From: shenyy Date: Wed, 8 Feb 2023 16:40:57 +0800 Subject: [PATCH 23/37] IDE --- .idea/compiler.xml | 4 +- .idea/uiDesigner.xml | 124 +++++++++++++ .idea/workspace.xml | 414 +++++++++++++++++++++++++++++++++---------- 3 files changed, 451 insertions(+), 91 deletions(-) create mode 100644 .idea/uiDesigner.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 19bfcd2..87074c8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -9,8 +9,8 @@ - - + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index d2db281..11c6de6 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,20 +4,33 @@ - - + + + + + + + + + + + + - - + + - + + @@ -209,21 +224,23 @@ + + + - - - + + + + + - - - @@ -231,39 +248,13 @@ - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3769957..c5e2916 100644 --- a/pom.xml +++ b/pom.xml @@ -37,8 +37,18 @@ asm-all 3.3.1 - - + + junit + junit + 4.12 + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + From 51d5e01410269e30c71ae2aefcb866fc3214a782 Mon Sep 17 00:00:00 2001 From: shenyy Date: Wed, 8 Feb 2023 17:40:53 +0800 Subject: [PATCH 25/37] Observer pattern demo --- .../com/shenyy/dp/observer/Description.md | 46 ++++++++++++++++++ .../java/com/shenyy/dp/observer/assets/o2.png | Bin 0 -> 21589 bytes .../chatgpt/CurrentConditionsDisplay.java | 22 +++++++++ .../shenyy/dp/observer/chatgpt/Observer.java | 5 ++ .../dp/observer/chatgpt/ObserverExample.java | 9 ++++ .../shenyy/dp/observer/chatgpt/Subject.java | 9 ++++ .../dp/observer/chatgpt/WeatherData.java | 44 +++++++++++++++++ 7 files changed, 135 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/observer/Description.md create mode 100644 src/main/java/com/shenyy/dp/observer/assets/o2.png create mode 100644 src/main/java/com/shenyy/dp/observer/chatgpt/CurrentConditionsDisplay.java create mode 100644 src/main/java/com/shenyy/dp/observer/chatgpt/Observer.java create mode 100644 src/main/java/com/shenyy/dp/observer/chatgpt/ObserverExample.java create mode 100644 src/main/java/com/shenyy/dp/observer/chatgpt/Subject.java create mode 100644 src/main/java/com/shenyy/dp/observer/chatgpt/WeatherData.java diff --git a/src/main/java/com/shenyy/dp/observer/Description.md b/src/main/java/com/shenyy/dp/observer/Description.md new file mode 100644 index 0000000..bfbe57c --- /dev/null +++ b/src/main/java/com/shenyy/dp/observer/Description.md @@ -0,0 +1,46 @@ +##Description +To understand observer pattern, first you need to understand the subject and observer objects. + +The relation between subject and observer can easily be understood as an analogy to magazine subscription. + +* A magazine publisher(subject) is in the business and publishes magazines (data). +* If you(user of data/observer) are interested in the magazine you subscribe(register), and if a new edition is published it gets delivered to you. +* If you unsubscribe(unregister) you stop getting new editions. +* Publisher doesn’t know who you are and how you use the magazine, it just delivers it to you because you are a subscriber(loose coupling). + +###Definition: +The Observer Pattern defines a one to many dependency between objects so that one object changes state, all of its dependents are notified and updated automatically. +###Explanation: +* One to many dependency is between Subject(One) and Observer(Many). +* There is dependency as Observers themselves don’t have access to data. They are dependent on Subject to provide them data. + +###Class diagram: +![UML diagram](assets/o2.png) + +* Here Observer and Subject are interfaces(can be any abstract super type not necessarily java interface). +* All observers who need the data need to implement observer interface. +* notify() method in observer interface defines the action to be taken when the subject provides it data. +* The subject maintains an observerCollection which is simply the list of currently registered(subscribed) observers. +* registerObserver(observer) and unregisterObserver(observer) are methods to add and remove observers respectively. +* notifyObservers() is called when the data is changed and the observers need to be supplied with new data. + +###Advantages: +Provides a loosely coupled design between objects that interact. Loosely coupled objects are flexible with changing requirements. Here loose coupling means that the interacting objects should have less information about each other. + +Observer pattern provides this loose coupling as: + +* Subject only knows that observer implement Observer interface.Nothing more. +* There is no need to modify Subject to add or remove observers. +* We can reuse subject and observer classes independently of each other. +###Disadvantages: + +* Memory leaks caused by Lapsed listener problem because of explicit register and unregistering of observers. + +###When to use this pattern? +You should consider using this pattern in your application when multiple objects are dependent on the state of one object as it provides a neat and well tested design for the same. + +###Real Life Uses: + +* It is heavily used in GUI toolkits and event listener. In java the button(subject) and onClickListener(observer) are modelled with observer pattern. +* Social media, RSS feeds, email subscription in which you have the option to follow or subscribe and you receive latest notification. +* All users of an app on play store gets notified if there is an update. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/observer/assets/o2.png b/src/main/java/com/shenyy/dp/observer/assets/o2.png new file mode 100644 index 0000000000000000000000000000000000000000..f88619698a7ccdf336c2e700ca9b9a5e6396e399 GIT binary patch literal 21589 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/shenyy/dp/observer/chatgpt/CurrentConditionsDisplay.java b/src/main/java/com/shenyy/dp/observer/chatgpt/CurrentConditionsDisplay.java new file mode 100644 index 0000000..fa466e0 --- /dev/null +++ b/src/main/java/com/shenyy/dp/observer/chatgpt/CurrentConditionsDisplay.java @@ -0,0 +1,22 @@ +package com.shenyy.dp.observer.chatgpt; + +public class CurrentConditionsDisplay implements Observer{ + private float temperature; + private float humidity; + private Subject weatherData; + + public CurrentConditionsDisplay(Subject weatherData) { + this.weatherData = weatherData; + weatherData.registerObserver(this); + } + + public void update(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + display(); + } + + public void display() { + System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity"); + } +} diff --git a/src/main/java/com/shenyy/dp/observer/chatgpt/Observer.java b/src/main/java/com/shenyy/dp/observer/chatgpt/Observer.java new file mode 100644 index 0000000..6be041a --- /dev/null +++ b/src/main/java/com/shenyy/dp/observer/chatgpt/Observer.java @@ -0,0 +1,5 @@ +package com.shenyy.dp.observer.chatgpt; + +public interface Observer { + public void update(float temp, float humidity, float pressure); +} diff --git a/src/main/java/com/shenyy/dp/observer/chatgpt/ObserverExample.java b/src/main/java/com/shenyy/dp/observer/chatgpt/ObserverExample.java new file mode 100644 index 0000000..1dd7a6c --- /dev/null +++ b/src/main/java/com/shenyy/dp/observer/chatgpt/ObserverExample.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.observer.chatgpt; + +public class ObserverExample { + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData); + weatherData.setMeasurements(80, 65, 30.4f); + } +} diff --git a/src/main/java/com/shenyy/dp/observer/chatgpt/Subject.java b/src/main/java/com/shenyy/dp/observer/chatgpt/Subject.java new file mode 100644 index 0000000..4ed830d --- /dev/null +++ b/src/main/java/com/shenyy/dp/observer/chatgpt/Subject.java @@ -0,0 +1,9 @@ +package com.shenyy.dp.observer.chatgpt; + +public interface Subject { + void registerObserver(Observer o); + + void removeObserver(Observer o); + + void notifyObservers(); +} diff --git a/src/main/java/com/shenyy/dp/observer/chatgpt/WeatherData.java b/src/main/java/com/shenyy/dp/observer/chatgpt/WeatherData.java new file mode 100644 index 0000000..a069f86 --- /dev/null +++ b/src/main/java/com/shenyy/dp/observer/chatgpt/WeatherData.java @@ -0,0 +1,44 @@ +package com.shenyy.dp.observer.chatgpt; + +import java.util.ArrayList; +import java.util.List; + +public class WeatherData implements Subject { + private List observers; + private float temperature; + private float humidity; + private float pressure; + + public WeatherData() { + observers = new ArrayList<>(); + } + + @Override + public void registerObserver(Observer o) { + observers.add(o); + } + + @Override + public void removeObserver(Observer o) { + observers.remove(o); + } + + @Override + public void notifyObservers() { + for (Observer observer : + observers) { + observer.update(temperature, humidity, pressure); + } + } + + public void measurementsChanged() { + notifyObservers(); + } + + public void setMeasurements(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + measurementsChanged(); + } +} From c7364d2a4bb0d0348c9c2a9adce70724f20b8eb2 Mon Sep 17 00:00:00 2001 From: shenyy Date: Thu, 9 Feb 2023 17:14:22 +0800 Subject: [PATCH 26/37] State pattern demo --- .../java/com/shenyy/dp/state/Description.md | 22 ++++++++++++++++++ .../assets/State-Design-Pattern-Diagram.png | Bin 0 -> 9088 bytes .../com/shenyy/dp/state/example/Context.java | 17 ++++++++++++++ .../shenyy/dp/state/example/StartState.java | 14 +++++++++++ .../com/shenyy/dp/state/example/State.java | 5 ++++ .../shenyy/dp/state/example/StateExample.java | 17 ++++++++++++++ .../shenyy/dp/state/example/StopState.java | 14 +++++++++++ 7 files changed, 89 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/state/Description.md create mode 100644 src/main/java/com/shenyy/dp/state/assets/State-Design-Pattern-Diagram.png create mode 100644 src/main/java/com/shenyy/dp/state/example/Context.java create mode 100644 src/main/java/com/shenyy/dp/state/example/StartState.java create mode 100644 src/main/java/com/shenyy/dp/state/example/State.java create mode 100644 src/main/java/com/shenyy/dp/state/example/StateExample.java create mode 100644 src/main/java/com/shenyy/dp/state/example/StopState.java diff --git a/src/main/java/com/shenyy/dp/state/Description.md b/src/main/java/com/shenyy/dp/state/Description.md new file mode 100644 index 0000000..f202e81 --- /dev/null +++ b/src/main/java/com/shenyy/dp/state/Description.md @@ -0,0 +1,22 @@ +##Description +The state pattern is one of the behavioral design patterns. A state design pattern is used when an Object changes its behavior based on its internal state. If we have to change the behavior of an object based on its state, we can have a state variable in the Object and use the if-else condition block to perform different actions based on the state. The state pattern is used to provide a systematic and lose-coupled way to achieve this through Context and State implementations. + +![UML Diagram of State Design Pattern](assets/State-Design-Pattern-Diagram.png) + +* **Context**: Defines an interface for clients to interact. It maintains references to concrete state objects which may be used to define the current state of objects. +* **State**: Defines interface for declaring what each concrete state should do. +* **ConcreteState**: Provides the implementation for methods defined in State. + +**Example of State Design Pattern** In the below example, we have implemented a mobile state scenario. With respect to alerts, a mobile can be in different states. For example, vibration and silence. Based on this alert state, the behavior of the mobile changes when an alert is to be done. + +###

    Advantages of State Design Pattern
    + +* With State pattern, the benefits of implementing polymorphic behavior are evident, and it is also easier to add states to support additional behavior. +* In the State design pattern, an object’s behavior is the result of the function of its state, and the behavior gets changed at runtime depending on the state. This removes the dependency on the if/else or switch/case conditional logic. For example, in the TV remote scenario, we could have also implemented the behavior by simply writing one class and method that will ask for a parameter and perform an action (switch the TV on/off) with an if/else block. +* The State design pattern also improves Cohesion since state-specific behaviors are aggregated into the ConcreteState classes, which are placed in one location in the code. +* It can make your code easier to read. Your code may be simpler to comprehend if the behavior is divided into several states, with each state having a distinct name that is both obvious and descriptive. +* You may find it helpful to follow the Single Responsibility Principle (SRP). According to the SRP, a class should only have one cause to modify. You may guarantee that each state has a clear and distinct duty by encapsulating the behavior in multiple states, which can make your code easier to maintain and alter. + +###
    Disadvantages of State Design Pattern
    + +* The State design pattern can be used when we need to change the state of the object at runtime by inputting into it different subclasses of some State base class. This circumstance is an advantage and disadvantage at the same time because we have a clear separate State class with some logic and on the other hand the number of classes grows up. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/state/assets/State-Design-Pattern-Diagram.png b/src/main/java/com/shenyy/dp/state/assets/State-Design-Pattern-Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa8f62914ec0cbce002612d69d3f5dfe2390aea GIT binary patch literal 9088 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 Date: Thu, 9 Feb 2023 19:18:50 +0800 Subject: [PATCH 27/37] Chain of Responsibility pattern demo --- .../java/com/shenyy/dp/cor/Description.md | 33 ++++++++++++++++++ .../dp/cor/assets/desigmpatternuml1.png | Bin 0 -> 17253 bytes .../shenyy/dp/cor/example/EmailLogger.java | 12 +++++++ .../com/shenyy/dp/cor/example/Logger.java | 29 +++++++++++++++ .../shenyy/dp/cor/example/StderrLogger.java | 11 ++++++ .../shenyy/dp/cor/example/StdoutLogger.java | 12 +++++++ .../com/shenyy/dp/cor/example/corExample.java | 20 +++++++++++ 7 files changed, 117 insertions(+) create mode 100644 src/main/java/com/shenyy/dp/cor/Description.md create mode 100644 src/main/java/com/shenyy/dp/cor/assets/desigmpatternuml1.png create mode 100644 src/main/java/com/shenyy/dp/cor/example/EmailLogger.java create mode 100644 src/main/java/com/shenyy/dp/cor/example/Logger.java create mode 100644 src/main/java/com/shenyy/dp/cor/example/StderrLogger.java create mode 100644 src/main/java/com/shenyy/dp/cor/example/StdoutLogger.java create mode 100644 src/main/java/com/shenyy/dp/cor/example/corExample.java diff --git a/src/main/java/com/shenyy/dp/cor/Description.md b/src/main/java/com/shenyy/dp/cor/Description.md new file mode 100644 index 0000000..9d8b30f --- /dev/null +++ b/src/main/java/com/shenyy/dp/cor/Description.md @@ -0,0 +1,33 @@ +##Description +Chain of responsibility pattern is used to achieve loose coupling in software design where a request from the client is passed to a chain of objects to process them. Later, the object in the chain will decide themselves who will be processing the request and whether the request is required to be sent to the next object in the chain or not. + + +###Where and When Chain of Responsibility pattern is applicable : +* When you want to decouple a request’s sender and receiver +* Multiple objects, determined at runtime, are candidates to handle a request +* When you don’t want to specify handlers explicitly in your code +* When you want to issue a request to one of several objects without specifying the receiver explicitly. + +This pattern is recommended when multiple objects can handle a request and the handler doesn’t have to be a specific object. Also, the handler is determined at runtime. Please note that a request not handled at all by any handler is a valid use case. + +![UML diagram](assets/desigmpatternuml1.png) + +* **Handler**: This can be an interface which will primarily receive the request and dispatches the request to a chain of handlers. It has reference to the only first handler in the chain and does not know anything about the rest of the handlers. +* **Concrete handlers**: These are actual handlers of the request chained in some sequential order. +* **Client**: Originator of request and this will access the handler to handle it. + +###How to send a request in the application using the Chain of Responsibility +The Client in need of a request to be handled sends it to the chain of handlers which are classes that extend the Handler class. +Each of the handlers in the chain takes its turn trying to handle the request it receives from the client. +If ConcreteHandler1 can handle it, then the request is handled, if not it is sent to the handler ConcreteHandler2, the next one in the chain. + +###Advantages of Chain of Responsibility Design Pattern +* To reduce the coupling degree. Decoupling it will request the sender and receiver. +* Simplified object. The object does not need to know the chain structure. +* Enhance flexibility of object assigned duties. By changing the members within the chain or change their order, allow dynamic adding or deleting responsibility. +* Increase the request processing new class of very convenient. + +###DisAdvantages of Chain of Responsibility Design Pattern +* The request must be received not guarantee. +* The performance of the system will be affected, but also in the code debugging is not easy may cause cycle call. +* It may not be easy to observe the characteristics of operation, due to debug. \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/cor/assets/desigmpatternuml1.png b/src/main/java/com/shenyy/dp/cor/assets/desigmpatternuml1.png new file mode 100644 index 0000000000000000000000000000000000000000..888130d92ff98227fdcf4212ee35dfe157f67de8 GIT binary patch literal 17253 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 literal 0 HcmV?d00001 diff --git a/src/main/java/com/shenyy/dp/cor/example/EmailLogger.java b/src/main/java/com/shenyy/dp/cor/example/EmailLogger.java new file mode 100644 index 0000000..743417c --- /dev/null +++ b/src/main/java/com/shenyy/dp/cor/example/EmailLogger.java @@ -0,0 +1,12 @@ +package com.shenyy.dp.cor.example; + +public class EmailLogger extends Logger { + public EmailLogger(int mask) { + this.mask = mask; + } + + @Override + protected void writeMessage(String msg) { + System.out.println("Sending via email: " + msg); + } +} diff --git a/src/main/java/com/shenyy/dp/cor/example/Logger.java b/src/main/java/com/shenyy/dp/cor/example/Logger.java new file mode 100644 index 0000000..8aa72af --- /dev/null +++ b/src/main/java/com/shenyy/dp/cor/example/Logger.java @@ -0,0 +1,29 @@ +package com.shenyy.dp.cor.example; + +abstract class Logger { + //set the priority + public static int ERR = 3; + public static int NOTICE = 5; + public static int DEBUG = 7; + protected int mask; + + // The next element in the chain of responsibility + protected Logger next; + + public Logger setNext(Logger next) { + this.next = next; + return next; + } + + public void message(String msg, int priority) { + if (priority <= mask) { + writeMessage(msg); + } + + if (next != null) { + next.message(msg, priority); + } + } + + protected abstract void writeMessage(String msg); +} diff --git a/src/main/java/com/shenyy/dp/cor/example/StderrLogger.java b/src/main/java/com/shenyy/dp/cor/example/StderrLogger.java new file mode 100644 index 0000000..2e28f7e --- /dev/null +++ b/src/main/java/com/shenyy/dp/cor/example/StderrLogger.java @@ -0,0 +1,11 @@ +package com.shenyy.dp.cor.example; + +public class StderrLogger extends Logger { + public StderrLogger(int mask) { + this.mask = mask; + } + + protected void writeMessage(String msg) { + System.out.println("Sending to stderr: " + msg); + } +} \ No newline at end of file diff --git a/src/main/java/com/shenyy/dp/cor/example/StdoutLogger.java b/src/main/java/com/shenyy/dp/cor/example/StdoutLogger.java new file mode 100644 index 0000000..76a86f1 --- /dev/null +++ b/src/main/java/com/shenyy/dp/cor/example/StdoutLogger.java @@ -0,0 +1,12 @@ +package com.shenyy.dp.cor.example; + +public class StdoutLogger extends Logger { + public StdoutLogger(int mask) { + this.mask = mask; + } + + @Override + protected void writeMessage(String msg) { + System.out.println("Writing to stdout: " + msg); + } +} diff --git a/src/main/java/com/shenyy/dp/cor/example/corExample.java b/src/main/java/com/shenyy/dp/cor/example/corExample.java new file mode 100644 index 0000000..12fe331 --- /dev/null +++ b/src/main/java/com/shenyy/dp/cor/example/corExample.java @@ -0,0 +1,20 @@ +package com.shenyy.dp.cor.example; + +public class corExample { + public static void main(String[] args) { + // Build the chain of responsibility + Logger logger, logger1, logger2; + logger = new StdoutLogger(Logger.DEBUG); + logger1 = logger.setNext(new EmailLogger(Logger.NOTICE)); + logger2 = logger1.setNext(new StderrLogger(Logger.ERR)); + + // Handled by StdoutLogger + logger.message("Entering function y.", Logger.DEBUG); + + // Handled by StdoutLogger and EmailLogger + logger.message("Step1 completed.", Logger.NOTICE); + + // Handled by all three loggers + logger.message("An error has occurred.", Logger.ERR); + } +} From dfe507a5a62048b4884dfe746c0c441705eeaff5 Mon Sep 17 00:00:00 2001 From: shenyy Date: Fri, 10 Feb 2023 10:41:47 +0800 Subject: [PATCH 28/37] File structure adjust --- .idea/libraries/Maven__junit_junit_4_12.xml | 13 + ..._org_apiguardian_apiguardian_api_1_1_2.xml | 13 + .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 13 + ..._org_junit_jupiter_junit_jupiter_5_9_2.xml | 13 + ..._junit_jupiter_junit_jupiter_api_5_9_2.xml | 13 + ...nit_jupiter_junit_jupiter_engine_5_9_2.xml | 13 + ...nit_jupiter_junit_jupiter_params_5_9_2.xml | 13 + ..._platform_junit_platform_commons_1_9_2.xml | 13 + ...t_platform_junit_platform_engine_1_9_2.xml | 13 + ...Maven__org_opentest4j_opentest4j_1_2_0.xml | 13 + .idea/workspace.xml | 257 ++++++++++++++---- .../dp/abstractfactory/chatGPT/Color.java | 5 - .../dp/abstractfactory/chatGPT/Shape.java | 5 - .../{chatGPT => chatgpt}/AbstractFactory.java | 2 +- .../AbstractFactoryExample.java | 2 +- .../{chatGPT => chatgpt}/Circle.java | 2 +- .../dp/abstractfactory/chatgpt/Color.java | 5 + .../{chatGPT => chatgpt}/ColorFactory.java | 2 +- .../{chatGPT => chatgpt}/FactoryProducer.java | 2 +- .../{chatGPT => chatgpt}/Green.java | 2 +- .../{chatGPT => chatgpt}/Red.java | 2 +- .../dp/abstractfactory/chatgpt/Shape.java | 5 + .../{chatGPT => chatgpt}/ShapeFactory.java | 2 +- .../{chatGPT => chatgpt}/Square.java | 2 +- .../dp/adapter/{ => example01}/Main.java | 2 +- .../shenyy/dp/bridge/example01/v1/Book.java | 4 + .../shenyy/dp/bridge/example01/v1/Flower.java | 4 + .../dp/bridge/{ => example01}/v1/GG.java | 2 +- .../shenyy/dp/bridge/example01/v1/Gift.java | 3 + .../com/shenyy/dp/bridge/example01/v1/MM.java | 5 + .../shenyy/dp/bridge/example01/v2/Book.java | 4 + .../shenyy/dp/bridge/example01/v2/Flower.java | 4 + .../dp/bridge/{ => example01}/v2/GG.java | 2 +- .../shenyy/dp/bridge/example01/v2/Gift.java | 3 + .../com/shenyy/dp/bridge/example01/v2/MM.java | 5 + .../dp/bridge/example01/v2/WarmGift.java | 4 + .../dp/bridge/example01/v2/WildGift.java | 4 + .../dp/bridge/{ => example01}/v2/readme | 0 .../shenyy/dp/bridge/example01/v3/Book.java | 4 + .../shenyy/dp/bridge/example01/v3/Flower.java | 4 + .../dp/bridge/{ => example01}/v3/GG.java | 2 +- .../shenyy/dp/bridge/example01/v3/Gift.java | 3 + .../com/shenyy/dp/bridge/example01/v3/MM.java | 5 + .../bridge/{ => example01}/v3/WarmFlower.java | 2 +- .../dp/bridge/example01/v3/WarmGift.java | 4 + .../dp/bridge/example01/v3/WildGift.java | 4 + .../dp/bridge/{ => example01}/v3/readme | 0 .../shenyy/dp/bridge/example01/v4/Book.java | 4 + .../shenyy/dp/bridge/example01/v4/Flower.java | 4 + .../dp/bridge/{ => example01}/v4/GG.java | 2 +- .../dp/bridge/{ => example01}/v4/Gift.java | 2 +- .../dp/bridge/example01/v4/GiftImpl.java | 4 + .../com/shenyy/dp/bridge/example01/v4/MM.java | 5 + .../bridge/{ => example01}/v4/WarmGift.java | 2 +- .../bridge/{ => example01}/v4/WildGift.java | 2 +- .../dp/bridge/{ => example01}/v4/readme | 0 .../java/com/shenyy/dp/bridge/v1/Book.java | 4 - .../java/com/shenyy/dp/bridge/v1/Flower.java | 4 - .../java/com/shenyy/dp/bridge/v1/Gift.java | 3 - src/main/java/com/shenyy/dp/bridge/v1/MM.java | 5 - .../java/com/shenyy/dp/bridge/v2/Book.java | 4 - .../java/com/shenyy/dp/bridge/v2/Flower.java | 4 - .../java/com/shenyy/dp/bridge/v2/Gift.java | 3 - src/main/java/com/shenyy/dp/bridge/v2/MM.java | 5 - .../com/shenyy/dp/bridge/v2/WarmGift.java | 4 - .../com/shenyy/dp/bridge/v2/WildGift.java | 4 - .../java/com/shenyy/dp/bridge/v3/Book.java | 4 - .../java/com/shenyy/dp/bridge/v3/Flower.java | 4 - .../java/com/shenyy/dp/bridge/v3/Gift.java | 3 - src/main/java/com/shenyy/dp/bridge/v3/MM.java | 5 - .../com/shenyy/dp/bridge/v3/WarmGift.java | 4 - .../com/shenyy/dp/bridge/v3/WildGift.java | 4 - .../java/com/shenyy/dp/bridge/v4/Book.java | 4 - .../java/com/shenyy/dp/bridge/v4/Flower.java | 4 - .../com/shenyy/dp/bridge/v4/GiftImpl.java | 4 - src/main/java/com/shenyy/dp/bridge/v4/MM.java | 5 - .../cor/{example => chatgpt}/EmailLogger.java | 2 +- .../dp/cor/{example => chatgpt}/Logger.java | 2 +- .../{example => chatgpt}/StderrLogger.java | 2 +- .../{example => chatgpt}/StdoutLogger.java | 2 +- .../cor/{example => chatgpt}/corExample.java | 2 +- .../dp/cor/{ => example01/main}/Main.java | 2 +- .../dp/cor/{ => example01/main}/Main.java.bak | 0 .../servlet/v1/Servlet_Main.java | 2 +- .../servlet/v2/Servlet_Main.java | 2 +- .../dp/cor/{ => example01}/servlet/v2/readme | 0 .../servlet/v3/Servlet_Main.java | 2 +- .../dp/cor/{ => example01}/servlet/v3/readme | 0 .../servlet/v4/Servlet_Main.java | 2 +- .../dp/cor/{ => example01}/servlet/v4/readme | 0 .../{example => example01}/Main.java | 2 +- .../decorator/{example => example01}/readme | 0 .../dp/facade/{chatgpt => }/Description.md | 2 +- .../{chatGPT => chatgpt}/Cake.java | 2 +- .../{chatGPT => chatgpt}/Dessert.java | 2 +- .../{chatGPT => chatgpt}/DessertFactory.java | 2 +- .../FactoryMethodExample.java | 2 +- .../{chatGPT => chatgpt}/IceCream.java | 2 +- .../{chatGPT => chatgpt}/Pie.java | 2 +- ...41\345\274\217\347\244\272\344\276\213.md" | 0 .../{example => example01}/BulletPool.java | 2 +- .../{example => example01}/TestString.java | 2 +- .../dp/observer/{ => example01}/v1/Main1.java | 2 +- .../dp/observer/{ => example01}/v10/readme | 0 .../dp/observer/{ => example01}/v11/readme | 0 .../dp/observer/{ => example01}/v2/Main.java | 2 +- .../dp/observer/{ => example01}/v3/Main.java | 2 +- .../dp/observer/{ => example01}/v4/Main.java | 2 +- .../dp/observer/{ => example01}/v5/Main.java | 2 +- .../dp/observer/{ => example01}/v6/Main.java | 2 +- .../dp/observer/{ => example01}/v7/Main.java | 2 +- .../dp/observer/{ => example01}/v8/Main.java | 2 +- .../dp/observer/{ => example01}/v9/Test.java | 2 +- .../{ => example01}/v9/TestFrame.java | 2 +- .../dp/prototype/{chatgpt => }/Description.md | 0 .../dp/prototype/{ => example01}/v1/Test.java | 2 +- .../dp/prototype/{ => example01}/v2/Test.java | 2 +- .../dp/prototype/{ => example01}/v3/Test.java | 2 +- .../dp/prototype/{ => example01}/v4/Test.java | 2 +- .../dp/proxy/{example => chatgpt}/Client.java | 2 +- .../proxy/{example => chatgpt}/Internet.java | 2 +- .../{example => chatgpt}/ProxyInternet.java | 2 +- .../{example => chatgpt}/RealInternet.java | 2 +- .../dp/proxy/{ => example01}/v01/Tank.java | 2 +- .../dp/proxy/{ => example01}/v02/Tank.java | 2 +- .../dp/proxy/{ => example01}/v03/Tank.java | 2 +- .../dp/proxy/{ => example01}/v04/Tank.java | 2 +- .../dp/proxy/{ => example01}/v05/Tank.java | 2 +- .../dp/proxy/{ => example01}/v06/Tank.java | 2 +- .../dp/proxy/{ => example01}/v07/Tank.java | 2 +- .../dp/proxy/{ => example01}/v08/Tank.java | 2 +- .../dp/proxy/{ => example01}/v09/Tank.java | 2 +- .../dp/proxy/{ => example01}/v10/Tank.java | 2 +- .../dp/singleton/{ => example01}/Main.java | 2 +- .../dp/singleton/{ => example01}/Mgr01.java | 2 +- .../dp/singleton/{ => example01}/Mgr02.java | 2 +- .../dp/singleton/{ => example01}/Mgr03.java | 2 +- .../dp/singleton/{ => example01}/Mgr04.java | 2 +- .../dp/singleton/{ => example01}/Mgr05.java | 2 +- .../dp/singleton/{ => example01}/Mgr06.java | 2 +- .../dp/singleton/{ => example01}/Mgr07.java | 2 +- .../dp/singleton/{ => example01}/Mgr08.java | 2 +- .../state/{example => chatgpt}/Context.java | 2 +- .../{example => chatgpt}/StartState.java | 2 +- .../dp/state/{example => chatgpt}/State.java | 2 +- .../{example => chatgpt}/StateExample.java | 2 +- .../state/{example => chatgpt}/StopState.java | 2 +- .../shenyy/dp/state/{ => example01}/readme | 0 .../dp/state/example01/thread/Action.java | 5 + .../{ => example01}/thread/NewState.java | 2 +- .../{ => example01}/thread/RunningState.java | 2 +- .../thread/TerminatedState.java | 2 +- .../{ => example01}/thread/ThreadState_.java | 2 +- .../state/{ => example01}/thread/Thread_.java | 2 +- .../dp/state/{ => example01}/v1/MM.java | 2 +- .../dp/state/{ => example01}/v2/MM.java | 2 +- .../{ => example01}/v2/MMHappyState.java | 2 +- .../{ => example01}/v2/MMNervousState.java | 2 +- .../state/{ => example01}/v2/MMSadState.java | 2 +- .../dp/state/{ => example01}/v2/MMState.java | 2 +- .../com/shenyy/dp/state/thread/Action.java | 5 - .../example01}/Main.java | 2 +- .../dp/visitor/{ => example01}/Computer.java | 2 +- .../dp/proxy/chatgpt/RealInternetTest.java | 14 + 164 files changed, 537 insertions(+), 242 deletions(-) create mode 100644 .idea/libraries/Maven__junit_junit_4_12.xml create mode 100644 .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_9_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_9_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_9_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_9_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_9_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_9_2.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Color.java delete mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatGPT/Shape.java rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/AbstractFactory.java (74%) rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/AbstractFactoryExample.java (92%) rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/Circle.java (73%) create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatgpt/Color.java rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/ColorFactory.java (90%) rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/FactoryProducer.java (86%) rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/Green.java (73%) rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/Red.java (72%) create mode 100644 src/main/java/com/shenyy/dp/abstractfactory/chatgpt/Shape.java rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/ShapeFactory.java (90%) rename src/main/java/com/shenyy/dp/abstractfactory/{chatGPT => chatgpt}/Square.java (73%) rename src/main/java/com/shenyy/dp/adapter/{ => example01}/Main.java (92%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v1/Book.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v1/Flower.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v1/GG.java (78%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v1/Gift.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v1/MM.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v2/Book.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v2/Flower.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v2/GG.java (78%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v2/Gift.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v2/MM.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v2/WarmGift.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v2/WildGift.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v2/readme (100%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v3/Book.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v3/Flower.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v3/GG.java (78%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v3/Gift.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v3/MM.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v3/WarmFlower.java (70%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v3/WarmGift.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v3/WildGift.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v3/readme (100%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v4/Book.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v4/Flower.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v4/GG.java (83%) rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v4/Gift.java (54%) create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v4/GiftImpl.java create mode 100644 src/main/java/com/shenyy/dp/bridge/example01/v4/MM.java rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v4/WarmGift.java (71%) rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v4/WildGift.java (71%) rename src/main/java/com/shenyy/dp/bridge/{ => example01}/v4/readme (100%) delete mode 100644 src/main/java/com/shenyy/dp/bridge/v1/Book.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v1/Flower.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v1/Gift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v1/MM.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v2/Book.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v2/Flower.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v2/Gift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v2/MM.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v2/WarmGift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v2/WildGift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v3/Book.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v3/Flower.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v3/Gift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v3/MM.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v3/WarmGift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v3/WildGift.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v4/Book.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v4/Flower.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v4/GiftImpl.java delete mode 100644 src/main/java/com/shenyy/dp/bridge/v4/MM.java rename src/main/java/com/shenyy/dp/cor/{example => chatgpt}/EmailLogger.java (87%) rename src/main/java/com/shenyy/dp/cor/{example => chatgpt}/Logger.java (94%) rename src/main/java/com/shenyy/dp/cor/{example => chatgpt}/StderrLogger.java (86%) rename src/main/java/com/shenyy/dp/cor/{example => chatgpt}/StdoutLogger.java (87%) rename src/main/java/com/shenyy/dp/cor/{example => chatgpt}/corExample.java (94%) rename src/main/java/com/shenyy/dp/cor/{ => example01/main}/Main.java (98%) rename src/main/java/com/shenyy/dp/cor/{ => example01/main}/Main.java.bak (100%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v1/Servlet_Main.java (96%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v2/Servlet_Main.java (97%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v2/readme (100%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v3/Servlet_Main.java (97%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v3/readme (100%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v4/Servlet_Main.java (97%) rename src/main/java/com/shenyy/dp/cor/{ => example01}/servlet/v4/readme (100%) rename src/main/java/com/shenyy/dp/decorator/{example => example01}/Main.java (90%) rename src/main/java/com/shenyy/dp/decorator/{example => example01}/readme (100%) rename src/main/java/com/shenyy/dp/facade/{chatgpt => }/Description.md (97%) rename src/main/java/com/shenyy/dp/factorymethod/{chatGPT => chatgpt}/Cake.java (73%) rename src/main/java/com/shenyy/dp/factorymethod/{chatGPT => chatgpt}/Dessert.java (57%) rename src/main/java/com/shenyy/dp/factorymethod/{chatGPT => chatgpt}/DessertFactory.java (90%) rename src/main/java/com/shenyy/dp/factorymethod/{chatGPT => chatgpt}/FactoryMethodExample.java (85%) rename src/main/java/com/shenyy/dp/factorymethod/{chatGPT => chatgpt}/IceCream.java (74%) rename src/main/java/com/shenyy/dp/factorymethod/{chatGPT => chatgpt}/Pie.java (72%) rename "src/main/java/com/shenyy/dp/factorymethod/chatGPT/\345\267\245\345\216\202\346\226\271\346\263\225\346\250\241\345\274\217\347\244\272\344\276\213.md" => "src/main/java/com/shenyy/dp/factorymethod/chatgpt/\345\267\245\345\216\202\346\226\271\346\263\225\346\250\241\345\274\217\347\244\272\344\276\213.md" (100%) rename src/main/java/com/shenyy/dp/flyweight/{example => example01}/BulletPool.java (95%) rename src/main/java/com/shenyy/dp/flyweight/{example => example01}/TestString.java (91%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v1/Main1.java (82%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v10/readme (100%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v11/readme (100%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v2/Main.java (93%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v3/Main.java (91%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v4/Main.java (94%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v5/Main.java (96%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v6/Main.java (97%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v7/Main.java (97%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v8/Main.java (97%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v9/Test.java (96%) rename src/main/java/com/shenyy/dp/observer/{ => example01}/v9/TestFrame.java (96%) rename src/main/java/com/shenyy/dp/prototype/{chatgpt => }/Description.md (100%) rename src/main/java/com/shenyy/dp/prototype/{ => example01}/v1/Test.java (95%) rename src/main/java/com/shenyy/dp/prototype/{ => example01}/v2/Test.java (96%) rename src/main/java/com/shenyy/dp/prototype/{ => example01}/v3/Test.java (96%) rename src/main/java/com/shenyy/dp/prototype/{ => example01}/v4/Test.java (96%) rename src/main/java/com/shenyy/dp/proxy/{example => chatgpt}/Client.java (91%) rename src/main/java/com/shenyy/dp/proxy/{example => chatgpt}/Internet.java (71%) rename src/main/java/com/shenyy/dp/proxy/{example => chatgpt}/ProxyInternet.java (93%) rename src/main/java/com/shenyy/dp/proxy/{example => chatgpt}/RealInternet.java (83%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v01/Tank.java (91%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v02/Tank.java (94%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v03/Tank.java (94%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v04/Tank.java (95%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v05/Tank.java (96%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v06/Tank.java (96%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v07/Tank.java (97%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v08/Tank.java (97%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v09/Tank.java (97%) rename src/main/java/com/shenyy/dp/proxy/{ => example01}/v10/Tank.java (98%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Main.java (73%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr01.java (94%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr02.java (91%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr03.java (94%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr04.java (95%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr05.java (95%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr06.java (96%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr07.java (93%) rename src/main/java/com/shenyy/dp/singleton/{ => example01}/Mgr08.java (89%) rename src/main/java/com/shenyy/dp/state/{example => chatgpt}/Context.java (86%) rename src/main/java/com/shenyy/dp/state/{example => chatgpt}/StartState.java (87%) rename src/main/java/com/shenyy/dp/state/{example => chatgpt}/State.java (62%) rename src/main/java/com/shenyy/dp/state/{example => chatgpt}/StateExample.java (92%) rename src/main/java/com/shenyy/dp/state/{example => chatgpt}/StopState.java (87%) rename src/main/java/com/shenyy/dp/state/{ => example01}/readme (100%) create mode 100644 src/main/java/com/shenyy/dp/state/example01/thread/Action.java rename src/main/java/com/shenyy/dp/state/{ => example01}/thread/NewState.java (86%) rename src/main/java/com/shenyy/dp/state/{ => example01}/thread/RunningState.java (83%) rename src/main/java/com/shenyy/dp/state/{ => example01}/thread/TerminatedState.java (83%) rename src/main/java/com/shenyy/dp/state/{ => example01}/thread/ThreadState_.java (69%) rename src/main/java/com/shenyy/dp/state/{ => example01}/thread/Thread_.java (77%) rename src/main/java/com/shenyy/dp/state/{ => example01}/v1/MM.java (88%) rename src/main/java/com/shenyy/dp/state/{ => example01}/v2/MM.java (87%) rename src/main/java/com/shenyy/dp/state/{ => example01}/v2/MMHappyState.java (83%) rename src/main/java/com/shenyy/dp/state/{ => example01}/v2/MMNervousState.java (79%) rename src/main/java/com/shenyy/dp/state/{ => example01}/v2/MMSadState.java (79%) rename src/main/java/com/shenyy/dp/state/{ => example01}/v2/MMState.java (72%) delete mode 100644 src/main/java/com/shenyy/dp/state/thread/Action.java rename src/main/java/com/shenyy/dp/{TemplateMethod => templatemethod/example01}/Main.java (89%) rename src/main/java/com/shenyy/dp/visitor/{ => example01}/Computer.java (98%) create mode 100644 src/test/java/com/shenyy/dp/proxy/chatgpt/RealInternetTest.java diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml new file mode 100644 index 0000000..d411041 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml new file mode 100644 index 0000000..6ac1c42 --- /dev/null +++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..f58bbc1 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_9_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_9_2.xml new file mode 100644 index 0000000..1b189a7 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_9_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_9_2.xml new file mode 100644 index 0000000..e5cf963 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_9_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_9_2.xml new file mode 100644 index 0000000..b181218 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_9_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_9_2.xml new file mode 100644 index 0000000..3ee66e9 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_9_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_9_2.xml new file mode 100644 index 0000000..38b9aa2 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_9_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_9_2.xml new file mode 100644 index 0000000..ecbd84e --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_9_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml new file mode 100644 index 0000000..fbc1b16 --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 11c6de6..0b1eb10 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,15 +4,108 @@