├── .classpath ├── .gitattributes ├── .gitignore ├── 11Singleton └── com │ └── css │ ├── singleton │ └── test │ │ ├── SerializaJava.java │ │ └── Test.java │ ├── singleton1 │ └── hungry │ │ ├── Singleton1.java │ │ ├── Singleton2.java │ │ └── SingletonSafe.java │ ├── singleton2 │ └── lazy │ │ ├── Singleton3.java │ │ └── Singleton3Unsafe.java │ ├── singleton3 │ └── doublecheck │ │ ├── Singleton4.java │ │ └── Singleton4Unsafe.java │ ├── singleton4 │ └── Innerclass │ │ └── Singleton5.java │ └── singleton5 │ └── enumclass │ ├── DemoConfig.java │ ├── DemoSingleton.java │ ├── DemoTest.java │ └── Singleton6.java ├── 12SimpleFactory └── com │ └── css │ └── simplefactory │ ├── base │ ├── IProduct.java │ ├── ProductA.java │ ├── ProductB.java │ ├── ProductFactory.java │ └── Test.java │ └── chip │ ├── Chip.java │ ├── ChipFactory.java │ ├── ChipLoongson.java │ ├── ChipPhytium.java │ └── Test.java ├── 13FactoryMethod └── com │ └── css │ └── factorymethod │ ├── base │ ├── ConcreteFactory.java │ ├── ConcreteProduct1.java │ ├── ConcreteProduct2.java │ ├── Factory.java │ ├── Product.java │ └── Test.java │ └── machine │ ├── FactoryMachine.java │ ├── FactoryMachineGreatwall.java │ ├── FactoryMachineLenovo.java │ ├── Machine.java │ ├── MachineGreatwall.java │ ├── MachineLenovo.java │ ├── Test.java │ └── machine.png ├── 14AbstractFactory └── com │ └── css │ └── abstractfactory │ ├── base │ ├── AbstractCreator.java │ ├── AbstractProductA.java │ ├── AbstractProductB.java │ ├── Creator1.java │ ├── Creator2.java │ ├── ProductA1.java │ ├── ProductA2.java │ ├── ProductB1.java │ ├── ProductB2.java │ ├── Test.java │ └── abstractfactory.png │ └── computer │ ├── Chip.java │ ├── ChipLoongson.java │ ├── ChipPhytium.java │ ├── FactoryComputer.java │ ├── FactoryLoogson.java │ ├── FactoryPK.java │ ├── Machine.java │ ├── MachineGreatwall.java │ ├── MachineLenovo.java │ ├── Test.java │ └── computer.png ├── 15prototype └── com │ └── css │ └── prototype │ ├── DeepCloneUtil.java │ ├── email │ ├── Attachment.java │ ├── Client.java │ └── Email.java │ └── userdata │ ├── Client.java │ └── UserData.java ├── 16Builder └── com │ └── css │ └── builder │ ├── base1 │ ├── Builder.java │ ├── ConcreteBuilder1.java │ ├── ConcreteBuilder2.java │ ├── Director.java │ ├── Product.java │ ├── Test.java │ └── builder.png │ ├── base2 │ ├── Builder.java │ ├── Client.java │ ├── ConcreteBuilder1.java │ ├── ConcreteBuilder2.java │ ├── Product.java │ └── builder2.png │ └── meal │ ├── Client.java │ ├── Food.java │ ├── FoodFactory.java │ ├── Meal.java │ ├── MealBuilder.java │ ├── SetMealA.java │ ├── SetMealB.java │ ├── SetMealC.java │ └── mealbuilder.png ├── 21proxy └── com │ └── css │ └── proxy │ ├── base │ ├── Proxy.java │ ├── RealSubject.java │ ├── Subject.java │ ├── Test.java │ └── proxy.png │ ├── rpc │ ├── org │ │ ├── HessionOrgService.java │ │ ├── OrgService.java │ │ └── WebServiceOrgService.java │ └── user │ │ ├── HessionUserService.java │ │ ├── UserService.java │ │ ├── WebServiceUserService.java │ │ └── userProxy.png │ ├── rpcdynamic │ ├── ServicesProxy.java │ └── TestDynamicUser.java │ └── rpcstatic │ ├── OrgServiceProxy.java │ ├── TestOrg.java │ ├── TestUser.java │ └── UserServiceProxy.java ├── 22adapter └── com │ └── css │ └── adapter │ ├── audioplayer │ ├── AudioPlayer.java │ ├── Mp3Adapter.java │ ├── Mp3Player.java │ ├── Mp4Adapter.java │ ├── Mp4Player.java │ ├── Player.java │ ├── Test.java │ └── player.png │ ├── baseClass │ ├── Adaptee.java │ ├── Adapter.java │ ├── Target.java │ ├── Test.java │ └── adapter.png │ └── baseObject │ ├── Adaptee.java │ ├── Adapter.java │ ├── Target.java │ ├── Test.java │ └── adapterobject.png ├── 23decorator └── com │ └── css │ └── decorator │ ├── base │ ├── Component.java │ ├── ConcreteComponent.java │ ├── ConcreteDecorator1.java │ ├── ConcreteDecorator2.java │ ├── Decorator.java │ ├── Test.java │ └── decorator.png │ ├── color │ ├── BackgroundColorDecorator.java │ ├── BorderColorDecorator.java │ ├── Circle.java │ ├── Rectangle.java │ ├── Shape.java │ ├── ShapeDecorator.java │ ├── Test.java │ └── color.png │ └── meal │ ├── AbstractDecorator.java │ ├── EggDecorator.java │ ├── Meal.java │ ├── MilkDecorator.java │ ├── PancakeMeal.java │ ├── SausageDecorator.java │ └── Test.java ├── 24composite └── com │ └── css │ └── composite │ ├── base │ ├── Component.java │ ├── Composite.java │ ├── Leaf.java │ ├── Test.java │ └── composite.png │ ├── course │ ├── Course.java │ ├── CourseCatalog.java │ ├── Element.java │ ├── Test.java │ └── course.png │ └── meal │ ├── Food.java │ ├── FoodFactory.java │ ├── Meal.java │ └── Test.java ├── 25flyweight └── com │ └── css │ └── flyweight │ ├── base │ ├── ConcreteFlyweight.java │ ├── Flyweight.java │ ├── FlyweightFactory.java │ ├── Test.java │ ├── UnsharedConcreteFlyweight.java │ └── flyweight.png │ └── chessman │ ├── Chessman.java │ ├── ChessmanBad.java │ ├── ChessmanFactory.java │ ├── ChessmanGood.java │ ├── Client.java │ └── CoordinateExtrinsic.java ├── 26facade └── com │ └── css │ └── facade │ ├── base │ ├── ClassA.java │ ├── ClassB.java │ ├── ClassC.java │ ├── Facade.java │ └── facade.png │ └── computer │ ├── Accessories.java │ ├── ComputerFacade.java │ ├── Cpu.java │ ├── Ddr.java │ ├── Ssd.java │ └── Test.java ├── 27bridge └── com │ └── css │ └── bridge │ ├── base │ ├── Abstraction.java │ ├── ConcreteImplementorA.java │ ├── ConcreteImplementorB.java │ ├── Implementor.java │ ├── RefinedAbstraction.java │ ├── Test.java │ └── bridge.png │ ├── jdbc │ └── JDBCTest.java │ ├── login00 │ ├── KeyAuth.java │ ├── Login.java │ ├── Test.java │ └── User.java │ ├── login01 │ ├── FaceAuth.java │ ├── FingerAuth.java │ ├── IAuthMode.java │ ├── KeyAuth.java │ ├── Login.java │ ├── Test.java │ └── User.java │ └── login02 │ ├── AbstractLogin.java │ ├── FaceAuth.java │ ├── FingerAuth.java │ ├── IAuthMode.java │ ├── KeyAuth.java │ ├── MobileLogin.java │ ├── Test.java │ ├── User.java │ ├── WebLogin.java │ └── login.png ├── 310visitor └── com │ └── css │ └── visitor │ ├── base │ ├── Client.java │ ├── ConcreteElementA.java │ ├── ConcreteElementB.java │ ├── ConcreteVisitor1.java │ ├── ConcreteVisitor2.java │ ├── Element.java │ ├── Visitor.java │ └── visitor.png │ ├── base0 │ ├── ConcreteVisitor1.java │ ├── ConcreteVisitor2.java │ ├── Element.java │ ├── Test.java │ ├── Visitor.java │ └── visitor0.png │ └── course │ ├── Client.java │ ├── Course.java │ ├── CourseCatalog.java │ ├── Element.java │ ├── IVisitor.java │ ├── Visitor1.java │ ├── Visitor2.java │ └── visitorcourse.png ├── 31Template └── com │ └── css │ └── template │ └── base │ ├── AbstractClass.java │ ├── ConcreteClass1.java │ ├── ConcreteClass2.java │ ├── Test.java │ └── template.png ├── 32strategy └── com │ └── css │ └── strategy │ ├── base │ ├── ConcreteStrategy1.java │ ├── ConcreteStrategy2.java │ ├── Context.java │ ├── Strategy.java │ ├── Test.java │ └── strategy.png │ ├── log │ ├── DbLog.java │ ├── FileLog.java │ ├── LogContext.java │ ├── LogStrategy.java │ └── Test.java │ ├── promotion │ ├── CashNormal.java │ ├── CashRebate.java │ ├── CashReturn.java │ ├── IPromotionStrategy.java │ ├── PromotionContext.java │ ├── PromotionType.java │ ├── Test.java │ └── promotion.png │ └── sort │ ├── ArrayHandler.java │ ├── BubbleSort.java │ ├── InsertionSort.java │ ├── QuickSort.java │ ├── SelectionSort.java │ ├── Sort.java │ └── Test.java ├── 33state └── com │ └── css │ └── state │ ├── base │ ├── ConcreteStateA.java │ ├── ConcreteStateB.java │ ├── Context.java │ ├── State.java │ ├── Test.java │ └── state.png │ ├── forum │ ├── AbstractState.java │ ├── ForumAccount.java │ ├── HighState.java │ ├── MiddleState.java │ ├── PrimaryState.java │ ├── State.java │ ├── Test.java │ └── forum.png │ └── player │ ├── MediaPlayer.java │ ├── PauseState.java │ ├── PlayState.java │ ├── PlayerState.java │ ├── SpeedState.java │ ├── State.java │ ├── StopState.java │ ├── Test.java │ └── playerstate.png ├── 34command └── com │ └── css │ └── command │ ├── base │ ├── Command.java │ ├── ConcreteCommand1.java │ ├── ConcreteCommand2.java │ ├── ConcreteReceiver1.java │ ├── ConcreteReceiver2.java │ ├── ConcreteReciver1.java │ ├── ConcreteReciver2.java │ ├── Invoker.java │ ├── Receiver.java │ ├── Test.java │ └── command.png │ ├── base0 │ ├── Command.java │ ├── ConcreteCommand1.java │ ├── ConcreteCommand2.java │ ├── Invoker.java │ ├── Test.java │ └── command0.png │ ├── calculator │ ├── AddCommand.java │ ├── CalculatorForm.java │ ├── Command.java │ ├── MultiCommand.java │ ├── Test.java │ └── calculator.png │ └── tv │ ├── Command.java │ ├── Controller.java │ ├── TVChangeCommand.java │ ├── TVCloseCommand.java │ ├── TVOpenCommand.java │ ├── Television.java │ └── Test.java ├── 35observer └── com │ └── css │ └── observer │ ├── base │ ├── ConcreteObserver1.java │ ├── ConcreteObserver2.java │ ├── ConcreteSubject.java │ ├── Observer.java │ ├── Subject.java │ ├── Test.java │ └── observer.png │ ├── chain1 │ ├── ConcreteObserver1.java │ ├── ConcreteObserver2.java │ ├── Observer.java │ ├── Subject.java │ ├── Test.java │ └── obseverchain1.png │ ├── chain2 │ ├── ConcreteObserver1.java │ ├── ConcreteObserver2.java │ ├── Observer.java │ ├── Test.java │ └── obseverchain2.png │ ├── chain3 │ ├── ConcreteObserver1.java │ ├── ConcreteObserver2.java │ ├── Observer.java │ ├── Test.java │ └── obseverchain3.png │ ├── eventbus │ ├── IntegerObserver.java │ ├── StringObserver.java │ └── Test.java │ └── message │ ├── JavaDirector.java │ ├── JavaTeacher.java │ ├── Question.java │ ├── Subject.java │ ├── Teacher.java │ └── Test.java ├── 36chain └── com │ └── css │ └── chain │ ├── approver │ ├── Approver.java │ ├── Congress.java │ ├── Director.java │ ├── President.java │ ├── PurchaseRequest.java │ ├── Test.java │ └── VicePresident.java │ ├── base │ ├── ConcreteHandler1.java │ ├── ConcreteHandler2.java │ ├── ConcreteHandler3.java │ ├── Handler.java │ ├── Test.java │ └── chain.png │ └── base1 │ ├── ConcreteHandler1.java │ ├── ConcreteHandler2.java │ ├── ConcreteHandler3.java │ ├── Handler.java │ ├── Pipeline.java │ └── Test.java ├── 37interpreter └── com │ └── css │ └── interpreter │ ├── base │ ├── AbstractExpression.java │ ├── Client.java │ ├── Context.java │ ├── NonterminalExpression.java │ └── TerminalExpression.java │ └── calculator │ ├── Calculator.java │ ├── Client.java │ ├── DivNode.java │ ├── ModNode.java │ ├── MulNode.java │ ├── Node.java │ ├── SymbolNode.java │ ├── ValueNode.java │ └── interpret.png ├── 38memento └── com │ └── css │ └── memento │ ├── atricle │ ├── Article.java │ ├── ArticleMemento.java │ ├── ArticleMementoImpl.java │ ├── ArticleMementoManager.java │ └── Test.java │ └── base │ ├── Caretaker.java │ ├── Client.java │ ├── Memento.java │ ├── MementoImpl.java │ ├── Originator.java │ └── memento.png ├── 39mediator └── com │ └── css │ └── mediator │ ├── base │ ├── Colleague.java │ ├── ConcreteColleague1.java │ ├── ConcreteColleague2.java │ ├── ConcreteMediator1.java │ ├── ConcreteMediator2.java │ ├── Mediator.java │ ├── Test.java │ └── mediator.png │ └── message │ ├── AbstractUser.java │ ├── Mediator.java │ ├── MessageMediator.java │ ├── MessageUser.java │ ├── Test.java │ └── message.png ├── LICENSE ├── README.md └── other └── com └── css └── other ├── filter00 ├── Test1.java └── Test2.java ├── filter01 ├── Filter.java ├── FilterFactory.java ├── HTMLFilter.java ├── HTMLFilterFactory.java ├── SensitiveFilter.java ├── SensitiveFilterFactory.java └── Test.java ├── filter02 ├── Filter.java ├── FilterFactory.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter03 ├── Factory.java ├── Filter.java ├── FilterFactory.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter04 ├── Filter.java ├── FilterChain.java ├── FilterChainBuilder.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter05 ├── Filter.java ├── FilterChain.java ├── HTMLFilter.java └── Test.java ├── filter06 ├── Filter.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter07 ├── Filter.java ├── FilterChain.java ├── HTMLFilter.java ├── SensitiveFilter.java ├── Test.java └── filter07.png ├── filter08 ├── Filter.java ├── FilterFactory.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter09 ├── Filter.java ├── FilterUtils.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter10 ├── AbstractHandler.java ├── ConcreteFilter.java ├── ConcreteHandler.java ├── Filter.java └── Test.java ├── filter11 ├── AbstractHandler.java ├── ConcreteHandler.java ├── ConcreteHandler1.java ├── ConcreteHandler2.java └── Test.java ├── filter121 ├── ConcreteFilter.java ├── Context.java ├── Filter.java └── Test.java ├── filter122 ├── ConcreteFilter.java ├── Context.java ├── Filter.java └── Test.java ├── filter13 ├── Context.java ├── Factory.java ├── Filter.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter141 ├── Filter.java ├── HTMLFilter.java ├── Invoker.java ├── SensitiveFilter.java └── Test.java ├── filter142 ├── ConcreteFilter.java ├── Filter.java ├── Invoker.java └── Test.java ├── filter151 ├── Filter.java ├── FilterChain.java ├── HTMLFilter.java ├── SensitiveFilter.java ├── Test.java └── filter1.png ├── filter152 ├── Filter.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter161 ├── Filter.java ├── HTMLFilter.java ├── SensitiveFilter.java ├── Test.java └── filter2.png ├── filter162 ├── Filter.java ├── FilterChain.java ├── HTMLFilter.java ├── SensitiveFilter.java └── Test.java ├── filter17 ├── Filter.java ├── HTMLNode.java ├── Node.java ├── SensitiveNode.java ├── SymbolNode.java ├── Test.java └── ValueNode.java ├── filter18 ├── AbstractUser.java ├── ForumMediator.java ├── Mediator.java ├── Test.java └── User.java └── filter19 ├── ConcreteVisitor1.java ├── ConcreteVisitor2.java ├── Element.java ├── Test.java └── Visitor.java /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | -------------------------------------------------------------------------------- /11Singleton/com/css/singleton1/hungry/Singleton1.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton1.hungry; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 饿汉式 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * CSS. WangWeidong 11 | */ 12 | public class Singleton1 implements Serializable { 13 | private static Singleton1 INSTANCE = new Singleton1(); 14 | 15 | public static Singleton1 getInstance() { 16 | return INSTANCE; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /11Singleton/com/css/singleton1/hungry/Singleton2.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton1.hungry; 2 | 3 | /** 4 | * 饿汉式 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Singleton2 { 11 | private static Singleton2 INSTANCE; 12 | static { 13 | INSTANCE = new Singleton2(); 14 | } 15 | 16 | public static Singleton2 getInstance() { 17 | return INSTANCE; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /11Singleton/com/css/singleton2/lazy/Singleton3.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton2.lazy; 2 | 3 | /** 4 | * 懒汉式 线程安全 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Singleton3 { 11 | private static Singleton3 instance; 12 | 13 | public static synchronized Singleton3 getInstance() { 14 | if (instance == null) { 15 | instance = new Singleton3(); 16 | } 17 | return instance; 18 | } 19 | } -------------------------------------------------------------------------------- /11Singleton/com/css/singleton2/lazy/Singleton3Unsafe.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton2.lazy; 2 | 3 | /** 4 | * 懒汉式 线程不安全 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Singleton3Unsafe { 11 | private static Singleton3Unsafe instance; 12 | 13 | public static Singleton3Unsafe getInstance() { 14 | if (instance == null) { 15 | instance = new Singleton3Unsafe(); 16 | } 17 | return instance; 18 | } 19 | } -------------------------------------------------------------------------------- /11Singleton/com/css/singleton3/doublecheck/Singleton4.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton3.doublecheck; 2 | 3 | /** 4 | * 双重锁模式 线程安全 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Singleton4 { 11 | private volatile static Singleton4 instance; 12 | 13 | public static Singleton4 getInstance() { 14 | if (instance == null) { 15 | synchronized (Singleton4.class) { 16 | if (instance == null) { 17 | instance = new Singleton4(); 18 | } 19 | } 20 | } 21 | return instance; 22 | } 23 | } -------------------------------------------------------------------------------- /11Singleton/com/css/singleton4/Innerclass/Singleton5.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton4.Innerclass; 2 | 3 | /** 4 | * 静态内部类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Singleton5 { 11 | private static class Holder { 12 | private final static Singleton5 INSTANCE = new Singleton5(); 13 | } 14 | 15 | public static Singleton5 getInstance() { 16 | return Holder.INSTANCE; 17 | } 18 | } -------------------------------------------------------------------------------- /11Singleton/com/css/singleton5/enumclass/DemoConfig.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton5.enumclass; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 8 | * 9 | * CSS. WangWeidong 10 | */ 11 | public class DemoConfig { 12 | private List list; 13 | 14 | public DemoConfig(int number) { 15 | list = new ArrayList<>(); 16 | for (int i = 0; i < number; i++) 17 | list.add("message-" + i); 18 | } 19 | 20 | public String getData(int index) { 21 | return list.get(index); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /11Singleton/com/css/singleton5/enumclass/Singleton6.java: -------------------------------------------------------------------------------- 1 | package com.css.singleton5.enumclass; 2 | 3 | /** 4 | * 枚举单例 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public enum Singleton6 { 11 | INSTANCE; 12 | 13 | public static Singleton6 getInstance() { 14 | return INSTANCE; 15 | } 16 | } -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/base/IProduct.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.base; 2 | 3 | /** 4 | * 产品接口定义 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface IProduct { 11 | public void produce(); 12 | } 13 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/base/ProductA.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.base; 2 | 3 | /** 4 | * 产品A实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductA implements IProduct { 11 | @Override 12 | public void produce() { 13 | System.out.println("产品A逻辑"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/base/ProductB.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.base; 2 | 3 | /** 4 | * 产品A实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductB implements IProduct { 11 | @Override 12 | public void produce() { 13 | System.out.println("产品B逻辑"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/base/ProductFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.base; 2 | 3 | /** 4 | * 简单工厂 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductFactory { 11 | public static IProduct createProduct(String name) { 12 | if ("productA".equals(name)) 13 | return new ProductA(); 14 | else if ("productB".equals(name)) 15 | return new ProductB(); 16 | return null; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | IProduct product; 14 | 15 | product = ProductFactory.createProduct("productA"); 16 | product.produce(); 17 | 18 | product = ProductFactory.createProduct("productB"); 19 | product.produce(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/chip/Chip.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.chip; 2 | 3 | /** 4 | * 芯片抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Chip { 11 | public abstract void produce(); 12 | } 13 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/chip/ChipFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.chip; 2 | 3 | /** 4 | * 芯片工厂-反射方式实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ChipFactory { 11 | public Chip getChip(Class clazz) { 12 | Chip chip = null; 13 | try { 14 | chip = (Chip) Class.forName(clazz.getName()).newInstance(); 15 | } catch (Exception e) { 16 | e.printStackTrace(); 17 | } 18 | return chip; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/chip/ChipLoongson.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.chip; 2 | 3 | /** 4 | * 龙芯芯片实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ChipLoongson extends Chip { 11 | @Override 12 | public void produce() { 13 | System.out.println("生产龙芯芯片"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/chip/ChipPhytium.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.chip; 2 | 3 | /** 4 | * 飞腾芯片实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ChipPhytium extends Chip { 11 | @Override 12 | public void produce() { 13 | System.out.println("生产飞腾芯片"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /12SimpleFactory/com/css/simplefactory/chip/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.simplefactory.chip; 2 | 3 | /** 4 | * 测试,为了培训好看命名未按规范起 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | 14 | ChipFactory videoFactory = new ChipFactory(); 15 | Chip chip = videoFactory.getChip(ChipLoongson.class); 16 | chip.produce(); 17 | 18 | chip = videoFactory.getChip(ChipPhytium.class); 19 | chip.produce(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/base/ConcreteFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.base; 2 | 3 | /** 4 | * 具体工厂实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteFactory extends Factory { 11 | 12 | public Product createProduct(Class c) { 13 | Product product = null; 14 | try { 15 | product = (Product) Class.forName(c.getName()).newInstance(); 16 | } catch (Exception e) { 17 | } 18 | return product; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/base/ConcreteProduct1.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.base; 2 | 3 | /** 4 | * 具体的产品类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteProduct1 extends Product { 11 | 12 | public void method2() { 13 | // 业务逻辑处理 14 | System.out.println("--ConcreteProduct1 method2--"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/base/ConcreteProduct2.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.base; 2 | 3 | /** 4 | * 具体的产品类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteProduct2 extends Product { 11 | 12 | public void method2() { 13 | // 业务逻辑处理 14 | System.out.println("--ConcreteProduct2 method2--"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/base/Factory.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.base; 2 | 3 | /** 4 | * 抽象工厂 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Factory { 11 | 12 | /* 13 | * 创建一个产品对象,其输入参数类型可以自行设置 通常为String、Enum、Class等,当然也可以为空 14 | */ 15 | public abstract Product createProduct(Class c); 16 | } 17 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/base/Product.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.base; 2 | 3 | /** 4 | * 抽象产品类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Product { 11 | // 产品类的公共方法 12 | public void method1() { 13 | // 业务逻辑处理 14 | System.out.println("--public method1--"); 15 | } 16 | 17 | // 抽象方法1 18 | public abstract void method2(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/FactoryMachine.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 主机工厂抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class FactoryMachine { 11 | public abstract Machine getMachine(); 12 | } 13 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/FactoryMachineGreatwall.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 长城主机工厂实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FactoryMachineGreatwall extends FactoryMachine { 11 | @Override 12 | public Machine getMachine() { 13 | return new MachineGreatwall(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/FactoryMachineLenovo.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 联想主机工厂实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FactoryMachineLenovo extends FactoryMachine { 11 | 12 | @Override 13 | public Machine getMachine() { 14 | return new MachineLenovo(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/Machine.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 主机抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Machine { 11 | public abstract void produce(); 12 | } 13 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/MachineGreatwall.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 长城主机实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MachineGreatwall extends Machine { 11 | 12 | @Override 13 | public void produce() { 14 | System.out.println("生产长城主机"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/MachineLenovo.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 联想主机实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MachineLenovo extends Machine { 11 | @Override 12 | public void produce() { 13 | System.out.println("生产联想主机"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.factorymethod.machine; 2 | 3 | /** 4 | * 测试,为了培训好看命名未按规范起 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | FactoryMachine videoFactory = new FactoryMachineGreatwall(); 14 | Machine video1 = videoFactory.getMachine(); 15 | video1.produce(); 16 | 17 | videoFactory = new FactoryMachineLenovo(); 18 | Machine video2 = videoFactory.getMachine(); 19 | video2.produce(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /13FactoryMethod/com/css/factorymethod/machine/machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/13FactoryMethod/com/css/factorymethod/machine/machine.png -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/AbstractCreator.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 抽象的产品类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class AbstractCreator { 11 | 12 | // 创建A产品家族 13 | public abstract AbstractProductA createProductA(); 14 | 15 | // 创建B产品家族 16 | public abstract AbstractProductB createProductB(); 17 | } 18 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/AbstractProductA.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 产品A 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class AbstractProductA { 11 | 12 | // 每个产品共有的方法 13 | public void shareMethod() { 14 | 15 | } 16 | 17 | // 每个产品相同方法,不同实现 18 | public abstract void doSomething(); 19 | } 20 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/AbstractProductB.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 产品B 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class AbstractProductB { 11 | 12 | // 每个产品共有的方法 13 | public void shareMethod() { 14 | 15 | } 16 | 17 | // 每个产品相同方法,不同实现 18 | public abstract void doSomething(); 19 | } 20 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/Creator1.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 工厂1,只生产产品等级为1的产品 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Creator1 extends AbstractCreator { 11 | 12 | // 只生产产品等级为1的A产品 13 | public AbstractProductA createProductA() { 14 | return new ProductA1(); 15 | } 16 | 17 | // 只生产产品等级为1的B产品 18 | public AbstractProductB createProductB() { 19 | return new ProductB1(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/Creator2.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 工厂2,只生产产品等级为2的产品 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Creator2 extends AbstractCreator { 11 | 12 | // 只生产产品等级为2的A产品 13 | public AbstractProductA createProductA() { 14 | return new ProductA2(); 15 | } 16 | 17 | // 只生产产品等级为2的B产品 18 | public AbstractProductB createProductB() { 19 | return new ProductB2(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/ProductA1.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 产品A1的实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductA1 extends AbstractProductA { 11 | 12 | @Override 13 | public void doSomething() { 14 | System.out.println("产品A1的实现方法"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/ProductA2.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 产品A2的实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductA2 extends AbstractProductA { 11 | 12 | @Override 13 | public void doSomething() { 14 | System.out.println("产品A2的实现方法"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/ProductB1.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 产品B1的实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductB1 extends AbstractProductB { 11 | 12 | @Override 13 | public void doSomething() { 14 | System.out.println("产品B1的实现方法"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/ProductB2.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.base; 2 | 3 | /** 4 | * 产品B2的实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ProductB2 extends AbstractProductB { 11 | 12 | @Override 13 | public void doSomething() { 14 | System.out.println("产品B2的实现方法"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/base/abstractfactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/14AbstractFactory/com/css/abstractfactory/base/abstractfactory.png -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/Chip.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 芯片抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Chip { 11 | public abstract void produce(); 12 | } 13 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/ChipLoongson.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 龙芯芯片实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ChipLoongson extends Chip { 11 | @Override 12 | public void produce() { 13 | System.out.println("生产龙芯芯片"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/ChipPhytium.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 飞腾芯片实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ChipPhytium extends Chip { 11 | @Override 12 | public void produce() { 13 | System.out.println("生产飞腾芯片"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/FactoryComputer.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 电脑工厂抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface FactoryComputer { 11 | 12 | public Machine getMachine(); 13 | 14 | public Chip getChip(); 15 | } 16 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/FactoryLoogson.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 龙芯电脑工厂实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | 11 | public class FactoryLoogson implements FactoryComputer { 12 | @Override 13 | public Machine getMachine() { 14 | return new MachineLenovo(); 15 | } 16 | 17 | @Override 18 | public Chip getChip() { 19 | return new ChipLoongson(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/FactoryPK.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 飞腾电脑工厂实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | 11 | public class FactoryPK implements FactoryComputer { 12 | @Override 13 | public Machine getMachine() { 14 | return new MachineGreatwall(); 15 | } 16 | 17 | @Override 18 | public Chip getChip() { 19 | return new ChipPhytium(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/Machine.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 主机抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Machine { 11 | public abstract void produce(); 12 | } 13 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/MachineGreatwall.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 长城主机实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MachineGreatwall extends Machine { 11 | 12 | @Override 13 | public void produce() { 14 | System.out.println("生产长城主机"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/MachineLenovo.java: -------------------------------------------------------------------------------- 1 | package com.css.abstractfactory.computer; 2 | 3 | /** 4 | * 联想主机实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MachineLenovo extends Machine { 11 | @Override 12 | public void produce() { 13 | System.out.println("生产联想主机"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /14AbstractFactory/com/css/abstractfactory/computer/computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/14AbstractFactory/com/css/abstractfactory/computer/computer.png -------------------------------------------------------------------------------- /15prototype/com/css/prototype/email/Attachment.java: -------------------------------------------------------------------------------- 1 | package com.css.prototype.email; 2 | 3 | import java.io.*; 4 | 5 | /** 6 | * 内部引用的附件类,注意要实现 Serializable接口,否则无法序列化 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * @author CSS. WangWeidong 11 | */ 12 | @SuppressWarnings("serial") 13 | public class Attachment implements Serializable { 14 | String attachTitle = ""; 15 | 16 | public void setAttachTitle(String attachTitle) { 17 | this.attachTitle = attachTitle; 18 | } 19 | 20 | public String getAttachTitle() { 21 | return attachTitle; 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /16Builder/com/css/builder/base1/Builder.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.base1; 2 | 3 | /** 4 | * 抽象建造者 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Builder { 11 | protected Product product = new Product(); 12 | 13 | public abstract void buildPartA(); 14 | 15 | public abstract void buildPartB(); 16 | 17 | public abstract void buildPartC(); 18 | 19 | // 返回产品对象 20 | public Product getResult() { 21 | return product; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /16Builder/com/css/builder/base1/Director.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.base1; 2 | 3 | /** 4 | * 导演类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Director { 11 | private Builder builder; 12 | 13 | public Director(Builder builder) { 14 | this.builder = builder; 15 | } 16 | 17 | public void setBuilder(Builder builder) { 18 | this.builder = builder; 19 | } 20 | 21 | // 产品构建与组装方法 22 | public Product construct() { 23 | builder.buildPartA(); 24 | builder.buildPartB(); 25 | builder.buildPartC(); 26 | return builder.getResult(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /16Builder/com/css/builder/base1/builder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/16Builder/com/css/builder/base1/builder.png -------------------------------------------------------------------------------- /16Builder/com/css/builder/base2/builder2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/16Builder/com/css/builder/base2/builder2.png -------------------------------------------------------------------------------- /16Builder/com/css/builder/meal/Client.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.meal; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Client { 11 | public static void main(String[] args) { 12 | Meal meal = new SetMealA().build(); 13 | meal.print(); 14 | 15 | meal = new SetMealB().build(); 16 | meal.print(); 17 | 18 | meal = new SetMealC().build(); 19 | meal.print(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /16Builder/com/css/builder/meal/Food.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.meal; 2 | 3 | /** 4 | * 食物类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Food { 11 | protected String name; 12 | protected int price; 13 | 14 | public Food(String name, int price) { 15 | this.name = name; 16 | this.price = price; 17 | } 18 | 19 | public void print() { 20 | System.out.println(name + " " + price + "元"); 21 | } 22 | } -------------------------------------------------------------------------------- /16Builder/com/css/builder/meal/MealBuilder.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.meal; 2 | 3 | /** 4 | * 套餐抽象建造者 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class MealBuilder { 11 | 12 | protected Meal meal = new Meal(); 13 | 14 | public abstract Meal build(); 15 | 16 | public Meal getMeal() { 17 | return meal; 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /16Builder/com/css/builder/meal/SetMealB.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.meal; 2 | 3 | /** 4 | * 套餐B-鸡腿堡套餐具体建造者 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SetMealB extends MealBuilder { 11 | 12 | @Override 13 | public Meal build() { 14 | this.meal.setName("鸡腿堡套餐"); 15 | return this.meal 16 | .addFood(FoodFactory.getFood("鸡腿堡")) 17 | .addFood(FoodFactory.getFood("可乐")); 18 | } 19 | } -------------------------------------------------------------------------------- /16Builder/com/css/builder/meal/SetMealC.java: -------------------------------------------------------------------------------- 1 | package com.css.builder.meal; 2 | 3 | /** 4 | * 套餐C-鸡肉卷套餐具体建造者 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SetMealC extends MealBuilder { 11 | 12 | @Override 13 | public Meal build() { 14 | this.meal.setName("鸡肉卷套餐"); 15 | return this.meal 16 | .addFood(FoodFactory.getFood("鸡肉卷")) 17 | .addFood(FoodFactory.getFood("果汁")) 18 | .addFood(FoodFactory.getFood("香肠")); 19 | } 20 | } -------------------------------------------------------------------------------- /16Builder/com/css/builder/meal/mealbuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/16Builder/com/css/builder/meal/mealbuilder.png -------------------------------------------------------------------------------- /21proxy/com/css/proxy/base/Proxy.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.base; 2 | 3 | /** 4 | * 代理类,静态代理类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Proxy implements Subject { 11 | 12 | private Subject subject; 13 | 14 | public Proxy(Subject subject) { 15 | this.subject = subject; 16 | } 17 | 18 | @Override 19 | public void request() { 20 | System.out.println("before"); 21 | subject.request(); 22 | System.out.println("after"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/base/RealSubject.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.base; 2 | 3 | /** 4 | * 具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class RealSubject implements Subject { 11 | @Override 12 | public void request() { 13 | System.out.println("具体实现: request"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/base/Subject.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.base; 2 | 3 | /** 4 | * 被代理的接口类,抽象的目标接口,定义具体的目标对象和代理公用的接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Subject { 11 | 12 | /** 13 | * 定义一个方法,由具体实现类去实现该方法 14 | */ 15 | public void request(); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | // 创建具体类 14 | Subject realSubject = new RealSubject(); 15 | // 创建代理类 16 | Subject proxy = new Proxy(realSubject); 17 | // 代理执行 18 | proxy.request(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/base/proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/21proxy/com/css/proxy/base/proxy.png -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/org/HessionOrgService.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.rpc.org; 2 | 3 | /** 4 | * 机构Hession接口具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HessionOrgService implements OrgService { 11 | @Override 12 | public void getOrgInfo() { 13 | System.out.println("HessionOrgService具体实现: getOrgInfo"); 14 | } 15 | 16 | @Override 17 | public void getOrgBaseInfo() { 18 | System.out.println("HessionOrgService具体实现: getOrgBaseInfo"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/org/OrgService.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.rpc.org; 2 | 3 | /** 4 | * 被代理的机构接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface OrgService { 11 | 12 | /** 13 | * 定义方法,由具体实现类去实现该方法 14 | */ 15 | public void getOrgBaseInfo(); 16 | 17 | public void getOrgInfo(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/org/WebServiceOrgService.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.rpc.org; 2 | 3 | /** 4 | * 机构WebService接口具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class WebServiceOrgService implements OrgService { 11 | @Override 12 | public void getOrgInfo() { 13 | System.out.println("WebServiceOrgService具体实现: getOrgInfo"); 14 | } 15 | 16 | @Override 17 | public void getOrgBaseInfo() { 18 | System.out.println("WebServiceOrgService具体实现: getOrgBaseInfo"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/user/HessionUserService.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.rpc.user; 2 | 3 | /** 4 | * 用户Hession接口具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HessionUserService implements UserService { 11 | @Override 12 | public void getUserInfo() { 13 | System.out.println("HessionUserService具体实现: getUserInfo"); 14 | } 15 | 16 | @Override 17 | public void getUserBaseInfo() { 18 | System.out.println("HessionUserService具体实现: getUserBaseInfo"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/user/UserService.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.rpc.user; 2 | 3 | /** 4 | * 被代理的用户接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface UserService { 11 | 12 | /** 13 | * 定义方法,由具体实现类去实现该方法 14 | */ 15 | public void getUserBaseInfo(); 16 | 17 | public void getUserInfo(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/user/WebServiceUserService.java: -------------------------------------------------------------------------------- 1 | package com.css.proxy.rpc.user; 2 | 3 | /** 4 | * 用户WebService接口具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class WebServiceUserService implements UserService { 11 | @Override 12 | public void getUserInfo() { 13 | System.out.println("WebServiceUserService具体实现: getUserInfo"); 14 | } 15 | 16 | @Override 17 | public void getUserBaseInfo() { 18 | System.out.println("WebServiceUserService具体实现: getUserBaseInfo"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /21proxy/com/css/proxy/rpc/user/userProxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/21proxy/com/css/proxy/rpc/user/userProxy.png -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/Mp3Adapter.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.audioplayer; 2 | 3 | /** 4 | * Mp3播放器-Adapter(适配器类) 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Mp3Adapter extends Mp3Player implements Player { 11 | 12 | @Override 13 | public void play(String audioType, String fileName) { 14 | System.out.print(audioType + ": "); 15 | super.playMp3(fileName); 16 | } 17 | } -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/Mp3Player.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.audioplayer; 2 | 3 | /** 4 | * Mp3播放器-Adaptee(适配者类) 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Mp3Player { 11 | 12 | public void playMp3(String fileName) { 13 | System.out.println("Playing " + fileName); 14 | } 15 | } -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/Mp4Adapter.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.audioplayer; 2 | 3 | /** 4 | * Mp3播放器-Adapter(适配器类) 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Mp4Adapter extends Mp4Player implements Player { 11 | 12 | @Override 13 | public void play(String audioType, String fileName) { 14 | System.out.print(audioType + ": "); 15 | super.playMp4(fileName); 16 | } 17 | } -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/Mp4Player.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.audioplayer; 2 | 3 | /** 4 | * Mp4播放器-Adaptee(适配者类) 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Mp4Player { 11 | 12 | public void playMp4(String fileName) { 13 | System.out.println("Playing " + fileName); 14 | } 15 | } -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/Player.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.audioplayer; 2 | 3 | /** 4 | * 播放器目标抽象类-Target(目标抽象类) 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Player { 11 | public void play(String audioType, String fileName); 12 | } -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.audioplayer; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | AudioPlayer audioPlayer = new AudioPlayer(); 13 | audioPlayer.play("mp3", "song1.mp3"); 14 | audioPlayer.play("mp4", "song2.mp4"); 15 | audioPlayer.play("avi", "song3.avi"); 16 | } 17 | } -------------------------------------------------------------------------------- /22adapter/com/css/adapter/audioplayer/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/22adapter/com/css/adapter/audioplayer/player.png -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseClass/Adaptee.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseClass; 2 | 3 | /** 4 | * 被适配的类,已经存在的接口,这个接口需要被适配 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Adaptee { 11 | public void adapteeRequest() { 12 | System.out.println("被适配者的方法"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseClass/Adapter.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseClass; 2 | 3 | /** 4 | * 适配器,继承了被适配的类,并且实现了Target定义的接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Adapter extends Adaptee implements Target { 11 | @Override 12 | public void request() { 13 | System.out.println("before"); 14 | super.adapteeRequest(); 15 | System.out.println("after"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseClass/Target.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseClass; 2 | 3 | /** 4 | * 客户需要的接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Target { 11 | public void request(); 12 | } 13 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseClass/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseClass; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | // 创建符合目标接口的对象 14 | Target adapterTarget = new Adapter(); 15 | // 请求处理 16 | adapterTarget.request(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseClass/adapter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/22adapter/com/css/adapter/baseClass/adapter.png -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseObject/Adaptee.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseObject; 2 | 3 | /** 4 | * 被适配的类,已经存在的接口,这个接口需要被适配 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Adaptee { 11 | public void adapteeRequest() { 12 | System.out.println("被适配者的方法"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseObject/Target.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseObject; 2 | 3 | /** 4 | * 客户需要的接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Target { 11 | public void request(); 12 | } 13 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseObject/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.adapter.baseObject; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | // 创建需被适配的对象 14 | Adaptee adaptee = new Adaptee(); 15 | // 创建符合目标接口的对象 16 | Target target = new Adapter(adaptee); 17 | // 请求处理 18 | target.request(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /22adapter/com/css/adapter/baseObject/adapterobject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/22adapter/com/css/adapter/baseObject/adapterobject.png -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/Component.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.base; 2 | 3 | /** 4 | * 组件接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Component { 11 | // 接口方法 12 | public void operate(); 13 | } 14 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/ConcreteComponent.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.base; 2 | 3 | /** 4 | * 具体组件的具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteComponent implements Component { 11 | // 具体实现 12 | @Override 13 | public void operate() { 14 | System.out.println("do Something"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/ConcreteDecorator1.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.base; 2 | 3 | /** 4 | * 装饰器具体实现1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteDecorator1 extends Decorator { 11 | 12 | // 通过构造函数传递被修饰者 13 | public ConcreteDecorator1(Component component) { 14 | super(component); 15 | } 16 | 17 | // 重写父类的operate方法 18 | public void operate() { 19 | System.out.println("ConcreteDecorator1"); 20 | super.operate(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/ConcreteDecorator2.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.base; 2 | 3 | /** 4 | * 装饰器具体实现2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteDecorator2 extends Decorator { 11 | 12 | // 通过构造函数传递被修饰者 13 | public ConcreteDecorator2(Component component) { 14 | super(component); 15 | } 16 | 17 | // 重写父类的operate方法 18 | public void operate() { 19 | super.operate(); 20 | System.out.println("ConcreteDecorator2"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/Decorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.base; 2 | 3 | /** 4 | * 装饰器的抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Decorator implements Component { 11 | /** 12 | * 被修饰者对象 13 | */ 14 | private Component component; 15 | 16 | // 通过构造函数传递被修饰者 17 | public Decorator(Component component) { 18 | this.component = component; 19 | } 20 | 21 | // 委托给被修饰者执行 22 | public void operate() { 23 | this.component.operate(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | Component component = new ConcreteComponent(); 14 | // 第一次修饰 15 | component = new ConcreteDecorator1(component); 16 | // 第二次修饰 17 | component = new ConcreteDecorator2(component); 18 | // 修饰后运行 19 | component.operate(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/base/decorator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/23decorator/com/css/decorator/base/decorator.png -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/BackgroundColorDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.color; 2 | 3 | /** 4 | * 背景着色装饰器具体实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class BackgroundColorDecorator extends ShapeDecorator { 11 | private String color; 12 | 13 | // 通过构造函数传递被修饰者 14 | public BackgroundColorDecorator(Shape shape, String color) { 15 | super(shape); 16 | this.color = color; 17 | } 18 | 19 | @Override 20 | public void draw() { 21 | super.draw(); 22 | System.out.println("填充" + color + "背景"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/BorderColorDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.color; 2 | 3 | /** 4 | * 边框着色装饰器具体实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class BorderColorDecorator extends ShapeDecorator { 11 | private String color; 12 | 13 | // 通过构造函数传递被修饰者 14 | public BorderColorDecorator(Shape shape, String color) { 15 | super(shape); 16 | this.color = color; 17 | } 18 | 19 | @Override 20 | public void draw() { 21 | super.draw(); 22 | System.out.println("画上" + color + "边框"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/Circle.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.color; 2 | 3 | /** 4 | * shape组件Circle的具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Circle implements Shape { 11 | @Override 12 | public void draw() { 13 | System.out.println("画一个圆"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/Rectangle.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.color; 2 | 3 | /** 4 | * shape组件Rectangle的具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Rectangle implements Shape { 11 | @Override 12 | public void draw() { 13 | System.out.println("画一个矩形"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/Shape.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.color; 2 | 3 | /** 4 | * 组件接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Shape { 11 | public void draw(); 12 | } 13 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/ShapeDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.color; 2 | 3 | /** 4 | * 装饰器的抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class ShapeDecorator implements Shape { 11 | /** 12 | * 被修饰者对象 13 | */ 14 | protected Shape shape; 15 | 16 | // 通过构造函数传递被修饰者 17 | public ShapeDecorator(Shape shape) { 18 | this.shape = shape; 19 | } 20 | 21 | @Override 22 | public void draw() { 23 | shape.draw(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/color/color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/23decorator/com/css/decorator/color/color.png -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/AbstractDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 装饰者的抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class AbstractDecorator extends Meal { 11 | 12 | private Meal meal; 13 | 14 | public AbstractDecorator(Meal meal) { 15 | this.meal = meal; 16 | } 17 | 18 | @Override 19 | public String getDesc() { 20 | return meal.getDesc(); 21 | } 22 | 23 | @Override 24 | public int cost() { 25 | return meal.cost(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/EggDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 装饰者的具体实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class EggDecorator extends AbstractDecorator { 11 | 12 | public EggDecorator(Meal meal) { 13 | super(meal); 14 | } 15 | 16 | @Override 17 | public String getDesc() { 18 | return super.getDesc() + "\n加一个鸡蛋 1元"; 19 | } 20 | 21 | @Override 22 | public int cost() { 23 | return super.cost() + 1; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/Meal.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 煎饼早餐的抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Meal { 11 | 12 | /** 13 | * 描述 14 | * 15 | * @return 16 | */ 17 | public abstract String getDesc(); 18 | 19 | /** 20 | * 总价 21 | * 22 | * @return 23 | */ 24 | public abstract int cost(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/MilkDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 装饰者的具体实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MilkDecorator extends AbstractDecorator { 11 | 12 | public MilkDecorator(Meal meal) { 13 | super(meal); 14 | } 15 | 16 | @Override 17 | public String getDesc() { 18 | return super.getDesc() + "\n加一杯牛奶 5元"; 19 | } 20 | 21 | @Override 22 | public int cost() { 23 | return super.cost() + 5; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/PancakeMeal.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 煎饼早餐的具体实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class PancakeMeal extends Meal { 11 | @Override 12 | public String getDesc() { 13 | return "薄煎饼 8元"; 14 | } 15 | 16 | @Override 17 | public int cost() { 18 | return 8; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/SausageDecorator.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 装饰者的具体实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SausageDecorator extends AbstractDecorator { 11 | 12 | public SausageDecorator(Meal meal) { 13 | super(meal); 14 | } 15 | 16 | @Override 17 | public String getDesc() { 18 | return super.getDesc() + "\n加一根香肠 2元"; 19 | } 20 | 21 | @Override 22 | public int cost() { 23 | return super.cost() + 2; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /23decorator/com/css/decorator/meal/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.decorator.meal; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | Meal meal = new PancakeMeal(); 14 | 15 | meal = new EggDecorator(meal); 16 | meal = new EggDecorator(meal); 17 | meal = new SausageDecorator(meal); 18 | meal = new SausageDecorator(meal); 19 | meal = new MilkDecorator(meal); 20 | 21 | System.out.println(meal.getDesc() + "\n总价:" + meal.cost()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /24composite/com/css/composite/base/Component.java: -------------------------------------------------------------------------------- 1 | package com.css.composite.base; 2 | 3 | /** 4 | * 组合模式统一接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Component { 11 | public void operation(); 12 | 13 | public void add(Component leaf); 14 | } 15 | -------------------------------------------------------------------------------- /24composite/com/css/composite/base/Leaf.java: -------------------------------------------------------------------------------- 1 | package com.css.composite.base; 2 | 3 | /** 4 | * 简单的组件类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Leaf implements Component { 11 | 12 | private String name; 13 | 14 | public Leaf(String name) { 15 | this.name = name; 16 | } 17 | 18 | @Override 19 | public void operation() { 20 | System.out.println(this.name); 21 | } 22 | 23 | public String getName() { 24 | return name; 25 | } 26 | 27 | @Override 28 | public void add(Component leaf) { 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /24composite/com/css/composite/base/composite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/24composite/com/css/composite/base/composite.png -------------------------------------------------------------------------------- /24composite/com/css/composite/course/course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/24composite/com/css/composite/course/course.png -------------------------------------------------------------------------------- /24composite/com/css/composite/meal/Food.java: -------------------------------------------------------------------------------- 1 | package com.css.composite.meal; 2 | 3 | /** 4 | * 食物类组件构件 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Food { 11 | protected String name; 12 | protected int price; 13 | 14 | public Food(String name, int price) { 15 | this.name = name; 16 | this.price = price; 17 | } 18 | 19 | public void print() { 20 | System.out.println(name + " " + price + "元"); 21 | } 22 | 23 | public void add(Food food) { 24 | throw new UnsupportedOperationException("不支持添加操作"); 25 | } 26 | } -------------------------------------------------------------------------------- /24composite/com/css/composite/meal/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.composite.meal; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | Food meal = new Meal("一顿早餐"); 14 | 15 | meal.add(FoodFactory.getFood("煎饼")); 16 | meal.add(FoodFactory.getFood("鸡蛋")); 17 | meal.add(FoodFactory.getFood("鸡蛋")); 18 | meal.add(FoodFactory.getFood("香肠")); 19 | meal.add(FoodFactory.getFood("香肠")); 20 | meal.add(FoodFactory.getFood("牛奶")); 21 | 22 | meal.print(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/base/ConcreteFlyweight.java: -------------------------------------------------------------------------------- 1 | package com.css.flyweight.base; 2 | 3 | /** 4 | * 可以被共享的对象 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteFlyweight implements Flyweight { 11 | 12 | private String intrinsicState; 13 | 14 | public ConcreteFlyweight(String intrinsicState) { 15 | this.intrinsicState = intrinsicState; 16 | } 17 | 18 | @Override 19 | public void operation(String extrinsicState) { 20 | System.out.println(this.intrinsicState + "--" + extrinsicState); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/base/Flyweight.java: -------------------------------------------------------------------------------- 1 | package com.css.flyweight.base; 2 | 3 | /** 4 | * 享元对象接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Flyweight { 11 | void operation(String extrinsicState); 12 | } 13 | -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.flyweight.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | String[] keys = { "1", "1", "2", "2", "3", "3" }; 14 | for (String key : keys) { 15 | Flyweight flyweight = FlyweightFactory.getFlyweight(key); 16 | flyweight.operation("测试" + key); 17 | } 18 | System.out.println("size: " + FlyweightFactory.size()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/base/UnsharedConcreteFlyweight.java: -------------------------------------------------------------------------------- 1 | package com.css.flyweight.base; 2 | 3 | /** 4 | * 不被共享的对象 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class UnsharedConcreteFlyweight implements Flyweight { 11 | 12 | private String allState; 13 | 14 | public UnsharedConcreteFlyweight(String allState) { 15 | this.allState = allState; 16 | } 17 | 18 | @Override 19 | public void operation(String extrinsicState) { 20 | System.out.println(this.allState + "----" + extrinsicState); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/base/flyweight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/25flyweight/com/css/flyweight/base/flyweight.png -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/chessman/Chessman.java: -------------------------------------------------------------------------------- 1 | package com.css.flyweight.chessman; 2 | 3 | /** 4 | * 五子棋棋子类:Flyweight(抽象享元类) 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Chessman { 11 | 12 | public abstract void display(); 13 | 14 | /** 15 | * 通过该接口,可以接受并作用于外部状态 16 | */ 17 | public abstract void display(CoordinateExtrinsic extrinsic); 18 | } 19 | -------------------------------------------------------------------------------- /25flyweight/com/css/flyweight/chessman/ChessmanBad.java: -------------------------------------------------------------------------------- 1 | package com.css.flyweight.chessman; 2 | 3 | /** 4 | * 坏了的棋子就不管他的颜色了 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ChessmanBad extends Chessman { 11 | @Override 12 | public void display() { 13 | System.out.println("这个棋子已坏"); 14 | } 15 | 16 | @Override 17 | public void display(CoordinateExtrinsic extrinsic) { 18 | System.out.println("这个棋子已坏"); 19 | } 20 | } -------------------------------------------------------------------------------- /26facade/com/css/facade/base/ClassA.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.base; 2 | 3 | /** 4 | * 业务类A 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ClassA { 11 | 12 | public void doSomethingA() { 13 | // 业务逻辑 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /26facade/com/css/facade/base/ClassB.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.base; 2 | 3 | /** 4 | * 业务类B 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ClassB { 11 | 12 | public void doSomethingB() { 13 | // 业务逻辑 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /26facade/com/css/facade/base/ClassC.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.base; 2 | 3 | /** 4 | * 业务类C 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ClassC { 11 | 12 | public void doSomethingC() { 13 | // 业务逻辑 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /26facade/com/css/facade/base/Facade.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.base; 2 | 3 | /** 4 | * 外观/门面模式类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Facade { 11 | // 被委托的对象 12 | private ClassA a = new ClassA(); 13 | private ClassB b = new ClassB(); 14 | private ClassC c = new ClassC(); 15 | 16 | // 提供给外部访问的方法 17 | public void methodA() { 18 | this.a.doSomethingA(); 19 | } 20 | 21 | public void methodB() { 22 | this.b.doSomethingB(); 23 | } 24 | 25 | public void methodC() { 26 | this.c.doSomethingC(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /26facade/com/css/facade/base/facade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/26facade/com/css/facade/base/facade.png -------------------------------------------------------------------------------- /26facade/com/css/facade/computer/Accessories.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.computer; 2 | 3 | /** 4 | * 配件接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Accessories { 11 | void open(); 12 | } -------------------------------------------------------------------------------- /26facade/com/css/facade/computer/Cpu.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.computer; 2 | 3 | /** 4 | * CPU实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Cpu implements Accessories { 11 | @Override 12 | public void open() { 13 | System.out.println("启动CPU"); 14 | } 15 | } -------------------------------------------------------------------------------- /26facade/com/css/facade/computer/Ddr.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.computer; 2 | 3 | /** 4 | * 内存实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Ddr implements Accessories { 11 | @Override 12 | public void open() { 13 | System.out.println("启动内存"); 14 | } 15 | } -------------------------------------------------------------------------------- /26facade/com/css/facade/computer/Ssd.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.computer; 2 | 3 | /** 4 | * 硬盘实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Ssd implements Accessories { 11 | @Override 12 | public void open() { 13 | System.out.println("启动硬盘"); 14 | } 15 | } -------------------------------------------------------------------------------- /26facade/com/css/facade/computer/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.facade.computer; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | ComputerFacade computer = new ComputerFacade(); 13 | computer.openDDR(); 14 | computer.openCPU(); 15 | computer.openSSD(); 16 | System.out.println("========================="); 17 | computer.open(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/Abstraction.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.base; 2 | 3 | /** 4 | * 抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Abstraction { 11 | 12 | /** 13 | * 桥接关联对象 14 | */ 15 | protected Implementor implementor; 16 | 17 | public Abstraction(Implementor implementor) { 18 | this.implementor = implementor; 19 | } 20 | 21 | /** 22 | * 操作类 23 | */ 24 | public abstract void operation(); 25 | } 26 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/ConcreteImplementorA.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.base; 2 | 3 | /** 4 | * 具体实现类A 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteImplementorA implements Implementor { 11 | @Override 12 | public void operationImpl() { 13 | System.out.println("桥接A"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/ConcreteImplementorB.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.base; 2 | 3 | /** 4 | * 具体实现类B 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteImplementorB implements Implementor { 11 | @Override 12 | public void operationImpl() { 13 | System.out.println("桥接B"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/Implementor.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.base; 2 | 3 | /** 4 | * 实现类接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Implementor { 11 | public void operationImpl(); 12 | } 13 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/RefinedAbstraction.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.base; 2 | 3 | /** 4 | * 修正/扩充抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class RefinedAbstraction extends Abstraction { 11 | 12 | public RefinedAbstraction(Implementor implementor) { 13 | super(implementor); 14 | } 15 | 16 | @Override 17 | public void operation() { 18 | System.out.println("操作"); 19 | implementor.operationImpl(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | // 创建具体实现类 14 | Implementor impl = new ConcreteImplementorA(); 15 | // 创建扩充抽象类,并桥接关联 impl对象 16 | Abstraction abstraction = new RefinedAbstraction(impl); 17 | // 执行操作,通常由具体实现类完成 18 | abstraction.operation(); 19 | 20 | Abstraction abstraction2 = new RefinedAbstraction(new ConcreteImplementorB()); 21 | abstraction2.operation(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/base/bridge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/27bridge/com/css/bridge/base/bridge.png -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login00/KeyAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login00; 2 | 3 | /** 4 | * key方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class KeyAuth { 11 | 12 | public boolean checkAccount() { 13 | System.out.print("Key方式: "); 14 | return User.getUser() == null; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login00/Login.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login00; 2 | 3 | /** 4 | * 用户登录实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Login { 11 | 12 | protected KeyAuth authMode; 13 | 14 | public Login(KeyAuth authMode) { 15 | this.authMode = authMode; 16 | } 17 | 18 | boolean login() { 19 | System.out.println("web用户登录"); 20 | return authMode.checkAccount(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login00/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login00; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | Login login = new Login(new KeyAuth()); 13 | login.login(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login01/FaceAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login01; 2 | 3 | /** 4 | * 人脸识别方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FaceAuth implements IAuthMode { 11 | 12 | @Override 13 | public boolean checkAccount() { 14 | System.out.print("人脸识别方式: "); 15 | return User.getUser() == null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login01/FingerAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login01; 2 | 3 | /** 4 | * 指纹识别方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FingerAuth implements IAuthMode { 11 | 12 | @Override 13 | public boolean checkAccount() { 14 | System.out.print("指纹识别方式: "); 15 | return User.getUser() == null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login01/IAuthMode.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login01; 2 | 3 | /** 4 | * 认证方式接口类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface IAuthMode { 11 | /** 12 | * 账号校验接口 13 | */ 14 | public boolean checkAccount(); 15 | } 16 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login01/KeyAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login01; 2 | 3 | /** 4 | * key方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class KeyAuth implements IAuthMode { 11 | 12 | @Override 13 | public boolean checkAccount() { 14 | System.out.print("Key方式: "); 15 | return User.getUser() == null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login01/Login.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login01; 2 | 3 | /** 4 | * 用户登录实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Login { 11 | 12 | protected IAuthMode authMode; 13 | 14 | public Login(IAuthMode authMode) { 15 | this.authMode = authMode; 16 | } 17 | 18 | boolean login() { 19 | System.out.println("web用户登录"); 20 | return authMode.checkAccount(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login01/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login01; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | Login login; 13 | 14 | login = new Login(new KeyAuth()); 15 | login.login(); 16 | 17 | login = new Login(new FingerAuth()); 18 | login.login(); 19 | 20 | login = new Login(new FaceAuth()); 21 | login.login(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/AbstractLogin.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * 用户中心登录,身份认证抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class AbstractLogin { 11 | 12 | protected IAuthMode authMode; 13 | 14 | public AbstractLogin(IAuthMode authMode) { 15 | this.authMode = authMode; 16 | } 17 | 18 | public abstract boolean login(); 19 | } 20 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/FaceAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * 人脸识别方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FaceAuth implements IAuthMode { 11 | 12 | @Override 13 | public boolean checkAccount() { 14 | System.out.print("人脸识别方式: "); 15 | return User.getUser() == null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/FingerAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * 指纹识别方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FingerAuth implements IAuthMode { 11 | 12 | @Override 13 | public boolean checkAccount() { 14 | System.out.print("指纹识别方式: "); 15 | return User.getUser() == null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/IAuthMode.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * 认证方式接口类, 桥定义实现接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface IAuthMode { 11 | /** 12 | * 账号校验接口 13 | */ 14 | public boolean checkAccount(); 15 | } 16 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/KeyAuth.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * key方式认证实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class KeyAuth implements IAuthMode { 11 | 12 | @Override 13 | public boolean checkAccount() { 14 | System.out.print("Key方式: "); 15 | return User.getUser() == null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/MobileLogin.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * 手机应用登录实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MobileLogin extends AbstractLogin { 11 | 12 | public MobileLogin(IAuthMode authMode) { 13 | super(authMode); 14 | } 15 | 16 | @Override 17 | public boolean login() { 18 | System.out.println("手机应用登录"); 19 | return authMode.checkAccount(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | 14 | AbstractLogin login; 15 | 16 | login = new WebLogin(new KeyAuth()); 17 | login.login(); 18 | 19 | login = new WebLogin(new FingerAuth()); 20 | login.login(); 21 | 22 | login = new MobileLogin(new FaceAuth()); 23 | login.login(); 24 | 25 | login = new MobileLogin(new FingerAuth()); 26 | login.login(); 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/WebLogin.java: -------------------------------------------------------------------------------- 1 | package com.css.bridge.login02; 2 | 3 | /** 4 | * Web系统登录实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class WebLogin extends AbstractLogin { 11 | 12 | public WebLogin(IAuthMode authMode) { 13 | super(authMode); 14 | } 15 | 16 | @Override 17 | public boolean login() { 18 | System.out.println("Web系统登录"); 19 | return authMode.checkAccount(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /27bridge/com/css/bridge/login02/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/27bridge/com/css/bridge/login02/login.png -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/ConcreteElementA.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base; 2 | 3 | /** 4 | * 具体组件类A 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteElementA implements Element { 11 | @Override 12 | public void accept(Visitor visitor) { 13 | visitor.visitA(this); 14 | } 15 | 16 | @Override 17 | public String operation() { 18 | return "ConcreteElementA"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/ConcreteElementB.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base; 2 | 3 | /** 4 | * 具体组件类B 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteElementB implements Element { 11 | @Override 12 | public void accept(Visitor visitor) { 13 | visitor.visitB(this); 14 | } 15 | 16 | @Override 17 | public String operation() { 18 | return "ConcreteElementB"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/ConcreteVisitor1.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base; 2 | 3 | /** 4 | * 具体访问者1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteVisitor1 implements Visitor { 11 | @Override 12 | public void visitA(ConcreteElementA element) { 13 | System.out.println("ConcreteVisitor1包装新操作: " + element.operation()); 14 | } 15 | 16 | @Override 17 | public void visitB(ConcreteElementB element) { 18 | System.out.println("ConcreteVisitor1包装新操作: " + element.operation()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/ConcreteVisitor2.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base; 2 | 3 | /** 4 | * 具体访问者2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteVisitor2 implements Visitor { 11 | @Override 12 | public void visitA(ConcreteElementA element) { 13 | System.out.println("ConcreteVisitor2包装新操作: " + element.operation()); 14 | } 15 | 16 | @Override 17 | public void visitB(ConcreteElementB element) { 18 | System.out.println("ConcreteVisitor2包装新操作: " + element.operation()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/Element.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base; 2 | 3 | /** 4 | * 抽象组件类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Element { 11 | 12 | public void accept(Visitor visitor); 13 | 14 | public String operation(); 15 | } 16 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/Visitor.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base; 2 | 3 | /** 4 | * 抽象访问者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Visitor { 11 | 12 | /** 13 | * 访问A,相当于给元素A添加访问者的功能 14 | * 15 | * @param element 16 | */ 17 | public void visitA(ConcreteElementA element); 18 | 19 | /** 20 | * 访问B,相当于给元素B添加访问者的功能 21 | * 22 | * @param element 23 | */ 24 | public void visitB(ConcreteElementB element); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base/visitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/310visitor/com/css/visitor/base/visitor.png -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base0/ConcreteVisitor1.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base0; 2 | 3 | /** 4 | * 具体访问者1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteVisitor1 implements Visitor { 11 | @Override 12 | public void visitA(Element element) { 13 | System.out.println("ConcreteVisitor1包装新操作: " + element.operation()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base0/ConcreteVisitor2.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base0; 2 | 3 | /** 4 | * 具体访问者2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteVisitor2 implements Visitor { 11 | @Override 12 | public void visitA(Element element) { 13 | System.out.println("ConcreteVisitor2包装新操作: " + element.operation()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base0/Element.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base0; 2 | 3 | /** 4 | * 组件类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Element { 11 | private Visitor visitor; 12 | 13 | public void accept(Visitor visitor) { 14 | this.visitor = visitor; 15 | this.visitor.visitA(this); 16 | } 17 | 18 | public String operation() { 19 | return "Element"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base0/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base0; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | // 初始化元素 13 | Element element = new Element(); 14 | 15 | Visitor visior1 = new ConcreteVisitor1(); 16 | Visitor visior2 = new ConcreteVisitor2(); 17 | 18 | // 回调注入 19 | element.accept(visior1); 20 | element.accept(visior2); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base0/Visitor.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.base0; 2 | 3 | /** 4 | * 抽象访问者 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Visitor { 11 | 12 | /** 13 | * 访问A,相当于给元素A添加访问者的功能 14 | * 15 | * @param element 16 | */ 17 | public void visitA(Element element); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/base0/visitor0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/310visitor/com/css/visitor/base0/visitor0.png -------------------------------------------------------------------------------- /310visitor/com/css/visitor/course/Course.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.course; 2 | 3 | /** 4 | * 课程组件实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Course extends Element { 11 | private double price; 12 | 13 | public Course(String name, double price) { 14 | this.name = name; 15 | this.price = price; 16 | } 17 | 18 | public double getPrice() { 19 | return this.price; 20 | } 21 | 22 | @Override 23 | public void accept(IVisitor visitor) { 24 | visitor.visitCourse(this); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/course/IVisitor.java: -------------------------------------------------------------------------------- 1 | package com.css.visitor.course; 2 | 3 | /** 4 | * 抽象访问者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface IVisitor { 11 | 12 | public void visitCatalog(CourseCatalog catalog); 13 | 14 | public void visitCourse(Course course); 15 | } 16 | -------------------------------------------------------------------------------- /310visitor/com/css/visitor/course/visitorcourse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/310visitor/com/css/visitor/course/visitorcourse.png -------------------------------------------------------------------------------- /31Template/com/css/template/base/AbstractClass.java: -------------------------------------------------------------------------------- 1 | package com.css.template.base; 2 | 3 | /** 4 | * 抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class AbstractClass { 11 | // 模板方法 12 | public void templateMethod() { 13 | operation1(); 14 | operation2(); 15 | operation3(); 16 | } 17 | 18 | // 具体方法 19 | private void operation1() { 20 | System.out.println("operation1"); 21 | } 22 | 23 | // 抽象方法 24 | public abstract void operation2(); 25 | 26 | // 钩子方法 27 | protected void operation3() { 28 | } 29 | } -------------------------------------------------------------------------------- /31Template/com/css/template/base/ConcreteClass1.java: -------------------------------------------------------------------------------- 1 | package com.css.template.base; 2 | 3 | /** 4 | * 具体实现子类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteClass1 extends AbstractClass { 11 | @Override 12 | public void operation2() { 13 | System.out.println("ConcreteClass1.operation2"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /31Template/com/css/template/base/ConcreteClass2.java: -------------------------------------------------------------------------------- 1 | package com.css.template.base; 2 | 3 | /** 4 | * 具体实现子类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteClass2 extends AbstractClass { 11 | 12 | @Override 13 | public void operation2() { 14 | System.out.println("ConcreteClass2.operation2"); 15 | 16 | } 17 | 18 | @Override 19 | protected void operation3() { 20 | System.out.println("这是一个扩展的ConcreteClass2.operation3"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /31Template/com/css/template/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.template.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | AbstractClass temp1 = new ConcreteClass1(); 14 | temp1.templateMethod(); 15 | 16 | System.out.println("------------------------------------"); 17 | 18 | AbstractClass temp2 = new ConcreteClass2(); 19 | temp2.templateMethod(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /31Template/com/css/template/base/template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/31Template/com/css/template/base/template.png -------------------------------------------------------------------------------- /32strategy/com/css/strategy/base/ConcreteStrategy1.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.base; 2 | 3 | /** 4 | * 具体策略类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteStrategy1 implements Strategy { 11 | 12 | public void algorithm() { 13 | System.out.println("具体策略1的运算法则"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/base/ConcreteStrategy2.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.base; 2 | 3 | /** 4 | * 具体策略类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteStrategy2 implements Strategy { 11 | 12 | public void algorithm() { 13 | System.out.println("具体策略2的运算法则"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/base/Context.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.base; 2 | 3 | /** 4 | * 环境类,会持有一个具体的策略对象 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Context { 11 | // 抽象策略 12 | private Strategy strategy; 13 | 14 | // 构造函数设置具体策略 15 | public Context(Strategy strategy) { 16 | this.strategy = strategy; 17 | } 18 | 19 | // 封装后的策略方法 20 | public void algorithm() { 21 | System.out.println("begin"); 22 | this.strategy.algorithm(); 23 | System.out.println("end"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/base/Strategy.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.base; 2 | 3 | /** 4 | * 抽象策略类,定义算法的接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Strategy { 11 | /** 12 | * 某个算法的接口,可以有传入参数,也可以有返回值 13 | */ 14 | public void algorithm(); 15 | } 16 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.base; 2 | 3 | /** 4 | * 测试 5 | */ 6 | public class Test { 7 | 8 | public static void main(String[] args) { 9 | // 创建一个具体的策略对象 10 | Strategy strategy = new ConcreteStrategy1(); 11 | // 创建上下文对象,传入具体策略对象 12 | Context context = new Context(strategy); 13 | // 执行算法 14 | context.algorithm(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/base/strategy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/32strategy/com/css/strategy/base/strategy.png -------------------------------------------------------------------------------- /32strategy/com/css/strategy/log/DbLog.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.log; 2 | 3 | /** 4 | * 把日志记录到数据库 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class DbLog implements LogStrategy { 11 | public void log(String msg) { 12 | if (msg != null && msg.trim().length() > 5) { 13 | throw new RuntimeException("数据库出错了"); 14 | } 15 | System.out.println("把 '" + msg + "' 记录到数据库中"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/log/FileLog.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.log; 2 | 3 | /** 4 | * 把日志记录到文件 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class FileLog implements LogStrategy { 11 | public void log(String msg) { 12 | System.out.println("把 '" + msg + "' 记录到文件中"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/log/LogContext.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.log; 2 | 3 | /** 4 | * 日志记录的上下文 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class LogContext { 11 | /** 12 | * 记录日志的方法,提供给客户端使用 13 | * 14 | * @param msg 需记录的日志信息 15 | */ 16 | public void log(String msg) { 17 | // 在上下文里面,自行实现对具体策略的选择 18 | // 优先选用策略:记录到数据库 19 | LogStrategy strategy = new DbLog(); 20 | try { 21 | strategy.log(msg); 22 | } catch (Exception ex) { 23 | // 出错了,那就记录到文件中 24 | strategy = new FileLog(); 25 | strategy.log(msg); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/log/LogStrategy.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.log; 2 | 3 | /** 4 | * 日志记录策略的接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface LogStrategy { 11 | /** 12 | * 记录日志 13 | * 14 | * @param msg 需记录的日志信息 15 | */ 16 | public void log(String msg); 17 | } 18 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/log/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.log; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | LogContext log = new LogContext(); 13 | log.log("记日志"); 14 | log.log("这是一个长记录日志1"); 15 | log.log("记录日志"); 16 | log.log("这是一个长记录日志2"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/promotion/CashNormal.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.promotion; 2 | 3 | import java.math.BigDecimal; 4 | 5 | /** 6 | * 原价策略实现类 7 | */ 8 | public class CashNormal implements IPromotionStrategy { 9 | 10 | private BigDecimal price; 11 | 12 | @Override 13 | public BigDecimal promotionAlgorithm() { 14 | return this.price; 15 | } 16 | 17 | public void setPrice(BigDecimal price) { 18 | this.price = price; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/promotion/CashRebate.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.promotion; 2 | 3 | import java.math.BigDecimal; 4 | 5 | /** 6 | * 打折策略实现类 7 | */ 8 | public class CashRebate implements IPromotionStrategy { 9 | 10 | private BigDecimal price; 11 | 12 | private BigDecimal rate; 13 | 14 | public CashRebate(BigDecimal rate) { 15 | this.rate = rate; 16 | } 17 | 18 | @Override 19 | public BigDecimal promotionAlgorithm() { 20 | return this.price.multiply(this.rate); 21 | } 22 | 23 | public void setPrice(BigDecimal price) { 24 | this.price = price; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/promotion/IPromotionStrategy.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.promotion; 2 | 3 | import java.math.BigDecimal; 4 | 5 | /** 6 | * 促销抽象策略类 7 | */ 8 | public interface IPromotionStrategy { 9 | 10 | /** 11 | * 计算逻辑 12 | */ 13 | public BigDecimal promotionAlgorithm(); 14 | 15 | /** 16 | * 存入价钱 17 | * 18 | * @param price 19 | */ 20 | public void setPrice(BigDecimal price); 21 | } 22 | -------------------------------------------------------------------------------- /32strategy/com/css/strategy/promotion/promotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/32strategy/com/css/strategy/promotion/promotion.png -------------------------------------------------------------------------------- /32strategy/com/css/strategy/sort/ArrayHandler.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.sort; 2 | 3 | /** 4 | * 数组排序处理类-环境类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ArrayHandler { 11 | private Sort sortObj; 12 | 13 | public ArrayHandler(Sort sortObj) { 14 | this.sortObj = sortObj; 15 | } 16 | 17 | public int[] sort(int arr[]) { 18 | sortObj.sort(arr); 19 | return arr; 20 | } 21 | } -------------------------------------------------------------------------------- /32strategy/com/css/strategy/sort/BubbleSort.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.sort; 2 | 3 | /** 4 | * 冒泡排序 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class BubbleSort implements Sort { 11 | public int[] sort(int arr[]) { 12 | int len = arr.length; 13 | for (int i = 0; i < len; i++) { 14 | for (int j = i + 1; j < len; j++) { 15 | int temp; 16 | if (arr[i] > arr[j]) { 17 | temp = arr[j]; 18 | arr[j] = arr[i]; 19 | arr[i] = temp; 20 | } 21 | } 22 | } 23 | System.out.println("冒泡排序"); 24 | return arr; 25 | } 26 | } -------------------------------------------------------------------------------- /32strategy/com/css/strategy/sort/InsertionSort.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.sort; 2 | 3 | /** 4 | * 插入排序 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class InsertionSort implements Sort { 11 | public int[] sort(int arr[]) { 12 | int len = arr.length; 13 | for (int i = 1; i < len; i++) { 14 | int j; 15 | int temp = arr[i]; 16 | for (j = i; j > 0; j--) { 17 | if (arr[j - 1] > temp) { 18 | arr[j] = arr[j - 1]; 19 | 20 | } else 21 | break; 22 | } 23 | arr[j] = temp; 24 | } 25 | System.out.println("插入排序"); 26 | return arr; 27 | } 28 | } -------------------------------------------------------------------------------- /32strategy/com/css/strategy/sort/Sort.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.sort; 2 | 3 | /** 4 | * 排序算法抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Sort { 11 | public abstract int[] sort(int arr[]); 12 | } -------------------------------------------------------------------------------- /32strategy/com/css/strategy/sort/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.strategy.sort; 2 | 3 | import java.util.Arrays; 4 | 5 | /** 6 | * 测试 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * CSS. WangWeidong 11 | */ 12 | public class Test { 13 | public static void main(String args[]) { 14 | int arr[] = { 1, 4, 6, 2, 5, 3, 7, 10, 9 }; 15 | 16 | Sort sort=new BubbleSort(); 17 | 18 | ArrayHandler ah = new ArrayHandler(sort);// 设置具体策略 19 | 20 | int result[] = ah.sort(arr); 21 | 22 | System.out.println(Arrays.toString(result)); 23 | } 24 | } -------------------------------------------------------------------------------- /33state/com/css/state/base/ConcreteStateA.java: -------------------------------------------------------------------------------- 1 | package com.css.state.base; 2 | 3 | /** 4 | * 具体状态类A 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteStateA implements State { 11 | @Override 12 | public void handle(Context context) { 13 | System.out.println("开"); 14 | context.setState(new ConcreteStateB()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /33state/com/css/state/base/ConcreteStateB.java: -------------------------------------------------------------------------------- 1 | package com.css.state.base; 2 | 3 | /** 4 | * 具体状态类B 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteStateB implements State { 11 | @Override 12 | public void handle(Context context) { 13 | System.out.println("关"); 14 | context.setState(new ConcreteStateA()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /33state/com/css/state/base/State.java: -------------------------------------------------------------------------------- 1 | package com.css.state.base; 2 | 3 | /** 4 | * 抽象状态类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface State { 11 | public void handle(Context context); 12 | } 13 | -------------------------------------------------------------------------------- /33state/com/css/state/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.state.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | // 创建当前具体状态类 14 | State state = new ConcreteStateA(); 15 | // 创建状态上下文 16 | Context context = new Context(state); 17 | // 执行请求,通常自动完成状态切换 18 | context.request(); 19 | 20 | context.request(); 21 | context.request(); 22 | context.request(); 23 | context.request(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /33state/com/css/state/base/state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/33state/com/css/state/base/state.png -------------------------------------------------------------------------------- /33state/com/css/state/forum/HighState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.forum; 2 | 3 | /** 4 | * 高级用户状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HighState extends AbstractState { 11 | 12 | public HighState(String stateName, int point) { 13 | super(stateName, point); 14 | this.discount = 3; 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /33state/com/css/state/forum/MiddleState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.forum; 2 | 3 | /** 4 | * 中级用户状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class MiddleState extends AbstractState { 11 | 12 | public MiddleState(String stateName, int point) { 13 | super(stateName, point); 14 | this.discount = 2; 15 | } 16 | } -------------------------------------------------------------------------------- /33state/com/css/state/forum/PrimaryState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.forum; 2 | 3 | /** 4 | * 初级用户状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class PrimaryState extends AbstractState { 11 | 12 | public PrimaryState(String stateName, int point) { 13 | super(stateName, point); 14 | this.discount = 1; 15 | } 16 | 17 | public void downloadFile(ForumAccount acc, int score) { 18 | System.out.println("对不起," + acc.getName() + ",您没有下载文件的权限!"); 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /33state/com/css/state/forum/State.java: -------------------------------------------------------------------------------- 1 | package com.css.state.forum; 2 | 3 | /** 4 | * 状态工厂类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class State { 11 | public final static PrimaryState PRIMARY = new PrimaryState("初级", 0); 12 | public final static MiddleState MIDDLE = new MiddleState("中级", 100); 13 | public final static HighState HIGH = new HighState("高级", 1000); 14 | } 15 | -------------------------------------------------------------------------------- /33state/com/css/state/forum/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.state.forum; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String args[]) { 12 | ForumAccount account = new ForumAccount("张三"); 13 | 14 | account.writeNote(20); 15 | 16 | account.downloadFile(20); 17 | 18 | account.replyNote(100); 19 | 20 | account.writeNote(40); 21 | 22 | account.downloadFile(80); 23 | 24 | account.downloadFile(322); 25 | 26 | account.writeNote(1000); 27 | 28 | account.downloadFile(80); 29 | } 30 | } -------------------------------------------------------------------------------- /33state/com/css/state/forum/forum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/33state/com/css/state/forum/forum.png -------------------------------------------------------------------------------- /33state/com/css/state/player/PauseState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.player; 2 | 3 | /** 4 | * 暂停状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class PauseState extends PlayerState { 11 | 12 | public void pause(MediaPlayer player) { 13 | System.out.println("暂停播放视频"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /33state/com/css/state/player/PlayState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.player; 2 | 3 | /** 4 | * 播放状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class PlayState extends PlayerState { 11 | 12 | public void play(MediaPlayer player) { 13 | System.out.println("正常播放视频的状态"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /33state/com/css/state/player/SpeedState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.player; 2 | 3 | /** 4 | * 加速状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SpeedState extends PlayerState { 11 | 12 | public void speed(MediaPlayer player) { 13 | System.out.println("快进播放视频"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /33state/com/css/state/player/State.java: -------------------------------------------------------------------------------- 1 | package com.css.state.player; 2 | 3 | /** 4 | * 状态工厂类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class State { 11 | // 播放 12 | public final static PlayState PLAY_STATE = new PlayState(); 13 | 14 | // 停止 15 | public final static StopState STOP_STATE = new StopState(); 16 | 17 | // 快进 18 | public final static SpeedState SPEED_STATE = new SpeedState(); 19 | 20 | // 暂停 21 | public final static PauseState PAUSE_STATE = new PauseState(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /33state/com/css/state/player/StopState.java: -------------------------------------------------------------------------------- 1 | package com.css.state.player; 2 | 3 | /** 4 | * 停止状态实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class StopState extends PlayerState { 11 | 12 | public void speed(MediaPlayer player) { 13 | System.out.println("ERROR 停止状态不能快进!!!"); 14 | } 15 | 16 | public void pause(MediaPlayer player) { 17 | System.out.println("ERROR 停止状态不能暂停!!!"); 18 | } 19 | 20 | public void stop(MediaPlayer player) { 21 | System.out.println("停止播放视频。"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /33state/com/css/state/player/playerstate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/33state/com/css/state/player/playerstate.png -------------------------------------------------------------------------------- /34command/com/css/command/base/Command.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 抽象命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Command { 11 | protected Receiver[] receivers; 12 | 13 | public Command(Receiver... receivers) { 14 | this.receivers = receivers; 15 | } 16 | 17 | public abstract void execute(); 18 | } 19 | -------------------------------------------------------------------------------- /34command/com/css/command/base/ConcreteCommand1.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 具体命令类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteCommand1 extends Command { 11 | 12 | public ConcreteCommand1(Receiver... receivers) { 13 | super(receivers); 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | for (Receiver receiver : receivers) 19 | receiver.action("concrete command 1."); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /34command/com/css/command/base/ConcreteCommand2.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 具体命令类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteCommand2 extends Command { 11 | 12 | public ConcreteCommand2(Receiver receiver) { 13 | super(receiver); 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | receivers[0].action("concrete command 2."); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /34command/com/css/command/base/ConcreteReceiver1.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 具体命令接收者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteReceiver1 implements Receiver { 11 | 12 | // 每个接受者都必须处理一定的业务逻辑 13 | public void action(String name) { 14 | System.out.println("ConcreteReciver1 reciver message: " + name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /34command/com/css/command/base/ConcreteReceiver2.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 具体命令接收者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteReceiver2 implements Receiver { 11 | 12 | // 每个接受者都必须处理一定的业务逻辑 13 | public void action(String name) { 14 | System.out.println("ConcreteReciver2 reciver message: " + name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /34command/com/css/command/base/ConcreteReciver1.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 具体命令接收者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteReciver1 implements Receiver { 11 | 12 | // 每个接受者都必须处理一定的业务逻辑 13 | public void action(String name) { 14 | System.out.println("ConcreteReciver1 reciver message: " + name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /34command/com/css/command/base/ConcreteReciver2.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 具体命令接收者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteReciver2 implements Receiver { 11 | 12 | // 每个接受者都必须处理一定的业务逻辑 13 | public void action(String name) { 14 | System.out.println("ConcreteReciver2 reciver message: " + name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /34command/com/css/command/base/Invoker.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 命令执行者/调用者 8 | * 9 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 10 | * 11 | * CSS. WangWeidong 12 | */ 13 | public class Invoker { 14 | 15 | private List commands = new ArrayList<>(); 16 | 17 | public void addCommand(Command command) { 18 | commands.add(command); 19 | } 20 | 21 | public void execute() { 22 | commands.forEach(Command::execute); 23 | commands.clear(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /34command/com/css/command/base/Receiver.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base; 2 | 3 | /** 4 | * 抽象命令接收者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Receiver { 11 | 12 | public void action(String name); 13 | } 14 | -------------------------------------------------------------------------------- /34command/com/css/command/base/command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/34command/com/css/command/base/command.png -------------------------------------------------------------------------------- /34command/com/css/command/base0/Command.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base0; 2 | 3 | /** 4 | * 抽象命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Command { 11 | public abstract void execute(); 12 | } 13 | -------------------------------------------------------------------------------- /34command/com/css/command/base0/ConcreteCommand1.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base0; 2 | 3 | /** 4 | * 具体命令类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteCommand1 extends Command { 11 | 12 | @Override 13 | public void execute() { 14 | System.out.println("concrete command 1."); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /34command/com/css/command/base0/ConcreteCommand2.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base0; 2 | 3 | /** 4 | * 具体命令类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteCommand2 extends Command { 11 | 12 | @Override 13 | public void execute() { 14 | System.out.println("concrete command 2."); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /34command/com/css/command/base0/Invoker.java: -------------------------------------------------------------------------------- 1 | package com.css.command.base0; 2 | 3 | /** 4 | * 命令执行者/调用者 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Invoker { 11 | 12 | private Command command; 13 | 14 | public void setCommand(Command command) { 15 | this.command = command; 16 | } 17 | 18 | public void execute() { 19 | command.execute(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /34command/com/css/command/base0/command0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/34command/com/css/command/base0/command0.png -------------------------------------------------------------------------------- /34command/com/css/command/calculator/AddCommand.java: -------------------------------------------------------------------------------- 1 | package com.css.command.calculator; 2 | 3 | /** 4 | * 加法命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class AddCommand extends Command { 11 | public AddCommand() { 12 | this.name = "加法"; 13 | } 14 | 15 | public void execute(int value) { 16 | this.value = value; 17 | result += value; 18 | } 19 | 20 | public void undo() { 21 | result -= value; 22 | } 23 | } -------------------------------------------------------------------------------- /34command/com/css/command/calculator/Command.java: -------------------------------------------------------------------------------- 1 | package com.css.command.calculator; 2 | 3 | /** 4 | * 抽象命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Command { 11 | protected int result = 0; 12 | protected int value; 13 | protected String name; 14 | 15 | public abstract void execute(int value); 16 | 17 | public abstract void undo(); 18 | } 19 | -------------------------------------------------------------------------------- /34command/com/css/command/calculator/MultiCommand.java: -------------------------------------------------------------------------------- 1 | package com.css.command.calculator; 2 | 3 | /** 4 | * 乘法命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class MultiCommand extends Command { 11 | public MultiCommand() { 12 | this.name = "乘法"; 13 | } 14 | 15 | public void execute(int value) { 16 | this.value = value; 17 | result *= value; 18 | } 19 | 20 | public void undo() { 21 | result /= value; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /34command/com/css/command/calculator/calculator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/34command/com/css/command/calculator/calculator.png -------------------------------------------------------------------------------- /34command/com/css/command/tv/Command.java: -------------------------------------------------------------------------------- 1 | package com.css.command.tv; 2 | 3 | /** 4 | * 抽象命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Command { 11 | protected Television tv; 12 | 13 | public Command(Television tv) { 14 | this.tv = tv; 15 | } 16 | 17 | public abstract void execute(); 18 | } -------------------------------------------------------------------------------- /34command/com/css/command/tv/TVChangeCommand.java: -------------------------------------------------------------------------------- 1 | package com.css.command.tv; 2 | 3 | /** 4 | * 换台命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class TVChangeCommand extends Command { 11 | public TVChangeCommand(Television tv) { 12 | super(tv); 13 | } 14 | 15 | public void execute() { 16 | tv.change(); 17 | } 18 | } -------------------------------------------------------------------------------- /34command/com/css/command/tv/TVCloseCommand.java: -------------------------------------------------------------------------------- 1 | package com.css.command.tv; 2 | 3 | /** 4 | * 关闭命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class TVCloseCommand extends Command { 11 | public TVCloseCommand(Television tv) { 12 | super(tv); 13 | } 14 | 15 | public void execute() { 16 | tv.close(); 17 | } 18 | } -------------------------------------------------------------------------------- /34command/com/css/command/tv/TVOpenCommand.java: -------------------------------------------------------------------------------- 1 | package com.css.command.tv; 2 | 3 | /** 4 | * 打开命令类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class TVOpenCommand extends Command { 11 | public TVOpenCommand(Television tv) { 12 | super(tv); 13 | } 14 | 15 | public void execute() { 16 | tv.open(); 17 | } 18 | } -------------------------------------------------------------------------------- /34command/com/css/command/tv/Television.java: -------------------------------------------------------------------------------- 1 | package com.css.command.tv; 2 | 3 | /** 4 | * 电视机操作类-命令接收者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Television { 11 | public void open() { 12 | System.out.println("打开电视机!"); 13 | } 14 | 15 | public void close() { 16 | System.out.println("关闭电视机!"); 17 | } 18 | 19 | public void change() { 20 | System.out.println("切换电视频道!"); 21 | } 22 | } -------------------------------------------------------------------------------- /34command/com/css/command/tv/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.command.tv; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String a[]) { 12 | 13 | Television tv = new Television(); 14 | 15 | Command openCommand = new TVOpenCommand(tv); 16 | Command closeCommand = new TVCloseCommand(tv); 17 | Command changeCommand = new TVChangeCommand(tv); 18 | 19 | Controller control = new Controller(openCommand, closeCommand, changeCommand); 20 | control.open(); 21 | control.change(); 22 | control.close(); 23 | } 24 | } -------------------------------------------------------------------------------- /35observer/com/css/observer/base/ConcreteObserver1.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.base; 2 | 3 | /** 4 | * 具体观察者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver1 implements Observer { 11 | @Override 12 | public void response(String message) { 13 | System.out.println("观察者1收到:" + message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /35observer/com/css/observer/base/ConcreteObserver2.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.base; 2 | 3 | /** 4 | * 具体观察者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver2 implements Observer { 11 | @Override 12 | public void response(String message) { 13 | System.out.println("观察者2收到:" + message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /35observer/com/css/observer/base/Observer.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.base; 2 | 3 | /** 4 | * 抽象观察者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Observer { 11 | public void response(String message); 12 | } 13 | -------------------------------------------------------------------------------- /35observer/com/css/observer/base/observer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/35observer/com/css/observer/base/observer.png -------------------------------------------------------------------------------- /35observer/com/css/observer/chain1/ConcreteObserver1.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain1; 2 | 3 | /** 4 | * 具体观察者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver1 extends Subject implements Observer { 11 | @Override 12 | public void response(String message) { 13 | System.out.println("观察者1收到:" + message); 14 | super.notifyObserver(message); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain1/ConcreteObserver2.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain1; 2 | 3 | /** 4 | * 具体观察者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver2 extends Subject implements Observer { 11 | @Override 12 | public void response(String message) { 13 | System.out.println("观察者2收到:" + message); 14 | super.notifyObserver(message); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain1/Observer.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain1; 2 | 3 | /** 4 | * 抽象观察者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Observer { 11 | public void response(String message); 12 | 13 | public void add(Observer observer); 14 | } 15 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain1/obseverchain1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/35observer/com/css/observer/chain1/obseverchain1.png -------------------------------------------------------------------------------- /35observer/com/css/observer/chain2/ConcreteObserver1.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain2; 2 | 3 | /** 4 | * 具体观察者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver1 extends Observer { 11 | @Override 12 | public void response(String message) { 13 | System.out.println("观察者1收到:" + message); 14 | super.notifyObserver(message); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain2/ConcreteObserver2.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain2; 2 | 3 | /** 4 | * 具体观察者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver2 extends Observer { 11 | @Override 12 | public void response(String message) { 13 | System.out.println("观察者2收到:" + message); 14 | super.notifyObserver(message); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain2/obseverchain2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/35observer/com/css/observer/chain2/obseverchain2.png -------------------------------------------------------------------------------- /35observer/com/css/observer/chain3/ConcreteObserver1.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain3; 2 | 3 | /** 4 | * 具体观察者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver1 extends Observer { 11 | 12 | public ConcreteObserver1(String name) { 13 | super(name); 14 | } 15 | 16 | @Override 17 | public void response(String message, String from) { 18 | System.out.println("观察者1[" + this.name + "]收到[" + from + "]: " + message); 19 | super.notifyObserver(message); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain3/ConcreteObserver2.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.chain3; 2 | 3 | /** 4 | * 具体观察者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteObserver2 extends Observer { 11 | 12 | public ConcreteObserver2(String name) { 13 | super(name); 14 | } 15 | 16 | @Override 17 | public void response(String message, String from) { 18 | System.out.println("观察者2[" + this.name + "]收到[" + from + "]: " + message); 19 | super.notifyObserver(message); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /35observer/com/css/observer/chain3/obseverchain3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/35observer/com/css/observer/chain3/obseverchain3.png -------------------------------------------------------------------------------- /35observer/com/css/observer/eventbus/IntegerObserver.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.eventbus; 2 | 3 | import com.google.common.eventbus.Subscribe; 4 | 5 | /** 6 | * 整数消息-观察者类 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * CSS. WangWeidong 11 | */ 12 | public class IntegerObserver { 13 | @Subscribe 14 | public void sub(Integer message) { 15 | System.out.println("IntegerObserver, 这是收到的 Integer 消息: " + message); 16 | } 17 | } -------------------------------------------------------------------------------- /35observer/com/css/observer/eventbus/StringObserver.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.eventbus; 2 | 3 | import com.google.common.eventbus.Subscribe; 4 | 5 | /** 6 | * 字符串消息-观察者类 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * CSS. WangWeidong 11 | */ 12 | public class StringObserver { 13 | @Subscribe 14 | public void sub(String message) { 15 | System.out.println("StringObserver, 这是收到的 String 消息: " + message); 16 | } 17 | } -------------------------------------------------------------------------------- /35observer/com/css/observer/message/JavaDirector.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.message; 2 | 3 | /** 4 | * 具体观察者类-java系主任 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class JavaDirector extends Teacher { 11 | 12 | public JavaDirector(String teacherName) { 13 | super(teacherName); 14 | this.teacherType = "主任"; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /35observer/com/css/observer/message/JavaTeacher.java: -------------------------------------------------------------------------------- 1 | package com.css.observer.message; 2 | 3 | /** 4 | * 具体观察者类-Java课老师 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class JavaTeacher extends Teacher { 11 | 12 | public JavaTeacher(String teacherName) { 13 | super(teacherName); 14 | this.teacherType = "老师"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /36chain/com/css/chain/approver/Congress.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.approver; 2 | 3 | /** 4 | * 副董事长类:具体处理者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Congress extends Approver { 11 | public Congress(String name) { 12 | super(name); 13 | } 14 | 15 | // 定义自己的处理逻辑 16 | public void handleRequest(PurchaseRequest request) { 17 | handle(request, Integer.MAX_VALUE); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /36chain/com/css/chain/approver/Director.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.approver; 2 | 3 | /** 4 | * 主任类:具体处理者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Director extends Approver { 11 | public Director(String name) { 12 | super(name); 13 | } 14 | 15 | // 定义自己的处理逻辑 16 | public void handleRequest(PurchaseRequest request) { 17 | handle(request, 300000); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /36chain/com/css/chain/approver/President.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.approver; 2 | 3 | /** 4 | * 董事长类:具体处理者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class President extends Approver { 11 | public President(String name) { 12 | super(name); 13 | } 14 | 15 | // 定义自己的处理逻辑 16 | public void handleRequest(PurchaseRequest request) { 17 | handle(request, 10000000); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /36chain/com/css/chain/approver/VicePresident.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.approver; 2 | 3 | /** 4 | * 副董事长类:具体处理者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class VicePresident extends Approver { 11 | public VicePresident(String name) { 12 | super(name); 13 | } 14 | 15 | // 定义自己的处理逻辑 16 | public void handleRequest(PurchaseRequest request) { 17 | handle(request, 3000000); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base/ConcreteHandler1.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base; 2 | 3 | /** 4 | * 具体处理者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler1 extends Handler { 11 | // 定义自己的处理逻辑 12 | public void handleRequest(String request, int condition) { 13 | if (condition == 1) { 14 | System.out.println(this.getClass().getSimpleName() + "处理请求: " + request); 15 | } else {// 不满足条件则转发请求 16 | if (this.successor != null) 17 | this.successor.handleRequest(request, condition); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base/ConcreteHandler2.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base; 2 | 3 | /** 4 | * 具体处理者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler2 extends Handler { 11 | // 定义自己的处理逻辑 12 | public void handleRequest(String request, int condition) { 13 | if (condition == 2) { 14 | System.out.println(this.getClass().getSimpleName() + "处理请求: " + request); 15 | } else {// 不满足条件则转发请求 16 | if (this.successor != null) 17 | this.successor.handleRequest(request, condition); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base/ConcreteHandler3.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base; 2 | 3 | /** 4 | * 具体处理者类3 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler3 extends Handler { 11 | // 定义自己的处理逻辑 12 | public void handleRequest(String request, int condition) { 13 | if (condition == 3) { 14 | System.out.println(this.getClass().getSimpleName() + "处理请求: " + request); 15 | } else {// 不满足条件则转发请求 16 | if (this.successor != null) 17 | this.successor.handleRequest(request, condition); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /36chain/com/css/chain/base/Handler.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base; 2 | 3 | /** 4 | * 抽象处理类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Handler { 11 | public Handler successor; 12 | 13 | // 设置下一个处理者是谁 14 | public void setNext(Handler successor) { 15 | this.successor = successor; 16 | } 17 | 18 | public abstract void handleRequest(String request, int condition); 19 | } 20 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | // 创建所有处理者 13 | Handler handler1 = new ConcreteHandler1(); 14 | Handler handler2 = new ConcreteHandler2(); 15 | Handler handler3 = new ConcreteHandler3(); 16 | // 创建责任链,1-->2-->3 17 | handler1.setNext(handler2); 18 | handler2.setNext(handler3); 19 | // 处理请求,返回结果 20 | handler1.handleRequest("这是一个请求1", 1); 21 | handler1.handleRequest("这是一个请求2", 2); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base/chain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/36chain/com/css/chain/base/chain.png -------------------------------------------------------------------------------- /36chain/com/css/chain/base1/ConcreteHandler1.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base1; 2 | 3 | /** 4 | * 具体处理者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler1 extends Handler { 11 | 12 | @Override 13 | protected boolean checkCondition(int condition) { 14 | return condition==1; 15 | } 16 | 17 | @Override 18 | protected void handleRequest(String request) { 19 | System.out.println(this.getClass().getSimpleName() + "处理请求: " + request); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base1/ConcreteHandler2.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base1; 2 | 3 | /** 4 | * 具体处理者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler2 extends Handler { 11 | 12 | @Override 13 | protected boolean checkCondition(int condition) { 14 | return condition==2; 15 | } 16 | 17 | @Override 18 | protected void handleRequest(String request) { 19 | System.out.println(this.getClass().getSimpleName() + "处理请求: " + request); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base1/ConcreteHandler3.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base1; 2 | 3 | /** 4 | * 具体处理者类3 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler3 extends Handler { 11 | 12 | @Override 13 | protected boolean checkCondition(int condition) { 14 | return condition==3; 15 | } 16 | 17 | @Override 18 | protected void handleRequest(String request) { 19 | System.out.println(this.getClass().getSimpleName() + "处理请求: " + request); 20 | } 21 | } -------------------------------------------------------------------------------- /36chain/com/css/chain/base1/Pipeline.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base1; 2 | 3 | /** 4 | * 流水线类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Pipeline { 11 | private Handler head = null; 12 | private Handler tail = null; 13 | 14 | public void add(Handler handler) { 15 | if (head == null) 16 | head = handler; 17 | else 18 | tail.setNext(handler); 19 | tail = handler; 20 | } 21 | 22 | public void handle(String request, int condition) { 23 | if (head != null) 24 | head.handle(request, condition); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /36chain/com/css/chain/base1/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.chain.base1; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | // 创建流水线 13 | Pipeline pipeline = new Pipeline(); 14 | // 设置链中的阶段顺序,1-->2-->3 15 | pipeline.add(new ConcreteHandler1()); 16 | pipeline.add(new ConcreteHandler2()); 17 | pipeline.add(new ConcreteHandler3()); 18 | // 提交请求,返回结果 19 | pipeline.handle("这是一个请求1", 1); 20 | pipeline.handle("这是一个请求2", 2); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/base/AbstractExpression.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.base; 2 | 3 | /** 4 | * 抽象表达式类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class AbstractExpression { 11 | public abstract void interpret(Context ctx); 12 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/base/Context.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.base; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 环境类Context 8 | * 9 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 10 | * 11 | * CSS. WangWeidong 12 | */ 13 | public class Context { 14 | private Map map = new HashMap<>(); 15 | 16 | public void assign(String key, String value) { 17 | // 往环境类中设值 18 | } 19 | 20 | public String lookup(String key) { 21 | // 获取存储在环境类中的值 22 | return map.get(key); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/base/TerminalExpression.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.base; 2 | 3 | /** 4 | * 终结符表达式 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class TerminalExpression extends AbstractExpression { 11 | 12 | public void interpret(Context ctx) { 13 | // 终结符表达式的解释操作 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/Client.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class Client { 11 | public static void main(String args[]) { 12 | String statement = "3 * 2 * 4 / 6 % 5"; 13 | 14 | Calculator calculator = new Calculator(); 15 | 16 | calculator.build(statement); 17 | 18 | int result = calculator.compute(); 19 | 20 | System.out.println(statement + " = " + result); 21 | } 22 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/DivNode.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 除法实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class DivNode extends SymbolNode { 11 | public DivNode(Node left, Node right) { 12 | super(left, right); 13 | } 14 | 15 | public int interpret() { 16 | return super.left.interpret() / super.right.interpret(); 17 | } 18 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/ModNode.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 取余实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ModNode extends SymbolNode { 11 | public ModNode(Node left, Node right) { 12 | super(left, right); 13 | } 14 | 15 | public int interpret() { 16 | return super.left.interpret() % super.right.interpret(); 17 | } 18 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/MulNode.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 乘法实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class MulNode extends SymbolNode { 11 | public MulNode(Node left, Node right) { 12 | super(left, right); 13 | } 14 | 15 | public int interpret() { 16 | return super.left.interpret() * super.right.interpret(); 17 | } 18 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/Node.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 抽象节点类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Node { 11 | public int interpret(); 12 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/SymbolNode.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 命令符号型节点类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class SymbolNode implements Node { 11 | protected Node left; 12 | protected Node right; 13 | 14 | public SymbolNode(Node left, Node right) { 15 | this.left = left; 16 | this.right = right; 17 | } 18 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/ValueNode.java: -------------------------------------------------------------------------------- 1 | package com.css.interpreter.calculator; 2 | 3 | /** 4 | * 值型节点类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ValueNode implements Node { 11 | private int value; 12 | 13 | public ValueNode(int value) { 14 | this.value = value; 15 | } 16 | 17 | public int interpret() { 18 | return this.value; 19 | } 20 | } -------------------------------------------------------------------------------- /37interpreter/com/css/interpreter/calculator/interpret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/37interpreter/com/css/interpreter/calculator/interpret.png -------------------------------------------------------------------------------- /38memento/com/css/memento/atricle/ArticleMemento.java: -------------------------------------------------------------------------------- 1 | package com.css.memento.atricle; 2 | 3 | /** 4 | * 备忘录的窄接口,没有任何方法定义 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface ArticleMemento { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /38memento/com/css/memento/atricle/ArticleMementoManager.java: -------------------------------------------------------------------------------- 1 | package com.css.memento.atricle; 2 | 3 | import java.util.Stack; 4 | 5 | /** 6 | * 备忘录管理类 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * CSS. WangWeidong 11 | */ 12 | public class ArticleMementoManager { 13 | 14 | private final Stack ARTICLE_MEMENTO_STACK = new Stack<>(); 15 | 16 | public ArticleMemento getMemento() { 17 | return ARTICLE_MEMENTO_STACK.pop(); 18 | } 19 | 20 | public void addMemento(ArticleMemento articleMemento) { 21 | ARTICLE_MEMENTO_STACK.push(articleMemento); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /38memento/com/css/memento/base/Memento.java: -------------------------------------------------------------------------------- 1 | package com.css.memento.base; 2 | 3 | /** 4 | * 备忘录的窄接口,没有任何方法定义 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public interface Memento { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /38memento/com/css/memento/base/MementoImpl.java: -------------------------------------------------------------------------------- 1 | package com.css.memento.base; 2 | 3 | /** 4 | * 真正的备忘录对象,实现备忘录窄接口 实现成私有的内部类,不让外部访问 本例实现包内访问 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | class MementoImpl implements Memento { 11 | private String status; 12 | 13 | public MementoImpl(Originator originator) { 14 | this.status = originator.getStatus(); 15 | } 16 | 17 | public String getStatus() { 18 | return status; 19 | } 20 | 21 | public void setStatus(String status) { 22 | this.status = status; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /38memento/com/css/memento/base/memento.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/38memento/com/css/memento/base/memento.png -------------------------------------------------------------------------------- /39mediator/com/css/mediator/base/Colleague.java: -------------------------------------------------------------------------------- 1 | package com.css.mediator.base; 2 | 3 | /** 4 | * 抽象同事类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Colleague { 11 | 12 | // 中介者抽象类 13 | protected Mediator mediator; 14 | 15 | // 接受消息 16 | public abstract void receive(String message); 17 | 18 | // 发送消息 19 | public abstract void send(String message); 20 | 21 | public void setMediator(Mediator mediator) { 22 | this.mediator = mediator; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /39mediator/com/css/mediator/base/ConcreteColleague1.java: -------------------------------------------------------------------------------- 1 | package com.css.mediator.base; 2 | 3 | /** 4 | * 具体同事类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteColleague1 extends Colleague { 11 | @Override 12 | public void receive(String message) { 13 | System.out.println("colleague1 receive message: " + message); 14 | } 15 | 16 | @Override 17 | public void send(String message) { 18 | System.out.println("colleague1 send message: " + message); 19 | // 请中介者转发 20 | if (this.mediator != null) 21 | this.mediator.relay(this, message); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /39mediator/com/css/mediator/base/ConcreteMediator1.java: -------------------------------------------------------------------------------- 1 | package com.css.mediator.base; 2 | 3 | /** 4 | * 具体中介者类1 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteMediator1 extends Mediator { 11 | 12 | public void relay(Colleague colleague, String message) { 13 | for (Colleague c : colleagues) { 14 | if (!c.equals(colleague)) { 15 | c.receive(message + ", 来自中介ConcreteMediator1发来的消息."); 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /39mediator/com/css/mediator/base/ConcreteMediator2.java: -------------------------------------------------------------------------------- 1 | package com.css.mediator.base; 2 | 3 | /*** 4 | * 具体中介者类2 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public class ConcreteMediator2 extends Mediator { 11 | 12 | public void relay(Colleague colleague, String message) { 13 | for (Colleague c : colleagues) { 14 | if (!c.equals(colleague)) { 15 | c.receive(message + ", 来自中介ConcreteMediator2发来的消息."); 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /39mediator/com/css/mediator/base/mediator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/39mediator/com/css/mediator/base/mediator.png -------------------------------------------------------------------------------- /39mediator/com/css/mediator/message/Mediator.java: -------------------------------------------------------------------------------- 1 | package com.css.mediator.message; 2 | 3 | /** 4 | * 抽象中介者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Mediator { 11 | 12 | // 注册同事 13 | public abstract void register(AbstractUser user); 14 | 15 | // 通知中介者,发送广播消息 16 | public abstract void relay(AbstractUser from, String message); 17 | 18 | // 通知中介者,给指定用户发送消息 19 | public abstract void relayTo(AbstractUser from, AbstractUser to, String message); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /39mediator/com/css/mediator/message/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/39mediator/com/css/mediator/message/message.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 中国软件与技术服务股份有限公司-设计模式培训(Java版) 2 | ## CSS. WangWeidong -------------------------------------------------------------------------------- /other/com/css/other/filter00/Test1.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter00; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test1 { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | msg = msg.replace('<', '[').replace('>', ']'); 15 | 16 | msg = msg.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 17 | 18 | System.out.println(msg); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter01/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter01; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter01/FilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter01; 2 | 3 | /** 4 | * 过滤器工厂抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class FilterFactory { 11 | public abstract Filter getFilter(); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter01/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter01; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter01/HTMLFilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter01; 2 | 3 | /** 4 | * HTML过滤器工厂实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilterFactory extends FilterFactory { 11 | 12 | @Override 13 | public Filter getFilter() { 14 | return new HTMLFilter(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter01/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter01; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter01/SensitiveFilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter01; 2 | 3 | /** 4 | * Sensitive过滤器工厂实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilterFactory extends FilterFactory { 11 | 12 | @Override 13 | public Filter getFilter() { 14 | return new SensitiveFilter(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter02/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter02; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter02/FilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter02; 2 | 3 | /** 4 | * 过滤器工厂类,反射方式实现 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FilterFactory { 11 | 12 | public static Filter getFilter(Class clazz) { 13 | Filter filter = null; 14 | try { 15 | filter = (Filter) Class.forName(clazz.getName()).newInstance(); 16 | } catch (Exception e) { 17 | e.printStackTrace(); 18 | } 19 | return filter; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter02/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter02; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter02/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter02; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter02/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter02; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter f1 = FilterFactory.getFilter(HTMLFilter.class); 15 | 16 | Filter f2 = FilterFactory.getFilter(SensitiveFilter.class); 17 | 18 | msg = f1.doFilter(msg); 19 | msg = f2.doFilter(msg); 20 | 21 | System.out.println(msg); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /other/com/css/other/filter03/Factory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter03; 2 | 3 | /** 4 | * 过滤器抽象工厂类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Factory { 11 | 12 | public abstract Filter getHTMLFilter(); 13 | 14 | public abstract Filter getSensitiveFilter(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter03/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter03; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter03/FilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter03; 2 | 3 | /** 4 | * 过滤器抽象工厂类具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FilterFactory extends Factory { 11 | 12 | @Override 13 | public Filter getHTMLFilter() { 14 | return new HTMLFilter(); 15 | } 16 | 17 | @Override 18 | public Filter getSensitiveFilter() { 19 | return new SensitiveFilter(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter03/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter03; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter03/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter03; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter03/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter03; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Factory filterFactory = new FilterFactory(); 15 | 16 | Filter f1 = filterFactory.getHTMLFilter(); 17 | Filter f2 = filterFactory.getSensitiveFilter(); 18 | 19 | msg = f1.doFilter(msg); 20 | msg = f2.doFilter(msg); 21 | 22 | System.out.println(msg); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /other/com/css/other/filter04/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter04; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter04/FilterChain.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter04; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 过滤链 8 | * 9 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 10 | * 11 | * @author CSS. WangWeidong 12 | */ 13 | public class FilterChain { 14 | List filters = new ArrayList(); 15 | 16 | public FilterChain addFilter(Filter f) { 17 | this.filters.add(f); 18 | return this; 19 | } 20 | 21 | public String doFilter(String str) { 22 | for (Filter f : filters) 23 | str = f.doFilter(str); 24 | return str; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter04/FilterChainBuilder.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter04; 2 | 3 | /** 4 | * 过滤链建造者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FilterChainBuilder { 11 | private FilterChain chain = new FilterChain(); 12 | 13 | public FilterChain getFilterChain() { 14 | return chain; 15 | } 16 | 17 | public FilterChain build() { 18 | return this.chain.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter()); 19 | } 20 | } -------------------------------------------------------------------------------- /other/com/css/other/filter04/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter04; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter04/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter04; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter04/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter04; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | FilterChain chain = new FilterChainBuilder().build(); 15 | msg = chain.doFilter(msg); 16 | 17 | System.out.println(msg); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter05/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter05; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter05/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter05; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter05/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter05; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter filter = new HTMLFilter(); 15 | 16 | FilterChain chain = new FilterChain(filter); 17 | msg = chain.doFilter(msg); 18 | 19 | System.out.println(msg); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter06/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter06; 2 | 3 | /** 4 | * 过滤抽象装饰器类、组件类合二为一 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Filter { 11 | public Filter filter = null; 12 | 13 | public Filter() { 14 | } 15 | 16 | public Filter(Filter filter) { 17 | this.filter = filter; 18 | } 19 | 20 | public String doFilter(String str) { 21 | if (this.filter != null) 22 | str = this.filter.doFilter(str); 23 | return str; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /other/com/css/other/filter06/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter06; 2 | 3 | /** 4 | * HTML过滤器具体装饰类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter extends Filter { 11 | 12 | public HTMLFilter(Filter filter) { 13 | super(filter); 14 | } 15 | 16 | @Override 17 | public String doFilter(String str) { 18 | str = str.replace('<', '[').replace('>', ']'); 19 | return super.doFilter(str); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter06/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter06; 2 | 3 | /** 4 | * Sensitive过滤器具体装饰类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter extends Filter { 11 | 12 | public SensitiveFilter(Filter filter) { 13 | super(filter); 14 | } 15 | 16 | @Override 17 | public String doFilter(String str) { 18 | str = str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 19 | return super.doFilter(str); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter06/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter06; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter f = new Filter(); 15 | f = new HTMLFilter(f); 16 | f = new SensitiveFilter(f); 17 | 18 | msg = f.doFilter(msg); 19 | 20 | System.out.println(msg); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /other/com/css/other/filter07/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter07; 2 | 3 | /** 4 | * 过滤器组件构件 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | 13 | public void addFilter(Filter filter); 14 | } 15 | -------------------------------------------------------------------------------- /other/com/css/other/filter07/FilterChain.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter07; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 过滤链容器构件 8 | * 9 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 10 | * 11 | * @author CSS. WangWeidong 12 | */ 13 | public class FilterChain implements Filter { 14 | List filters = new ArrayList(); 15 | 16 | public void addFilter(Filter f) { 17 | this.filters.add(f); 18 | } 19 | 20 | @Override 21 | public String doFilter(String str) { 22 | for (Filter f : filters) 23 | str = f.doFilter(str); 24 | return str; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter07/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter07; 2 | 3 | /** 4 | * HTML过滤器子构件实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public void addFilter(Filter filter) { 19 | throw new UnsupportedOperationException("不支持添加操作"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter07/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter07; 2 | 3 | /** 4 | * Sensitive过滤器子构件实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | 17 | @Override 18 | public void addFilter(Filter filter) { 19 | throw new UnsupportedOperationException("不支持添加操作"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter07/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter07; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter fc = new FilterChain(); 15 | 16 | fc.addFilter(new HTMLFilter()); 17 | fc.addFilter(new SensitiveFilter()); 18 | 19 | msg = fc.doFilter(msg); 20 | 21 | System.out.println(msg); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /other/com/css/other/filter07/filter07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/other/com/css/other/filter07/filter07.png -------------------------------------------------------------------------------- /other/com/css/other/filter08/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter08; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter08/FilterFactory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter08; 2 | 3 | import java.util.HashMap; 4 | 5 | /** 6 | * 过滤器享元对象工厂类 7 | * 8 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 9 | * 10 | * @author CSS. WangWeidong 11 | */ 12 | public class FilterFactory { 13 | private static final HashMap filterMaps = new HashMap<>(); 14 | static { 15 | filterMaps.put("html", new HTMLFilter()); 16 | filterMaps.put("sensitive", new SensitiveFilter()); 17 | } 18 | 19 | public static Filter getFilter(String type) { 20 | return filterMaps.get(type); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter08/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter08; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter08/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter08; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter08/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter08; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter f1 = FilterFactory.getFilter("html"); 15 | Filter f2 = FilterFactory.getFilter("sensitive"); 16 | 17 | msg = f1.doFilter(msg); 18 | msg = f2.doFilter(msg); 19 | 20 | System.out.println(msg); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /other/com/css/other/filter09/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter09; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter09/FilterUtils.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter09; 2 | 3 | /** 4 | * 过滤器统一入口工具类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FilterUtils { 11 | private static HTMLFilter f1 = new HTMLFilter(); 12 | private static SensitiveFilter f2 = new SensitiveFilter(); 13 | 14 | public String htmlFilter(String str) { 15 | return f1.doFilter(str); 16 | } 17 | 18 | public String sensitiveFilter(String str) { 19 | return f2.doFilter(str); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter09/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter09; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter09/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter09; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter09/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter09; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | FilterUtils filter = new FilterUtils(); 15 | 16 | msg = filter.htmlFilter(msg); 17 | msg = filter.sensitiveFilter(msg); 18 | 19 | System.out.println(msg); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter10/AbstractHandler.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter10; 2 | 3 | /** 4 | * 过滤处理抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class AbstractHandler { 11 | /** 12 | * 关联对象 13 | */ 14 | protected Filter filter; 15 | 16 | 17 | public AbstractHandler(Filter filter) { 18 | this.filter = filter; 19 | } 20 | 21 | public abstract String handle(String str); 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter10/ConcreteFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter10; 2 | 3 | /** 4 | * 过滤器具体实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteFilter implements Filter { 11 | 12 | @Override 13 | public String htmlFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public String sensitiveFilter(String str) { 19 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter10/ConcreteHandler.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter10; 2 | 3 | /** 4 | * 过滤处理修正抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler extends AbstractHandler { 11 | 12 | public ConcreteHandler(Filter filter) { 13 | super(filter); 14 | } 15 | 16 | public String handle(String str) { 17 | str = filter.htmlFilter(str); 18 | str = filter.sensitiveFilter(str); 19 | return str; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter10/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter10; 2 | 3 | /** 4 | * 过滤器实现类接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String htmlFilter(String str); 12 | 13 | public String sensitiveFilter(String str); 14 | } 15 | -------------------------------------------------------------------------------- /other/com/css/other/filter10/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter10; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | AbstractHandler handler = new ConcreteHandler(new ConcreteFilter()); 15 | msg = handler.handle(msg); 16 | 17 | System.out.println(msg); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter11/AbstractHandler.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter11; 2 | 3 | /** 4 | * 过滤处理抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class AbstractHandler { 11 | 12 | public String handle(String str) { 13 | str = htmlFilter(str); 14 | str = sensitiveFilter(str); 15 | return str; 16 | } 17 | 18 | public abstract String htmlFilter(String str); 19 | 20 | public abstract String sensitiveFilter(String str); 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter11/ConcreteHandler.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter11; 2 | 3 | /** 4 | * 过滤处理实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler extends AbstractHandler { 11 | @Override 12 | public String htmlFilter(String str) { 13 | return str.replace('<', '[').replace('>', ']'); 14 | } 15 | 16 | @Override 17 | public String sensitiveFilter(String str) { 18 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter11/ConcreteHandler1.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter11; 2 | 3 | /** 4 | * 过滤处理实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler1 extends AbstractHandler { 11 | 12 | @Override 13 | public String htmlFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public String sensitiveFilter(String str) { 19 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter11/ConcreteHandler2.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter11; 2 | 3 | /** 4 | * 过滤处理实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteHandler2 extends AbstractHandler { 11 | 12 | @Override 13 | public String htmlFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public String sensitiveFilter(String str) { 19 | return str.replace("敏感词1", "好词1").replace("敏感词3", "好词3"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter11/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter11; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | AbstractHandler handler = new ConcreteHandler1(); 15 | msg = handler.handle(msg); 16 | 17 | System.out.println(msg); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter121/ConcreteFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter121; 2 | 3 | /** 4 | * 过滤器具体策略类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteFilter extends Filter { 11 | 12 | @Override 13 | public String htmlFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public String sensitiveFilter(String str) { 19 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter121/Context.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter121; 2 | 3 | /** 4 | * 环境类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Context { 11 | private Filter filter; 12 | 13 | public Context(Filter filter) { 14 | this.filter = filter; 15 | } 16 | 17 | public String handle(String str) { 18 | return filter.doFilter(str); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter121/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter121; 2 | 3 | /** 4 | * 抽象策略类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Filter { 11 | public abstract String htmlFilter(String str); 12 | 13 | public abstract String sensitiveFilter(String str); 14 | 15 | public String doFilter(String str) { 16 | str = htmlFilter(str); 17 | str = sensitiveFilter(str); 18 | return str; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter121/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter121; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Context handler = new Context(new ConcreteFilter()); 15 | msg = handler.handle(msg); 16 | 17 | System.out.println(msg); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /other/com/css/other/filter122/ConcreteFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter122; 2 | 3 | /** 4 | * 过滤器具体策略类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteFilter extends Filter { 11 | 12 | @Override 13 | public String htmlFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public String sensitiveFilter(String str) { 19 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter122/Context.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter122; 2 | 3 | /** 4 | * 环境类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Context { 11 | private Filter filter; 12 | 13 | public Context(Filter filter) { 14 | this.filter = filter; 15 | } 16 | 17 | public String handle(String str) { 18 | str = filter.htmlFilter(str); 19 | str = filter.sensitiveFilter(str); 20 | return str; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter122/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter122; 2 | 3 | /** 4 | * 抽象策略类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Filter { 11 | public abstract String htmlFilter(String str); 12 | 13 | public abstract String sensitiveFilter(String str); 14 | } 15 | -------------------------------------------------------------------------------- /other/com/css/other/filter122/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter122; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Context handler = new Context(new ConcreteFilter()); 15 | msg = handler.handle(msg); 16 | 17 | System.out.println(msg); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /other/com/css/other/filter13/Context.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter13; 2 | 3 | /** 4 | * 状态环境类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Context { 11 | private String message; 12 | private Filter filter; 13 | 14 | public Context(Filter filter, String message) { 15 | this.filter = filter; 16 | this.message = message; 17 | } 18 | 19 | public String handle() { 20 | message = filter.doFilter(this, message); 21 | return message; 22 | } 23 | 24 | public void setFilter(Filter filter) { 25 | this.filter = filter; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /other/com/css/other/filter13/Factory.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter13; 2 | 3 | /** 4 | * 过滤器工厂类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Factory { 11 | public final static Filter HTML_FILTER = new HTMLFilter(); 12 | public final static Filter SENSITIVE_FILTER = new SensitiveFilter(); 13 | } 14 | -------------------------------------------------------------------------------- /other/com/css/other/filter13/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter13; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(Context context, String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter13/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter13; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(Context context, String str) { 14 | str = str.replace('<', '[').replace('>', ']'); 15 | context.setFilter(Factory.SENSITIVE_FILTER); 16 | return str; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /other/com/css/other/filter13/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter13; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(Context context, String str) { 14 | str = str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | context.setFilter(Factory.HTML_FILTER); 16 | return str; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /other/com/css/other/filter13/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter13; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Context context = new Context(Factory.HTML_FILTER, msg); 15 | 16 | msg = context.handle(); 17 | System.out.println(msg); 18 | 19 | msg = context.handle(); 20 | System.out.println(msg); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /other/com/css/other/filter141/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter141; 2 | 3 | /** 4 | * 过滤器命令类接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter141/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter141; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter141/Invoker.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter141; 2 | 3 | /** 4 | * 命令执行者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Invoker { 11 | 12 | private Filter filter; 13 | 14 | public void setFilter(Filter filter) { 15 | this.filter = filter; 16 | } 17 | 18 | public String execute(String str) { 19 | return filter.doFilter(str); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter141/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter141; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter142/ConcreteFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter142; 2 | 3 | /** 4 | * 过滤器命令实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ConcreteFilter extends Filter { 11 | 12 | @Override 13 | public String htmlFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | 17 | @Override 18 | public String sensitiveFilter(String str) { 19 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter142/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter142; 2 | 3 | /** 4 | * 过滤器命令类接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class Filter { 11 | public abstract String htmlFilter(String str); 12 | 13 | public abstract String sensitiveFilter(String str); 14 | 15 | public String doFilter(String str) { 16 | str = htmlFilter(str); 17 | str = sensitiveFilter(str); 18 | return str; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter142/Invoker.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter142; 2 | 3 | /** 4 | * 命令执行者类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Invoker { 11 | private Filter filter; 12 | 13 | public void setFilter(Filter filter) { 14 | this.filter = filter; 15 | } 16 | 17 | public String execute(String str) { 18 | return filter.doFilter(str); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /other/com/css/other/filter142/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter142; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | // 创建执行者 15 | Invoker invoker = new Invoker(); 16 | // 创建命令 17 | Filter f1 = new ConcreteFilter(); 18 | // 添加命令,执行命令 19 | invoker.setFilter(f1); 20 | msg = invoker.execute(msg); 21 | 22 | System.out.println(msg); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /other/com/css/other/filter151/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter151; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Filter { 11 | public String doFilter(String str); 12 | } 13 | -------------------------------------------------------------------------------- /other/com/css/other/filter151/FilterChain.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter151; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 主题类 8 | * 9 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 10 | * 11 | * @author CSS. WangWeidong 12 | */ 13 | public class FilterChain { 14 | List filters = new ArrayList(); 15 | 16 | public void addFilter(Filter f) { 17 | this.filters.add(f); 18 | } 19 | 20 | public String doFilter(String str) { 21 | for (Filter f : filters) 22 | str = f.doFilter(str); 23 | return str; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /other/com/css/other/filter151/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter151; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter151/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter151; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter implements Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter151/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter151; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | FilterChain fc = new FilterChain(); 15 | 16 | fc.addFilter(new HTMLFilter()); 17 | fc.addFilter(new SensitiveFilter()); 18 | 19 | msg = fc.doFilter(msg); 20 | 21 | System.out.println(msg); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /other/com/css/other/filter151/filter1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/other/com/css/other/filter151/filter1.png -------------------------------------------------------------------------------- /other/com/css/other/filter152/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter152; 2 | 3 | /** 4 | * 过滤器接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Filter { 11 | public Filter nextFilter = null; 12 | 13 | public void setNext(Filter filter) { 14 | this.nextFilter = filter; 15 | } 16 | 17 | public String doNext(String str) { 18 | if (this.nextFilter != null) 19 | str = this.nextFilter.doFilter(str); 20 | return str; 21 | } 22 | 23 | public String doFilter(String str) { 24 | return doNext(str); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter152/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter152; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter extends Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | str = str.replace('<', '[').replace('>', ']'); 15 | return super.doNext(str); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /other/com/css/other/filter152/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter152; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter extends Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | str = str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | return super.doNext(str); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /other/com/css/other/filter152/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter152; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter f = new Filter(); 15 | 16 | Filter f1 = new HTMLFilter(); 17 | Filter f2 = new SensitiveFilter(); 18 | f1.setNext(f2); 19 | 20 | f.setNext(f1); 21 | msg = f.doNext(msg); 22 | 23 | System.out.println(msg); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter161/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter161; 2 | 3 | /** 4 | * 过滤处理类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Filter { 11 | public Filter nextFilter = null; 12 | 13 | public void setNext(Filter filter) { 14 | this.nextFilter = filter; 15 | } 16 | 17 | public String doNext(String str) { 18 | if (this.nextFilter != null) 19 | str = this.nextFilter.doFilter(str); 20 | return str; 21 | } 22 | 23 | public String doFilter(String str) { 24 | return doNext(str); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter161/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter161; 2 | 3 | /** 4 | * HTML过滤处理实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter extends Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | str = str.replace('<', '[').replace('>', ']'); 15 | return super.doNext(str); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /other/com/css/other/filter161/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter161; 2 | 3 | /** 4 | * Sensitive过滤处理实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter extends Filter { 11 | 12 | @Override 13 | public String doFilter(String str) { 14 | str = str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | return super.doNext(str); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /other/com/css/other/filter161/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter161; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | Filter f1 = new HTMLFilter(); 15 | Filter f2 = new SensitiveFilter(); 16 | f1.setNext(f2); 17 | 18 | msg = f1.doFilter(msg); 19 | 20 | System.out.println(msg); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /other/com/css/other/filter161/filter2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wang-weidong/css-DesignPattern/212111f5b9c7d3bf54275edc78acccb115d6de44/other/com/css/other/filter161/filter2.png -------------------------------------------------------------------------------- /other/com/css/other/filter162/Filter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter162; 2 | 3 | /** 4 | * 抽象处理类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * CSS. WangWeidong 9 | */ 10 | public abstract class Filter { 11 | public Filter nextFilter; 12 | 13 | // 设置下一个处理者是谁 14 | protected void setNext(Filter nextFilter) { 15 | this.nextFilter = nextFilter; 16 | } 17 | 18 | public String doFilter(String str) { 19 | str = handle(str); 20 | if (this.nextFilter != null) 21 | str = this.nextFilter.doFilter(str); 22 | return str; 23 | } 24 | 25 | protected abstract String handle(String str); 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter162/FilterChain.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter162; 2 | 3 | /** 4 | * 过滤链流水线类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class FilterChain { 11 | private Filter head = null; 12 | private Filter tail = null; 13 | 14 | public void add(Filter filter) { 15 | if (head == null) 16 | head = filter; 17 | else 18 | tail.setNext(filter); 19 | tail = filter; 20 | } 21 | 22 | public String doFilter(String str) { 23 | return head != null ? head.doFilter(str) : str; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /other/com/css/other/filter162/HTMLFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter162; 2 | 3 | /** 4 | * HTML过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLFilter extends Filter { 11 | 12 | @Override 13 | protected String handle(String str) { 14 | return str.replace('<', '[').replace('>', ']'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter162/SensitiveFilter.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter162; 2 | 3 | /** 4 | * Sensitive过滤器实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveFilter extends Filter { 11 | 12 | @Override 13 | protected String handle(String str) { 14 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /other/com/css/other/filter162/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter162; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | 14 | FilterChain fc = new FilterChain(); 15 | 16 | fc.add(new HTMLFilter()); 17 | fc.add(new SensitiveFilter()); 18 | 19 | msg = fc.doFilter(msg); 20 | 21 | System.out.println(msg); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /other/com/css/other/filter17/HTMLNode.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter17; 2 | 3 | /** 4 | * HTML过滤命令实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class HTMLNode extends SymbolNode { 11 | public HTMLNode(Node node) { 12 | super(node); 13 | } 14 | 15 | public String doFilter() { 16 | String str = super.node.doFilter(); 17 | return str.replace('<', '[').replace('>', ']'); 18 | } 19 | } -------------------------------------------------------------------------------- /other/com/css/other/filter17/Node.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter17; 2 | 3 | /** 4 | * 抽象节点类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Node { 11 | public String doFilter(); 12 | } -------------------------------------------------------------------------------- /other/com/css/other/filter17/SensitiveNode.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter17; 2 | 3 | /** 4 | * Sensitive过滤命令实现类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class SensitiveNode extends SymbolNode { 11 | public SensitiveNode(Node node) { 12 | super(node); 13 | } 14 | 15 | public String doFilter() { 16 | String str = super.node.doFilter(); 17 | return str.replace("敏感词1", "好词1").replace("敏感词2", "好词2").replace("王伟东", "Wang Weidong"); 18 | } 19 | } -------------------------------------------------------------------------------- /other/com/css/other/filter17/SymbolNode.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter17; 2 | 3 | /** 4 | * 命令符号型节点类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class SymbolNode implements Node { 11 | protected Node node; 12 | 13 | public SymbolNode(Node node) { 14 | this.node = node; 15 | } 16 | } -------------------------------------------------------------------------------- /other/com/css/other/filter17/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter17; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String args[]) { 12 | String msg = "大家好,@html@sensitive"; 13 | 14 | Filter filter = new Filter(); 15 | filter.build(msg); 16 | msg = filter.compute(); 17 | 18 | System.out.println(msg); 19 | } 20 | } -------------------------------------------------------------------------------- /other/com/css/other/filter17/ValueNode.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter17; 2 | 3 | /** 4 | * 值型节点类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class ValueNode implements Node { 11 | private String value; 12 | 13 | public ValueNode(String value) { 14 | this.value = value; 15 | } 16 | 17 | public String doFilter() { 18 | return this.value; 19 | } 20 | } -------------------------------------------------------------------------------- /other/com/css/other/filter18/AbstractUser.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter18; 2 | 3 | /** 4 | * 同事抽象类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public abstract class AbstractUser { 11 | 12 | // 中介者抽象类 13 | protected Mediator mediator; 14 | 15 | // 接受消息 16 | public abstract void receive(String message); 17 | 18 | // 发送消息 19 | public abstract void send(String message); 20 | 21 | public void setMediator(Mediator mediator) { 22 | this.mediator = mediator; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /other/com/css/other/filter18/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter18; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | 12 | public static void main(String[] args) { 13 | String msg = "大家好,"; 14 | // 构建中介者 15 | Mediator mediator = new ForumMediator(); 16 | // 构建具体的同事类 17 | AbstractUser user = new User(); 18 | // 注册同事 19 | mediator.register(user); 20 | // 发送消息 21 | user.send(msg); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /other/com/css/other/filter18/User.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter18; 2 | 3 | /** 4 | * 具体的同事类 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class User extends AbstractUser { 11 | @Override 12 | public void receive(String message) { 13 | System.out.println("recv: " + message); 14 | } 15 | 16 | @Override 17 | public void send(String message) { 18 | System.out.println("send: " + message); 19 | this.mediator.relay(this, message); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /other/com/css/other/filter19/Element.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter19; 2 | 3 | /** 4 | * 具体元素 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Element { 11 | private Visitor visitor; 12 | private String message; 13 | 14 | public Element(String message) { 15 | this.message = message; 16 | } 17 | 18 | public void accept(Visitor visitor) { 19 | this.visitor = visitor; 20 | this.visitor.visit(this); 21 | } 22 | 23 | public String getMessage() { 24 | return message; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /other/com/css/other/filter19/Test.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter19; 2 | 3 | /** 4 | * 测试 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public class Test { 11 | public static void main(String[] args) { 12 | String msg = "大家好,"; 13 | // 初始化元素 14 | Element element = new Element(msg); 15 | Visitor visior1 = new ConcreteVisitor1(); 16 | Visitor visior2 = new ConcreteVisitor2(); 17 | 18 | // 回调注入 19 | element.accept(visior1); 20 | 21 | element.accept(visior2); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /other/com/css/other/filter19/Visitor.java: -------------------------------------------------------------------------------- 1 | package com.css.other.filter19; 2 | 3 | /** 4 | * 访问者接口 5 | * 6 | * 中国软件与技术服务股份有限公司-设计模式培训(Java版) 7 | * 8 | * @author CSS. WangWeidong 9 | */ 10 | public interface Visitor { 11 | 12 | /** 13 | * 相当于给元素添加访问者的功能 14 | */ 15 | public void visit(Element element); 16 | 17 | } 18 | --------------------------------------------------------------------------------