├── 9781484218013.jpg ├── ApressCodes ├── AbstractFactoryPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── abstractfactory │ │ └── pattern │ │ └── demo │ │ ├── AbstractFactoryPatternEx.class │ │ ├── AbstractFactoryPatternEx.java │ │ ├── ActionMovieFactory.class │ │ ├── BollywoodActionMovie.class │ │ ├── BollywoodComedyMovie.class │ │ ├── ComedyMovieFactory.class │ │ ├── IBollywoodMovie.class │ │ ├── IMovieFactory.class │ │ ├── ITollywoodMovie.class │ │ ├── TollywoodActionMovie.class │ │ └── TollywoodComedyMovie.class ├── AdapterPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── adapter │ │ └── pattern │ │ └── demo │ │ ├── AdapterPattern.class │ │ ├── AdapterPattern.java │ │ ├── Calculator.class │ │ ├── CalculatorAdapter.class │ │ ├── Rect.class │ │ └── Triangle.class ├── BridgePattern2 │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── bridge │ │ └── pattern │ │ └── demo2 │ │ ├── BridgePatternDemo2.class │ │ ├── BridgePatternDemo2.java │ │ ├── GreenColor.class │ │ ├── IColor.class │ │ ├── Rectangle.class │ │ ├── RedColor.class │ │ ├── Shape.class │ │ └── Triangle.class ├── BuilderPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── builder │ │ └── pattern │ │ └── demo │ │ ├── BuilderPatternEx.class │ │ ├── BuilderPatternEx.java │ │ ├── Car.class │ │ ├── Director.class │ │ ├── IBuilder.class │ │ ├── MotorCycle.class │ │ └── Product.class ├── ChainOfResponsibilityPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── chainofresponsibility │ │ └── pattern │ │ └── demo │ │ ├── ChainOfResponsibilityPatternEx.class │ │ ├── ChainOfResponsibilityPatternEx.java │ │ ├── EmailErrorHandler.class │ │ ├── FaxErrorHandler.class │ │ ├── IReceiver.class │ │ ├── IssueRaiser.class │ │ ├── Message.class │ │ └── MessagePriority.class ├── ClassAndObjectAdapter │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── different │ │ └── type │ │ └── adapter │ │ ├── ClassAdapter.class │ │ ├── ClassAndObjectAdapter.class │ │ ├── ClassAndObjectAdapter.java │ │ ├── IIntegerValue.class │ │ ├── IntegerValue.class │ │ └── ObjectAdapter.class ├── CommandPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── command │ │ └── pattern │ │ └── demo │ │ ├── CommandPatternEx.class │ │ ├── CommandPatternEx.java │ │ ├── ICommand.class │ │ ├── Invoke.class │ │ ├── MyRedoCommand.class │ │ ├── MyUndoCommand.class │ │ └── Receiver.class ├── CompositePattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── composite │ │ └── pattern │ │ └── demo │ │ ├── CompositePatternEx.class │ │ ├── CompositePatternEx.java │ │ ├── ITeacher.class │ │ └── Teacher.class ├── DecoratorPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── decorator │ │ └── pattern │ │ └── demo │ │ ├── AbstractDecorator.class │ │ ├── Component.class │ │ ├── ConcreteComponent.class │ │ ├── ConcreteDecoratorEx_1.class │ │ ├── ConcreteDecoratorEx_2.class │ │ ├── DecoratorPatternEx.class │ │ └── DecoratorPatternEx.java ├── FacadePattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ ├── facade │ │ └── pattern │ │ │ └── demo │ │ │ ├── FacadePatternEx.class │ │ │ └── FacadePatternEx.java │ ├── robotfacade │ │ ├── RobotFacade.class │ │ └── RobotFacade.java │ └── robotparts │ │ ├── RobotBody.class │ │ ├── RobotBody.java │ │ ├── RobotColor.class │ │ ├── RobotColor.java │ │ ├── RobotMetal.class │ │ └── RobotMetal.java ├── FactoryPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── factory │ │ └── pattern │ │ └── demo │ │ ├── ConcreteFactory.class │ │ ├── Duck.class │ │ ├── FactoryPatternEx.class │ │ ├── FactoryPatternEx.java │ │ ├── IAnimal.class │ │ ├── IAnimalFactory.class │ │ ├── Tiger.class │ │ └── Tiger.class.bak ├── FlyweightPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── flyweight │ │ └── pattern │ │ └── demo │ │ ├── FlyweightPatternEx.class │ │ ├── FlyweightPatternEx.java │ │ ├── IRobot.class │ │ ├── LargeRobot.class │ │ ├── RobotFactory.class │ │ └── SmallRobot.class ├── FlyweightPatternModified │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── flyweight │ │ └── pattern │ │ └── modified │ │ └── demo │ │ ├── FlyweightPatternModifiedEx.class │ │ ├── FlyweightPatternModifiedEx.java │ │ ├── IRobot.class │ │ ├── Robot.class │ │ └── RobotFactory.class ├── InterpreterPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── interpreter │ │ └── pattern │ │ └── demo │ │ ├── Context.class │ │ ├── IExpression.class │ │ ├── IntToWords.class │ │ ├── InterpreterPatternEx.class │ │ ├── InterpreterPatternEx.java │ │ └── StringToBinaryExp.class ├── IteratorPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ ├── aggregate │ │ ├── Arts$ArtsIterator.class │ │ ├── Arts.class │ │ ├── Arts.java │ │ ├── ISubject.class │ │ ├── ISubject.java │ │ ├── Science$ScienceIterator.class │ │ ├── Science.class │ │ └── Science.java │ ├── iterator │ │ ├── IIterator.class │ │ └── IIterator.java │ └── iteratorpattern │ │ └── demo │ │ ├── IteratorPatternEx.class │ │ └── IteratorPatternEx.java ├── MediatorPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── mediator │ │ └── pattern │ │ └── demo │ │ ├── Boss.class │ │ ├── ConcreteMediator.class │ │ ├── Friend.class │ │ ├── Friend1.class │ │ ├── Friend2.class │ │ ├── Mediator.class │ │ ├── MediatorPatternEx.class │ │ └── MediatorPatternEx.java ├── MementoPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── memento │ │ └── pattern │ │ └── demo │ │ ├── Caretaker.class │ │ ├── Memento.class │ │ ├── MementoPatternEx.class │ │ ├── MementoPatternEx.java │ │ └── Originator.class ├── ObserverPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── observer │ │ └── pattern │ │ └── demo │ │ ├── ISubject.class │ │ ├── Observer.class │ │ ├── ObserverPatternEx.class │ │ ├── ObserverPatternEx.java │ │ └── Subject.class ├── ObserverPatternDemo3 │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── observer │ │ └── pattern │ │ └── demo3 │ │ ├── IObserver.class │ │ ├── ISubject.class │ │ ├── Observer1.class │ │ ├── Observer2.class │ │ ├── Observer3.class │ │ ├── ObserverPatternDemo3Ex.class │ │ ├── ObserverPatternDemo3Ex.java │ │ ├── Subject1.class │ │ └── Subject2.class ├── ObserverPatternModified │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── observer │ │ └── pattern │ │ └── demo2 │ │ ├── IObserver.class │ │ ├── ISubject.class │ │ ├── Observer1.class │ │ ├── Observer2.class │ │ ├── ObserverPatternModifiedEx.class │ │ ├── ObserverPatternModifiedEx.java │ │ └── Subject.class ├── PrototypePattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ ├── car │ │ ├── BasicCar.class │ │ ├── BasicCar.java │ │ ├── Ford.class │ │ ├── Ford.java │ │ ├── Nano.class │ │ └── Nano.java │ └── prototype │ │ └── pattern │ │ └── demo │ │ ├── PrototypePatternEx.class │ │ └── PrototypePatternEx.java ├── ProxyPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ ├── OriginalClasses │ │ ├── ConcreteSubject.class │ │ ├── ConcreteSubject.java │ │ ├── Subject.class │ │ └── Subject.java │ ├── ProxyClasses │ │ ├── Proxy.class │ │ └── Proxy.java │ └── proxy │ │ └── pattern │ │ └── demo │ │ ├── ProxyPatternEx.class │ │ └── ProxyPatternEx.java ├── SingletonPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── singleton │ │ └── pattern │ │ └── demo │ │ ├── MakeACaptain$SingletonHelper.class │ │ ├── MakeACaptain.class │ │ ├── SingletonPatternEx.class │ │ └── SingletonPatternEx.java ├── StatePattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ └── state │ │ └── pattern │ │ └── demo │ │ ├── Off.class │ │ ├── On.class │ │ ├── RemoteControl.class │ │ ├── StatePatternEx.class │ │ ├── StatePatternEx.java │ │ └── TV.class ├── StrategyPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ ├── choices │ │ ├── FirstChoice.class │ │ ├── FirstChoice.java │ │ ├── IChoice.class │ │ ├── IChoice.java │ │ ├── SecondChoice.class │ │ └── SecondChoice.java │ ├── contextofchoice │ │ ├── Context.class │ │ └── Context.java │ └── strategy │ │ └── pattern │ │ └── demo │ │ ├── StrategyPatternEx.class │ │ └── StrategyPatternEx.java ├── TemplateMethodPattern │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.jdt.core.prefs │ ├── engineering │ │ └── papers │ │ │ ├── BasicEngineering.class │ │ │ ├── BasicEngineering.java │ │ │ ├── ComputerScience.class │ │ │ ├── ComputerScience.java │ │ │ ├── Electronics.class │ │ │ └── Electronics.java │ └── template │ │ └── method │ │ └── pattern │ │ └── demo │ │ ├── TemplateMethodPatternEx.class │ │ └── TemplateMethodPatternEx.java └── VisitorPattern │ ├── .classpath │ ├── .project │ ├── .settings │ └── org.eclipse.jdt.core.prefs │ └── visitor │ └── pattern │ └── demo │ ├── IOriginalInterface.class │ ├── IVisitor.class │ ├── MyClass.class │ ├── Visitor.class │ ├── VisitorPatternEx.class │ └── VisitorPatternEx.java ├── Errata.md ├── LICENSE.txt ├── README.md └── contributing.md /9781484218013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/9781484218013.jpg -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | AbstractFactoryPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/AbstractFactoryPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/AbstractFactoryPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/AbstractFactoryPatternEx.java: -------------------------------------------------------------------------------- 1 | package abstractfactory.pattern.demo; 2 | interface ITollywoodMovie 3 | { 4 | String MovieName(); 5 | } 6 | 7 | interface IBollywoodMovie 8 | { 9 | String MovieName(); 10 | } 11 | 12 | interface IMovieFactory 13 | { 14 | ITollywoodMovie GetTollywoodMovie(); 15 | IBollywoodMovie GetBollywoodMovie(); 16 | } 17 | 18 | //Tollywood Movie collections 19 | class TollywoodActionMovie implements ITollywoodMovie 20 | { 21 | @Override 22 | public String MovieName() 23 | { 24 | return "Kranti is a Tollywood Action Movie"; 25 | } 26 | 27 | } 28 | 29 | class TollywoodComedyMovie implements ITollywoodMovie 30 | { 31 | @Override 32 | public String MovieName() 33 | { 34 | return "BasantaBilap is Tollywood Comedy Movie"; 35 | } 36 | } 37 | 38 | 39 | // Bollywood Movie collections 40 | class BollywoodActionMovie implements IBollywoodMovie 41 | { 42 | @Override 43 | public String MovieName() 44 | { 45 | return "Bang Bang is a Bollywood Action Movie"; 46 | } 47 | } 48 | 49 | class BollywoodComedyMovie implements IBollywoodMovie 50 | { 51 | @Override 52 | public String MovieName() 53 | { 54 | return "Munna Bhai MBBS is a Bollywood Comedy Movie"; 55 | } 56 | } 57 | 58 | //Action Movie Factory 59 | class ActionMovieFactory implements IMovieFactory 60 | { 61 | public ITollywoodMovie GetTollywoodMovie() 62 | { 63 | return new TollywoodActionMovie(); 64 | } 65 | 66 | public IBollywoodMovie GetBollywoodMovie() 67 | { 68 | return new BollywoodActionMovie(); 69 | } 70 | } 71 | //Comedy Movie Factory 72 | class ComedyMovieFactory implements IMovieFactory 73 | { 74 | public ITollywoodMovie GetTollywoodMovie() 75 | { 76 | return new TollywoodComedyMovie(); 77 | } 78 | 79 | public IBollywoodMovie GetBollywoodMovie() 80 | { 81 | return new BollywoodComedyMovie(); 82 | } 83 | } 84 | class AbstractFactoryPatternEx 85 | { 86 | public static void main(String[] args) 87 | { 88 | System.out.println("***Abstract Factory Pattern Demo***"); 89 | ActionMovieFactory actionMovies = new ActionMovieFactory(); 90 | ITollywoodMovie tAction = actionMovies.GetTollywoodMovie(); 91 | IBollywoodMovie bAction = actionMovies.GetBollywoodMovie(); 92 | 93 | System.out.println("\nAction movies are:"); 94 | System.out.println(tAction.MovieName()); 95 | System.out.println(bAction.MovieName()); 96 | 97 | 98 | ComedyMovieFactory comedyMovies = new ComedyMovieFactory(); 99 | ITollywoodMovie tComedy = comedyMovies.GetTollywoodMovie(); 100 | IBollywoodMovie bComedy = comedyMovies.GetBollywoodMovie(); 101 | 102 | System.out.println("\nComedy movies are:"); 103 | System.out.println(tComedy.MovieName()); 104 | System.out.println(bComedy.MovieName()); 105 | 106 | } 107 | } 108 | 109 | -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/ActionMovieFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/ActionMovieFactory.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/BollywoodActionMovie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/BollywoodActionMovie.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/BollywoodComedyMovie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/BollywoodComedyMovie.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/ComedyMovieFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/ComedyMovieFactory.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/IBollywoodMovie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/IBollywoodMovie.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/IMovieFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/IMovieFactory.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/ITollywoodMovie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/ITollywoodMovie.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/TollywoodActionMovie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/TollywoodActionMovie.class -------------------------------------------------------------------------------- /ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/TollywoodComedyMovie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AbstractFactoryPattern/abstractfactory/pattern/demo/TollywoodComedyMovie.class -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | AdapterPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/adapter/pattern/demo/AdapterPattern.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AdapterPattern/adapter/pattern/demo/AdapterPattern.class -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/adapter/pattern/demo/AdapterPattern.java: -------------------------------------------------------------------------------- 1 | package adapter.pattern.demo; 2 | class Rect 3 | { 4 | public double l; 5 | public double w; 6 | } 7 | class Triangle 8 | { 9 | public double b;//base 10 | public double h;//height 11 | public Triangle(int b, int h) 12 | { 13 | this.b = b; 14 | this.h = h; 15 | } 16 | } 17 | /*Calculator can calculate the area of a rectangle.To calculate the area we it needs an Rectangle input.*/ 18 | class Calculator 19 | { Rect rectangle; 20 | public double getArea(Rect r) 21 | { 22 | rectangle=r; 23 | return rectangle.l * rectangle.w; 24 | } 25 | } 26 | 27 | /*Calculate the area of a Triangle using CalculatorAdapter.Please note here:this time our input is a Triangle.*/ 28 | class CalculatorAdapter 29 | { 30 | Calculator calculator; 31 | Triangle triangle; 32 | public double getArea(Triangle t) 33 | { 34 | calculator = new Calculator(); 35 | triangle=t; 36 | Rect r = new Rect(); 37 | //Area of Triangle=0.5*base*height 38 | r.l = triangle.b; 39 | r.w = 0.5*triangle.h; 40 | return calculator.getArea(r); 41 | } 42 | 43 | } 44 | 45 | public class AdapterPattern 46 | { 47 | public static void main(String[] args) 48 | { 49 | System.out.println("***Adapter Pattern Demo***"); 50 | CalculatorAdapter cal=new CalculatorAdapter(); 51 | Triangle t = new Triangle(20,10); 52 | System.out.println("\nAdapter Pattern Example\n"); 53 | System.out.println("Area of Triangle is :" + cal.getArea(t)); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/adapter/pattern/demo/Calculator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AdapterPattern/adapter/pattern/demo/Calculator.class -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/adapter/pattern/demo/CalculatorAdapter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AdapterPattern/adapter/pattern/demo/CalculatorAdapter.class -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/adapter/pattern/demo/Rect.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AdapterPattern/adapter/pattern/demo/Rect.class -------------------------------------------------------------------------------- /ApressCodes/AdapterPattern/adapter/pattern/demo/Triangle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/AdapterPattern/adapter/pattern/demo/Triangle.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | BridgePattern2 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/BridgePatternDemo2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/BridgePatternDemo2.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/BridgePatternDemo2.java: -------------------------------------------------------------------------------- 1 | package bridge.pattern.demo2; 2 | 3 | //Colors-The Implementor 4 | 5 | interface IColor 6 | { 7 | void fillWithColor(int border); 8 | } 9 | class RedColor implements IColor 10 | { 11 | @Override 12 | public void fillWithColor(int border) 13 | { 14 | System.out.print("Red color with " +border+" inch border"); 15 | 16 | } 17 | } 18 | class GreenColor implements IColor 19 | { 20 | @Override 21 | public void fillWithColor(int border) 22 | { 23 | System.out.print("Green color with " +border+" inch border."); 24 | 25 | } 26 | } 27 | 28 | 29 | //Shapes-The Abstraction 30 | 31 | abstract class Shape 32 | { 33 | //Composition 34 | protected IColor color; 35 | protected Shape(IColor c) 36 | { 37 | this.color = c; 38 | } 39 | abstract void drawShape(int border);//Low level 40 | abstract void modifyBorder(int border,int increment);//high level 41 | } 42 | 43 | class Triangle extends Shape 44 | { 45 | protected Triangle(IColor c) 46 | { 47 | super(c); 48 | } 49 | //Implementor specific method 50 | @Override 51 | void drawShape(int border) { 52 | System.out.print(" This Triangle colored with: "); 53 | color.fillWithColor(border); 54 | } 55 | //Abstraction specific method 56 | @Override 57 | void modifyBorder(int border,int increment) { 58 | System.out.println("\nNow we are changing the border length "+increment+ " times"); 59 | border=border*increment; 60 | drawShape(border); 61 | } 62 | } 63 | 64 | class Rectangle extends Shape 65 | { 66 | public Rectangle(IColor c) 67 | { 68 | super(c); 69 | } 70 | //Implementor specific method 71 | @Override 72 | void drawShape(int border) 73 | { 74 | System.out.print(" This Rectangle colored with: "); 75 | color.fillWithColor(border); 76 | } 77 | //Abstraction specific method 78 | @Override 79 | void modifyBorder(int border,int increment) { 80 | System.out.println("\n Now we are changing the border length "+increment+ " times"); 81 | border=border*increment; 82 | drawShape(border); 83 | } 84 | } 85 | 86 | 87 | class BridgePatternDemo2 88 | { 89 | public static void main(String[] args) 90 | { 91 | System.out.println("*****BRIDGE PATTERN*****"); 92 | //Coloring Green to Triangle 93 | System.out.println("\nColoring Triangle:"); 94 | //IColor green = new GreenColor(); 95 | IColor green = new GreenColor(); 96 | Shape triangleShape = new Triangle(green); 97 | triangleShape.drawShape(20); 98 | triangleShape.modifyBorder(20, 3); 99 | 100 | //Coloring Red to Rectangle 101 | System.out.println("\n\nColoring Rectangle :"); 102 | IColor red = new RedColor(); 103 | Shape rectangleShape = new Rectangle(red); 104 | rectangleShape.drawShape(50); 105 | //Modifying the border length twice 106 | rectangleShape.modifyBorder(50,2); 107 | 108 | } 109 | } 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/GreenColor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/GreenColor.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/IColor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/IColor.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/Rectangle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/Rectangle.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/RedColor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/RedColor.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/Shape.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/Shape.class -------------------------------------------------------------------------------- /ApressCodes/BridgePattern2/bridge/pattern/demo2/Triangle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BridgePattern2/bridge/pattern/demo2/Triangle.class -------------------------------------------------------------------------------- /ApressCodes/BuilderPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/BuilderPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | BuilderPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/BuilderPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/BuilderPattern/builder/pattern/demo/BuilderPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/BuilderPattern/builder/pattern/demo/BuilderPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/BuilderPattern/builder/pattern/demo/BuilderPatternEx.java: -------------------------------------------------------------------------------- 1 | package builder.pattern.demo; 2 | import java.util.LinkedList; 3 | 4 | 5 | // Builders common interface 6 | interface IBuilder 7 | { 8 | void BuildBody(); 9 | void InsertWheels(); 10 | void AddHeadlights(); 11 | Product GetVehicle(); 12 | 13 | } 14 | 15 | // Car is ConcreteBuilder 16 | class Car implements IBuilder 17 | { 18 | private Product product = new Product(); 19 | 20 | @Override 21 | public void BuildBody() 22 | { 23 | product.Add("This is a body of a Car"); 24 | } 25 | @Override 26 | public void InsertWheels() 27 | { 28 | product.Add("4 wheels are added"); 29 | } 30 | @Override 31 | public void AddHeadlights() 32 | { 33 | product.Add("2 Headlights are added"); 34 | } 35 | @Override 36 | public Product GetVehicle() 37 | { 38 | return product; 39 | } 40 | 41 | } 42 | 43 | // Motorcycle is a ConcreteBuilder 44 | class MotorCycle implements IBuilder 45 | { 46 | private Product product = new Product(); 47 | 48 | @Override 49 | public void BuildBody() 50 | { 51 | product.Add("This is a body of a Motorcycle"); 52 | } 53 | @Override 54 | public void InsertWheels() 55 | { 56 | product.Add("2 wheels are added"); 57 | } 58 | @Override 59 | public void AddHeadlights() 60 | { 61 | product.Add("1 Headlights are added"); 62 | } 63 | @Override 64 | public Product GetVehicle() 65 | { 66 | return product; 67 | } 68 | } 69 | 70 | // "Product" 71 | class Product 72 | { 73 | // We can use any data structure that you prefer.We have used LinkedList here. 74 | private LinkedList parts; 75 | public Product() 76 | { 77 | parts = new LinkedList(); 78 | } 79 | 80 | public void Add(String part) 81 | { 82 | //Adding parts 83 | parts.addLast(part); 84 | } 85 | 86 | public void Show() 87 | { 88 | System.out.println("\n Product completed as below :"); 89 | for(int i=0;i 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ChainOfResponsibilityPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/ChainOfResponsibilityPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/ChainOfResponsibilityPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/ChainOfResponsibilityPatternEx.java: -------------------------------------------------------------------------------- 1 | package chainofresponsibility.pattern.demo; 2 | enum MessagePriority 3 | { 4 | Normal, 5 | High 6 | } 7 | class Message 8 | { 9 | public String Text; 10 | public MessagePriority Priority; 11 | public Message(String msg, MessagePriority p) 12 | { 13 | Text = msg; 14 | this.Priority = p; 15 | } 16 | } 17 | 18 | 19 | interface IReceiver 20 | { 21 | Boolean ProcessMessage(Message msg); 22 | } 23 | class IssueRaiser 24 | { 25 | public IReceiver setFirstReceiver; 26 | public IssueRaiser(IReceiver firstReceiver) 27 | { 28 | this.setFirstReceiver = firstReceiver; 29 | } 30 | public void RaiseMessage(Message msg) 31 | { 32 | if (setFirstReceiver != null) 33 | setFirstReceiver.ProcessMessage(msg); 34 | } 35 | } 36 | class FaxErrorHandler implements IReceiver 37 | { 38 | private IReceiver _nextReceiver; 39 | public FaxErrorHandler(IReceiver nextReceiver) 40 | { 41 | _nextReceiver = nextReceiver; 42 | } 43 | public Boolean ProcessMessage(Message msg) 44 | { 45 | if (msg.Text.contains("Fax")) 46 | { 47 | System.out.println("FaxErrorHandler processed "+ msg.Priority+ "priority issue: "+ msg.Text); 48 | return true; 49 | } 50 | else 51 | { 52 | if (_nextReceiver != null) 53 | _nextReceiver.ProcessMessage(msg); 54 | } 55 | return false; 56 | } 57 | } 58 | class EmailErrorHandler implements IReceiver 59 | { 60 | private IReceiver _nextReceiver; 61 | public EmailErrorHandler(IReceiver nextReceiver) 62 | { 63 | _nextReceiver = nextReceiver; 64 | } 65 | public Boolean ProcessMessage(Message msg) 66 | { 67 | if (msg.Text.contains("Email")) 68 | { 69 | System.out.println("EmailErrorHandler processed "+ msg.Priority+ "priority issue: "+ msg.Text); 70 | return true; 71 | } 72 | else 73 | { 74 | if (_nextReceiver != null) 75 | _nextReceiver.ProcessMessage(msg); 76 | } 77 | return false; 78 | } 79 | } 80 | class ChainOfResponsibilityPatternEx 81 | { 82 | public static void main(String[] args) 83 | { 84 | System.out.println("***Chain of Responsibility Pattern Demo***\n"); 85 | //Making the chain first:IssueRaiser->FaxErrorhandler->EmailErrorHandler 86 | IReceiver faxHandler, emailHandler; 87 | //end of chain 88 | emailHandler = new EmailErrorHandler(null); 89 | //fax handler is before email 90 | faxHandler = new FaxErrorHandler(emailHandler); 91 | 92 | //starting point:rasiser will raise issues and set the first handler 93 | IssueRaiser raiser = new IssueRaiser(faxHandler); 94 | 95 | Message m1 = new Message("Fax is reaching late to the destination", MessagePriority.Normal); 96 | Message m2 = new Message("Email is not going", MessagePriority.High); 97 | Message m3 = new Message("In Email, BCC field is disabled occationally", MessagePriority.Normal); 98 | Message m4 = new Message("Fax is not reaching destination", MessagePriority.High); 99 | 100 | raiser.RaiseMessage(m1); 101 | raiser.RaiseMessage(m2); 102 | raiser.RaiseMessage(m3); 103 | raiser.RaiseMessage(m4); 104 | 105 | } 106 | } 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/EmailErrorHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/EmailErrorHandler.class -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/FaxErrorHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/FaxErrorHandler.class -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/IReceiver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/IReceiver.class -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/IssueRaiser.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/IssueRaiser.class -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/Message.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/Message.class -------------------------------------------------------------------------------- /ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/MessagePriority.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ChainOfResponsibilityPattern/chainofresponsibility/pattern/demo/MessagePriority.class -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ClassAndObjectAdapter 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/different/type/adapter/ClassAdapter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ClassAndObjectAdapter/different/type/adapter/ClassAdapter.class -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/different/type/adapter/ClassAndObjectAdapter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ClassAndObjectAdapter/different/type/adapter/ClassAndObjectAdapter.class -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/different/type/adapter/ClassAndObjectAdapter.java: -------------------------------------------------------------------------------- 1 | package different.type.adapter; 2 | interface IIntegerValue 3 | { 4 | public int getInteger(); 5 | 6 | } 7 | class IntegerValue implements IIntegerValue 8 | { 9 | @Override 10 | public int getInteger() 11 | { 12 | return 5; 13 | } 14 | } 15 | class ClassAdapter extends IntegerValue 16 | { 17 | //Incrementing by 2 18 | public int getInteger() 19 | { 20 | return 2+super.getInteger(); 21 | } 22 | } 23 | class ObjectAdapter 24 | { 25 | private IIntegerValue myInt; 26 | public ObjectAdapter(IIntegerValue myInt) 27 | { 28 | this.myInt=myInt; 29 | } 30 | //Incrementing by 2 31 | public int getInteger() 32 | { 33 | return 2+this.myInt.getInteger(); 34 | } 35 | 36 | } 37 | 38 | class ClassAndObjectAdapter 39 | { 40 | public static void main(String args[]) 41 | { 42 | System.out.println("***Class and Object Adapter Demo***"); 43 | ClassAdapter ca1=new ClassAdapter(); 44 | System.out.println("Class Adapter is returning :"+ca1.getInteger()); 45 | 46 | ClassAdapter ca2=new ClassAdapter(); 47 | ObjectAdapter oa=new ObjectAdapter(new IntegerValue()); 48 | System.out.println("Object Adapter is returning :"+oa.getInteger()); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/different/type/adapter/IIntegerValue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ClassAndObjectAdapter/different/type/adapter/IIntegerValue.class -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/different/type/adapter/IntegerValue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ClassAndObjectAdapter/different/type/adapter/IntegerValue.class -------------------------------------------------------------------------------- /ApressCodes/ClassAndObjectAdapter/different/type/adapter/ObjectAdapter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ClassAndObjectAdapter/different/type/adapter/ObjectAdapter.class -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | CommandPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/CommandPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CommandPattern/command/pattern/demo/CommandPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/CommandPatternEx.java: -------------------------------------------------------------------------------- 1 | package command.pattern.demo; 2 | 3 | interface ICommand 4 | { 5 | void Do(); 6 | } 7 | 8 | class MyUndoCommand implements ICommand 9 | { 10 | private Receiver receiver; 11 | MyUndoCommand(Receiver recv) 12 | { 13 | receiver=recv; 14 | } 15 | @Override 16 | public void Do() 17 | { 18 | //Call undo in receiver 19 | receiver.performUndo(); 20 | } 21 | } 22 | class MyRedoCommand implements ICommand 23 | { 24 | private Receiver receiver; 25 | MyRedoCommand(Receiver recv) 26 | { 27 | receiver=recv; 28 | } 29 | @Override 30 | public void Do() 31 | { 32 | //Call redo in receiver 33 | receiver.performRedo(); 34 | } 35 | } 36 | //Receiver class 37 | class Receiver 38 | { 39 | public void performUndo() 40 | { 41 | System.out.println("Executing -MyUndoCommand"); 42 | } 43 | public void performRedo() 44 | { 45 | System.out.println("Executing -MyRedoCommand"); 46 | } 47 | } 48 | //Invoker Class 49 | class Invoke 50 | { 51 | ICommand cmd; 52 | public void ExecuteCommand(ICommand cmd) 53 | { 54 | this.cmd=cmd; 55 | cmd.Do(); 56 | } 57 | } 58 | //Client here 59 | class CommandPatternEx 60 | { 61 | public static void main(String[] args) 62 | { 63 | System.out.println("***Command Pattern Demo***\n"); 64 | Receiver intendedreceiver=new Receiver(); 65 | //Client holds Invoker and Command Objects 66 | Invoke inv = new Invoke(); 67 | MyUndoCommand unCmd = new MyUndoCommand(intendedreceiver); 68 | MyRedoCommand reCmd = new MyRedoCommand(intendedreceiver); 69 | inv.ExecuteCommand(unCmd); 70 | inv.ExecuteCommand(reCmd); 71 | } 72 | } 73 | 74 | -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/ICommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CommandPattern/command/pattern/demo/ICommand.class -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/Invoke.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CommandPattern/command/pattern/demo/Invoke.class -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/MyRedoCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CommandPattern/command/pattern/demo/MyRedoCommand.class -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/MyUndoCommand.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CommandPattern/command/pattern/demo/MyUndoCommand.class -------------------------------------------------------------------------------- /ApressCodes/CommandPattern/command/pattern/demo/Receiver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CommandPattern/command/pattern/demo/Receiver.class -------------------------------------------------------------------------------- /ApressCodes/CompositePattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/CompositePattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | CompositePattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/CompositePattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/CompositePattern/composite/pattern/demo/CompositePatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/CompositePattern/composite/pattern/demo/CompositePatternEx.class -------------------------------------------------------------------------------- /ApressCodes/CompositePattern/composite/pattern/demo/CompositePatternEx.java: -------------------------------------------------------------------------------- 1 | package composite.pattern.demo; 2 | import java.util.*; 3 | interface ITeacher 4 | { 5 | public String getDetails(); 6 | } 7 | class Teacher implements ITeacher 8 | { 9 | private String teacherName; 10 | private String deptName; 11 | private List controls; 12 | 13 | Teacher(String teacherName, String deptName) 14 | { 15 | this.teacherName = teacherName; 16 | this.deptName = deptName; 17 | controls = new ArrayList(); 18 | } 19 | public void Add(Teacher teacher) 20 | { 21 | controls.add(teacher); 22 | } 23 | public void Remove(Teacher teacher) 24 | { 25 | controls.remove(teacher); 26 | } 27 | public List getControllingDepts() 28 | { 29 | return controls; 30 | } 31 | @Override 32 | public String getDetails() { 33 | return (teacherName + " is the " + deptName); 34 | } 35 | 36 | } 37 | class CompositePatternEx 38 | { 39 | public static void main(String[] args) 40 | { 41 | Teacher Principal = new Teacher("Dr.S.Som","Principal"); 42 | 43 | Teacher hodMaths = new Teacher("Mrs.S.Das","Hod-Math"); 44 | 45 | Teacher hodCompSc = new Teacher("Mr. V.Sarcar","Hod-ComputerSc."); 46 | 47 | Teacher mathTeacher1 = new Teacher("Math Teacher-1","MathsTeacher"); 48 | Teacher mathTeacher2 = new Teacher("Math Teacher-2","MathsTeacher"); 49 | 50 | Teacher cseTeacher1 = new Teacher("CSE Teacher-1","CSETeacher"); 51 | Teacher cseTeacher2 = new Teacher("CSE Teacher-2","CSETeacher"); 52 | Teacher cseTeacher3 = new Teacher("CSE Teacher-3","CSETeacher"); 53 | 54 | //Principal is on top of college 55 | //HOD -Maths and Comp. Sc directly reports to him 56 | Principal.Add(hodMaths); 57 | Principal.Add(hodCompSc); 58 | 59 | //Teachers of Mathematics directly reports to HOD-Maths 60 | hodMaths.Add(mathTeacher1); 61 | hodMaths.Add(mathTeacher2); 62 | 63 | //Teachers of Computer Sc directly reports to HOD-Comp.Sc 64 | hodCompSc.Add(cseTeacher1); 65 | hodCompSc.Add(cseTeacher2); 66 | hodCompSc.Add(cseTeacher3); 67 | 68 | //Leaf nodes.There is no department under Mathematics. 69 | mathTeacher1.Add(null); 70 | mathTeacher2.Add(null); 71 | 72 | //Leaf nodes.There is no department under CSE. 73 | cseTeacher1.Add(null); 74 | cseTeacher2.Add(null); 75 | cseTeacher3.Add(null); 76 | 77 | //Printing the details 78 | System.out.println("***COMPOSITE PATTERN DEMO ***"); 79 | System.out.println("\nThe college has following structure\n"); 80 | System.out.println(Principal.getDetails()); 81 | List hods=Principal.getControllingDepts(); 82 | for(int i=0;i mathTeachers=hodMaths.getControllingDepts(); 88 | for(int i=0;i cseTeachers=hodCompSc.getControllingDepts(); 94 | for(int i=0;i 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | DecoratorPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/AbstractDecorator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/DecoratorPattern/decorator/pattern/demo/AbstractDecorator.class -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/Component.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/DecoratorPattern/decorator/pattern/demo/Component.class -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/ConcreteComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/DecoratorPattern/decorator/pattern/demo/ConcreteComponent.class -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/ConcreteDecoratorEx_1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/DecoratorPattern/decorator/pattern/demo/ConcreteDecoratorEx_1.class -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/ConcreteDecoratorEx_2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/DecoratorPattern/decorator/pattern/demo/ConcreteDecoratorEx_2.class -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/DecoratorPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/DecoratorPattern/decorator/pattern/demo/DecoratorPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/DecoratorPattern/decorator/pattern/demo/DecoratorPatternEx.java: -------------------------------------------------------------------------------- 1 | package decorator.pattern.demo; 2 | abstract class Component 3 | { 4 | public abstract void doJob(); 5 | 6 | } 7 | class ConcreteComponent extends Component 8 | { 9 | @Override 10 | public void doJob() 11 | { 12 | System.out.println(" I am from Concrete Component-I am closed for modification."); 13 | 14 | } 15 | } 16 | 17 | abstract class AbstractDecorator extends Component 18 | { 19 | protected Component com ; 20 | public void SetTheComponent(Component c) 21 | { 22 | com = c; 23 | } 24 | public void doJob() 25 | { 26 | if (com != null) 27 | { 28 | com.doJob(); 29 | } 30 | } 31 | 32 | } 33 | class ConcreteDecoratorEx_1 extends AbstractDecorator 34 | { 35 | public void doJob() 36 | { 37 | super.doJob(); 38 | //Add additional thing if necessary 39 | System.out.println("I am explicitly from Ex_1"); 40 | } 41 | } 42 | class ConcreteDecoratorEx_2 extends AbstractDecorator 43 | { 44 | public void doJob() 45 | { 46 | System.out.println(""); 47 | System.out.println("***START Ex-2***"); 48 | super.doJob(); 49 | //Add additional thing if necessary 50 | System.out.println("Explicitly From DecoratorEx_2"); 51 | System.out.println("***END. EX-2***"); 52 | } 53 | } 54 | class DecoratorPatternEx 55 | { 56 | public static void main(String[] args) 57 | { 58 | System.out.println("***Decorator pattern Demo***"); 59 | ConcreteComponent cc = new ConcreteComponent(); 60 | 61 | ConcreteDecoratorEx_1 cd_1 = new ConcreteDecoratorEx_1(); 62 | cd_1.SetTheComponent(cc); 63 | cd_1.doJob(); 64 | 65 | ConcreteDecoratorEx_2 cd_2= new ConcreteDecoratorEx_2(); 66 | cd_2.SetTheComponent(cd_1);//Adding results from cd_1 now 67 | cd_2.doJob(); 68 | } 69 | } 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | FacadePattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/facade/pattern/demo/FacadePatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FacadePattern/facade/pattern/demo/FacadePatternEx.class -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/facade/pattern/demo/FacadePatternEx.java: -------------------------------------------------------------------------------- 1 | package facade.pattern.demo; 2 | import robotfacade.RobotFacade; 3 | 4 | class FacadePatternEx 5 | { 6 | public static void main(String[] args) 7 | { 8 | System.out.println("***Facade Pattern Demo***"); 9 | RobotFacade rf1 = new RobotFacade(); 10 | rf1.ConstructRobot("Green", "Iron"); 11 | RobotFacade rf2 = new RobotFacade(); 12 | rf2.ConstructRobot("Blue", "Steel"); 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotfacade/RobotFacade.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FacadePattern/robotfacade/RobotFacade.class -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotfacade/RobotFacade.java: -------------------------------------------------------------------------------- 1 | package robotfacade; 2 | import robotparts.*; 3 | 4 | 5 | public class RobotFacade 6 | { 7 | RobotColor rc; 8 | RobotMetal rm ; 9 | RobotBody rb; 10 | public RobotFacade() 11 | { 12 | rc = new RobotColor(); 13 | rm = new RobotMetal(); 14 | rb = new RobotBody(); 15 | 16 | } 17 | public void ConstructRobot(String color,String metal) 18 | { 19 | System.out.println("\nCreation of the Robot Start"); 20 | rc.SetColor(color); 21 | rm.SetMetal(metal); 22 | rb.CreateBody(); 23 | System.out.println(" \nRobot Creation End"); 24 | System.out.println(); 25 | } 26 | } -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotparts/RobotBody.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FacadePattern/robotparts/RobotBody.class -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotparts/RobotBody.java: -------------------------------------------------------------------------------- 1 | package robotparts; 2 | 3 | public class RobotBody 4 | { 5 | public void CreateBody() 6 | { 7 | System.out.println("Body Creation done"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotparts/RobotColor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FacadePattern/robotparts/RobotColor.class -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotparts/RobotColor.java: -------------------------------------------------------------------------------- 1 | package robotparts; 2 | 3 | public class RobotColor 4 | { 5 | private String color; 6 | public void SetColor(String color) 7 | { 8 | this.color = color; 9 | System.out.println("Color is set to : "+ this.color); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotparts/RobotMetal.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FacadePattern/robotparts/RobotMetal.class -------------------------------------------------------------------------------- /ApressCodes/FacadePattern/robotparts/RobotMetal.java: -------------------------------------------------------------------------------- 1 | package robotparts; 2 | 3 | public class RobotMetal 4 | { 5 | private String metal; 6 | public void SetMetal(String metal) 7 | { 8 | this.metal=metal; 9 | System.out.println("Metal is set to : "+this.metal); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | FactoryPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/ConcreteFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/ConcreteFactory.class -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/Duck.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/Duck.class -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/FactoryPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/FactoryPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/FactoryPatternEx.java: -------------------------------------------------------------------------------- 1 | package factory.pattern.demo; 2 | interface IAnimal 3 | { 4 | void Speak(); 5 | } 6 | class Duck implements IAnimal 7 | { 8 | @Override 9 | public void Speak() 10 | { 11 | System.out.println("Duck says Pack-pack"); 12 | } 13 | } 14 | class Tiger implements IAnimal 15 | { 16 | @Override 17 | public void Speak() 18 | { 19 | System.out.println("Tiger says: Halum..Halum"); 20 | 21 | } 22 | } 23 | 24 | abstract class IAnimalFactory 25 | { 26 | public abstract IAnimal GetAnimalType(String type) throws Exception;//if we cannot instantiate later we'll throw exception 27 | } 28 | class ConcreteFactory extends IAnimalFactory 29 | { 30 | //IAnimal animalType; 31 | //Duck duck=null; 32 | //Tiger tiger=null; 33 | @Override 34 | public IAnimal GetAnimalType(String type) throws Exception 35 | { 36 | /* 37 | * IAnimal animal; 38 | if (type.Equals("Duck")) 39 | { 40 | animal = new Duck(); 41 | } 42 | else 43 | { 44 | animal = new Tiger(); 45 | } 46 | return animal; 47 | 48 | //OR-use the following codes-just a change. I wanted to use switch instead of if-else. 49 | //It is better readable when there are many options. 50 | */ 51 | 52 | switch (type) 53 | { 54 | case "Duck": 55 | //duck= new Duck(); 56 | //return duck; 57 | return new Duck(); 58 | case "Tiger": 59 | //tiger= new Tiger(); 60 | //return tiger; 61 | return new Tiger(); 62 | default: 63 | throw new Exception( "Animal type : "+type+" cannot be instantiated"); 64 | } 65 | } 66 | } 67 | class FactoryPatternEx 68 | { 69 | public static void main(String[] args) throws Exception 70 | { 71 | System.out.println("***Factory Pattern Demo***\n"); 72 | IAnimalFactory animalFactory = new ConcreteFactory(); 73 | IAnimal DuckType=animalFactory.GetAnimalType("Duck"); 74 | DuckType.Speak(); 75 | 76 | IAnimal TigerType = animalFactory.GetAnimalType("Tiger"); 77 | TigerType.Speak(); 78 | //There is no Lion type. So, an exception will be thrown 79 | IAnimal LionType = animalFactory.GetAnimalType("Lion"); 80 | LionType.Speak(); 81 | 82 | } 83 | } 84 | 85 | -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/IAnimal.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/IAnimal.class -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/IAnimalFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/IAnimalFactory.class -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/Tiger.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/Tiger.class -------------------------------------------------------------------------------- /ApressCodes/FactoryPattern/factory/pattern/demo/Tiger.class.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FactoryPattern/factory/pattern/demo/Tiger.class.bak -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | FlyweightPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/flyweight/pattern/demo/FlyweightPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPattern/flyweight/pattern/demo/FlyweightPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/flyweight/pattern/demo/FlyweightPatternEx.java: -------------------------------------------------------------------------------- 1 | package flyweight.pattern.demo; 2 | import java.util.HashMap; 3 | import java.util.Map; 4 | 5 | /** 6 | * @author sarcarv 7 | * Our interface 8 | * 9 | */ 10 | interface IRobot 11 | { 12 | void Print(); 13 | } 14 | 15 | /** 16 | * @author sarcarv 17 | * A 'ConcreteFlyweight' class-SmallRobot 18 | * 19 | */ 20 | class SmallRobot implements IRobot 21 | { 22 | @Override 23 | public void Print() 24 | { 25 | System.out.println(" This is a Small Robot"); 26 | } 27 | } 28 | 29 | 30 | /** 31 | * @author sarcarv 32 | * A 'ConcreteFlyweight' class-LargeRobot 33 | * 34 | */ 35 | class LargeRobot implements IRobot 36 | { 37 | @Override 38 | public void Print() 39 | { 40 | System.out.println(" I am a Large Robot"); 41 | } 42 | } 43 | 44 | /** 45 | * @author sarcarv 46 | * The 'FlyweightFactory' class 47 | * 48 | */ 49 | class RobotFactory 50 | { 51 | Map shapes = new HashMap(); 52 | 53 | public int TotalObjectsCreated() 54 | { 55 | return shapes.size(); 56 | } 57 | 58 | public IRobot GetRobotFromFactory(String RobotCategory) throws Exception 59 | { 60 | IRobot robotCategory = null; 61 | if (shapes.containsKey(RobotCategory)) 62 | { 63 | robotCategory = shapes.get(RobotCategory); 64 | } 65 | else 66 | { 67 | switch (RobotCategory) 68 | { 69 | case "small": 70 | System.out.println("We do not have Small Robot.So we are creating a Small Robot now."); 71 | robotCategory = new SmallRobot(); 72 | shapes.put("small", robotCategory); 73 | break; 74 | case "large": 75 | System.out.println("We do not have Large Robot.So we are creating a Large Robot now ."); 76 | robotCategory = new LargeRobot(); 77 | shapes.put("large", robotCategory); 78 | break; 79 | default: 80 | throw new Exception(" Robot Factory can create only small and large shapes"); 81 | } 82 | } 83 | return robotCategory; 84 | } 85 | 86 | } 87 | /** 88 | * @author sarcarv 89 | *FlyweightPattern is in action. 90 | */ 91 | 92 | class FlyweightPatternEx 93 | { 94 | public static void main(String[] args) throws Exception 95 | { 96 | RobotFactory myfactory = new RobotFactory(); 97 | System.out.println("\n***Flyweight Pattern Example***\n"); 98 | 99 | IRobot shape = myfactory.GetRobotFromFactory("small"); 100 | shape.Print(); 101 | //Here we are trying to get the objects additional 2 times. 102 | //Note that: now onwards we need not create additional small robots-we have already created of this category. 103 | for (int i = 0; i < 2; i++) 104 | { 105 | shape = myfactory.GetRobotFromFactory("small"); 106 | shape.Print(); 107 | } 108 | int NumOfDistinctRobots = myfactory.TotalObjectsCreated(); 109 | System.out.println("\nDistinct Robot objects created till now= "+ NumOfDistinctRobots); 110 | 111 | //Here we are trying to get the objects 5 times. 112 | //Note that: second time onwards we need not create additional large robots-we have already created of this category on first attempt(at i=0) 113 | for (int i = 0; i < 5; i++) 114 | { 115 | shape = myfactory.GetRobotFromFactory("large"); 116 | shape.Print(); 117 | } 118 | 119 | NumOfDistinctRobots = myfactory.TotalObjectsCreated(); 120 | System.out.println("\n Finally no of Distinct Robot objects created: "+ NumOfDistinctRobots); 121 | } 122 | } 123 | 124 | 125 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/flyweight/pattern/demo/IRobot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPattern/flyweight/pattern/demo/IRobot.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/flyweight/pattern/demo/LargeRobot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPattern/flyweight/pattern/demo/LargeRobot.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/flyweight/pattern/demo/RobotFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPattern/flyweight/pattern/demo/RobotFactory.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPattern/flyweight/pattern/demo/SmallRobot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPattern/flyweight/pattern/demo/SmallRobot.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | FlyweightPatternModified 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/FlyweightPatternModifiedEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/FlyweightPatternModifiedEx.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/FlyweightPatternModifiedEx.java: -------------------------------------------------------------------------------- 1 | package flyweight.pattern.modified.demo; 2 | import java.util.HashMap; 3 | import java.util.Map; 4 | import java.util.Random; 5 | 6 | /** 7 | * @author sarcarv 8 | * Our interface 9 | * 10 | */ 11 | interface IRobot 12 | { 13 | void Print(); 14 | } 15 | 16 | /** 17 | * @author sarcarv 18 | * A 'ConcreteFlyweight' class-SmallRobot 19 | * 20 | */ 21 | class Robot implements IRobot 22 | { 23 | String robotType; 24 | public String colorOfRobot; 25 | public Robot(String robotType) 26 | { 27 | this.robotType=robotType; 28 | } 29 | public void setColor(String colorOfRobot) 30 | { 31 | this.colorOfRobot=colorOfRobot; 32 | } 33 | @Override 34 | public void Print() 35 | { 36 | System.out.println(" This is a " +robotType+ " type robot with "+colorOfRobot+ "color"); 37 | } 38 | } 39 | 40 | /** 41 | * @author sarcarv 42 | * The 'FlyweightFactory' class 43 | * 44 | */ 45 | class RobotFactory 46 | { 47 | Map shapes = new HashMap(); 48 | 49 | public int TotalObjectsCreated() 50 | { 51 | return shapes.size(); 52 | } 53 | 54 | public IRobot GetRobotFromFactory(String robotType) throws Exception 55 | { 56 | IRobot robotCategory= null; 57 | if (shapes.containsKey(robotType)) 58 | { 59 | robotCategory = shapes.get(robotType); 60 | } 61 | else 62 | { 63 | switch (robotType) 64 | { 65 | case "King": 66 | System.out.println("We do not have King Robot.So we are creating a King Robot now."); 67 | robotCategory = new Robot("King"); 68 | shapes.put("King",robotCategory); 69 | break; 70 | case "Queen": 71 | System.out.println("We do not have Queen Robot.So we are creating a Queen Robot now."); 72 | robotCategory = new Robot("Queen"); 73 | shapes.put("Queen",robotCategory); 74 | break; 75 | default: 76 | throw new Exception(" Robot Factory can create only king and queen type robots"); 77 | } 78 | } 79 | return robotCategory; 80 | } 81 | 82 | } 83 | /** 84 | * @author sarcarv 85 | *FlyweightPattern is in action. 86 | */ 87 | 88 | class FlyweightPatternModifiedEx 89 | { 90 | public static void main(String[] args) throws Exception 91 | { 92 | RobotFactory myfactory = new RobotFactory(); 93 | System.out.println("\n***Flyweight Pattern Example Modified***\n"); 94 | Robot shape; 95 | //Here we are trying to get 3 king type robots 96 | for (int i = 0; i < 3; i++) 97 | { 98 | shape =(Robot) myfactory.GetRobotFromFactory("King"); 99 | shape.setColor(getRandomColor()); 100 | shape.Print(); 101 | } 102 | //Here we are trying to get 3 queen type robots 103 | for (int i = 0; i < 3; i++) 104 | { 105 | shape =(Robot) myfactory.GetRobotFromFactory("Queen"); 106 | shape.setColor(getRandomColor()); 107 | shape.Print(); 108 | } 109 | int NumOfDistinctRobots = myfactory.TotalObjectsCreated(); 110 | //System.out.println("\nDistinct Robot objects created till now= "+ NumOfDistinctRobots); 111 | System.out.println("\n Finally no of Distinct Robot objects created: "+ NumOfDistinctRobots); 112 | } 113 | static String getRandomColor() 114 | { 115 | Random r=new Random(); 116 | /*You can supply any number of your choice in nextInt argument. 117 | * we are simply checking the random number generated is an even number 118 | * or and odd number.And based on that we are choosing the color. 119 | * For simplicity, we'll use only two color-red and green 120 | */ 121 | 122 | int random=r.nextInt(20); 123 | if(random%2==0) 124 | { 125 | return "red"; 126 | } 127 | else 128 | { 129 | return "green"; 130 | } 131 | } 132 | } 133 | 134 | 135 | -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/IRobot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/IRobot.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/Robot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/Robot.class -------------------------------------------------------------------------------- /ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/RobotFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/FlyweightPatternModified/flyweight/pattern/modified/demo/RobotFactory.class -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | InterpreterPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/interpreter/pattern/demo/Context.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/InterpreterPattern/interpreter/pattern/demo/Context.class -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/interpreter/pattern/demo/IExpression.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/InterpreterPattern/interpreter/pattern/demo/IExpression.class -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/interpreter/pattern/demo/IntToWords.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/InterpreterPattern/interpreter/pattern/demo/IntToWords.class -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/interpreter/pattern/demo/InterpreterPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/InterpreterPattern/interpreter/pattern/demo/InterpreterPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/InterpreterPattern/interpreter/pattern/demo/InterpreterPatternEx.java: -------------------------------------------------------------------------------- 1 | package interpreter.pattern.demo; 2 | 3 | import java.util.Scanner; 4 | 5 | /*Context class:interpretion is carried out based on our implementation.*/ 6 | class Context 7 | { 8 | public String input; 9 | public Context(String input) 10 | { 11 | this.input=input; 12 | } 13 | public void getBinaryForm(String input) 14 | { 15 | int i = Integer.parseInt(input); 16 | //integer to its equivalent binary string representation 17 | String binaryString = Integer.toBinaryString(i); 18 | System.out.println("Binary equivalent of "+input+ " is "+ binaryString); 19 | } 20 | public void printInWords(String input) 21 | { 22 | this.input = input; 23 | System.out.println("Printing the input in words:"); 24 | char c[]=input.toCharArray(); 25 | for(int i=0;i 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | IteratorPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/Arts$ArtsIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/aggregate/Arts$ArtsIterator.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/Arts.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/aggregate/Arts.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/Arts.java: -------------------------------------------------------------------------------- 1 | package aggregate; 2 | import iterator.*; 3 | 4 | public class Arts implements ISubject 5 | { 6 | private String[] subjects; 7 | 8 | public Arts() 9 | { 10 | subjects = new String[2]; 11 | subjects[0] = "Bengali"; 12 | subjects[1] = "English" ; 13 | } 14 | 15 | public IIterator CreateIterator() 16 | { 17 | return new ArtsIterator(subjects); 18 | } 19 | //Containing the iterator 20 | public class ArtsIterator implements IIterator 21 | { 22 | private String[] subjects; 23 | private int position; 24 | public ArtsIterator(String[] subjects) 25 | { 26 | this.subjects = subjects; 27 | position = 0; 28 | } 29 | public void First() 30 | { 31 | position = 0; 32 | } 33 | 34 | public String Next() 35 | { 36 | return subjects[position++]; 37 | } 38 | 39 | public Boolean IsDone() 40 | { 41 | return position >= subjects.length; 42 | } 43 | 44 | public String CurrentItem() 45 | { 46 | return subjects[position]; 47 | } 48 | } 49 | 50 | } -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/ISubject.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/aggregate/ISubject.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/ISubject.java: -------------------------------------------------------------------------------- 1 | package aggregate; 2 | import iterator.*; 3 | 4 | public interface ISubject 5 | { 6 | public IIterator CreateIterator(); 7 | } 8 | -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/Science$ScienceIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/aggregate/Science$ScienceIterator.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/Science.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/aggregate/Science.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/aggregate/Science.java: -------------------------------------------------------------------------------- 1 | package aggregate; 2 | import java.util.LinkedList;//for Linked List data structure used here 3 | import iterator.*; 4 | 5 | public class Science implements ISubject 6 | { 7 | private LinkedList subjects; 8 | 9 | public Science() 10 | { 11 | subjects = new LinkedList(); 12 | subjects.addLast("Maths"); 13 | subjects.addLast("Comp. Sc."); 14 | subjects.addLast("Physics"); 15 | } 16 | @Override 17 | public IIterator CreateIterator() 18 | { 19 | return new ScienceIterator(subjects); 20 | } 21 | //Containing the iterator 22 | public class ScienceIterator implements IIterator 23 | { 24 | private LinkedList subjects; 25 | private int position; 26 | 27 | public ScienceIterator(LinkedList subjects) 28 | { 29 | this.subjects = subjects; 30 | position = 0; 31 | } 32 | 33 | public void First() 34 | { 35 | position = 0; 36 | } 37 | 38 | public String Next() 39 | { 40 | return subjects.get(position++); 41 | } 42 | 43 | public Boolean IsDone() 44 | { 45 | return position >= subjects.size(); 46 | } 47 | 48 | public String CurrentItem() 49 | { 50 | return subjects.get(position); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/iterator/IIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/iterator/IIterator.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/iterator/IIterator.java: -------------------------------------------------------------------------------- 1 | package iterator; 2 | 3 | public interface IIterator 4 | { 5 | void First();//Reset to first element 6 | String Next();//get next element 7 | Boolean IsDone();//End of collection check 8 | String CurrentItem();//Retrieve Current Item 9 | 10 | } 11 | -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/iteratorpattern/demo/IteratorPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/IteratorPattern/iteratorpattern/demo/IteratorPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/IteratorPattern/iteratorpattern/demo/IteratorPatternEx.java: -------------------------------------------------------------------------------- 1 | package iteratorpattern.demo; 2 | import iterator.*; 3 | import aggregate.*; 4 | 5 | class IteratorPatternEx 6 | { 7 | public static void main(String[] args) 8 | { 9 | System.out.println("***Iterator Pattern Demo***\n"); 10 | ISubject Sc_subject = new Science(); 11 | ISubject Ar_subjects = new Arts(); 12 | 13 | IIterator Sc_iterator = Sc_subject.CreateIterator(); 14 | IIterator Ar_iterator = Ar_subjects.CreateIterator(); 15 | 16 | System.out.println("\nScience subjects :"); 17 | Print(Sc_iterator); 18 | 19 | System.out.println("\nArts subjects :"); 20 | Print(Ar_iterator); 21 | } 22 | 23 | public static void Print(IIterator iterator) 24 | { 25 | while (!iterator.IsDone()) 26 | { 27 | System.out.println(iterator.Next()); 28 | } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | MediatorPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/Boss.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/Boss.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/ConcreteMediator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/ConcreteMediator.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/Friend.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/Friend.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/Friend1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/Friend1.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/Friend2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/Friend2.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/Mediator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/Mediator.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/MediatorPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MediatorPattern/mediator/pattern/demo/MediatorPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/MediatorPattern/mediator/pattern/demo/MediatorPatternEx.java: -------------------------------------------------------------------------------- 1 | package mediator.pattern.demo; 2 | 3 | abstract class Mediator 4 | { 5 | public abstract void Send(Friend frd, String msg); 6 | } 7 | 8 | // ConcreteMediator 9 | class ConcreteMediator extends Mediator 10 | { 11 | private Friend1 friend1; 12 | private Friend2 friend2; 13 | private Boss boss; 14 | 15 | //In this example,setters are sufficient. 16 | 17 | public void setFriend1(Friend1 friend1) { 18 | this.friend1 = friend1; 19 | } 20 | 21 | public void setFriend2(Friend2 friend2) { 22 | this.friend2 = friend2; 23 | } 24 | 25 | public void setBoss(Boss boss) { 26 | this.boss = boss; 27 | } 28 | 29 | @Override 30 | public void Send(Friend frd,String msg) 31 | { 32 | //In all case, boss is notified 33 | if (frd == friend1) 34 | { 35 | friend2.Notify(msg); 36 | boss.Notify(friend1.name + " sends message to " + friend2.name); 37 | } 38 | if(frd==friend2) 39 | { 40 | friend1.Notify(msg); 41 | boss.Notify(friend2.name + " sends message to " + friend1.name); 42 | 43 | } 44 | //Boss is sending message to others 45 | if(frd==boss) 46 | { 47 | friend1.Notify(msg); 48 | friend2.Notify(msg); 49 | } 50 | } 51 | 52 | 53 | } 54 | 55 | // Friend 56 | abstract class Friend 57 | { 58 | protected Mediator mediator; 59 | public String name; 60 | 61 | // Constructor 62 | public Friend(Mediator _mediator) 63 | { 64 | mediator = _mediator; 65 | } 66 | } 67 | 68 | // Friend1-first participant 69 | class Friend1 extends Friend 70 | { 71 | public Friend1(Mediator mediator,String name) 72 | { 73 | super(mediator); 74 | this.name = name; 75 | } 76 | 77 | public void Send(String msg) 78 | { 79 | mediator.Send(this,msg); 80 | } 81 | 82 | public void Notify(String msg) 83 | { 84 | System.out.println("Amit gets message: "+ msg); 85 | } 86 | } 87 | 88 | // Friend2-Second participant 89 | class Friend2 extends Friend 90 | { 91 | // Constructor 92 | public Friend2(Mediator mediator,String name) 93 | { 94 | super(mediator); 95 | this.name = name; 96 | } 97 | 98 | public void Send(String msg) 99 | { 100 | mediator.Send(this,msg); 101 | } 102 | 103 | public void Notify(String msg) 104 | { 105 | System.out.println("Sohel gets message: "+ msg); 106 | } 107 | } 108 | // Friend3-Third Participant.He is the boss.He is notified whenever friend1 and friend2 communicates. 109 | class Boss extends Friend 110 | { 111 | // Constructor 112 | public Boss(Mediator mediator,String name) 113 | { 114 | super(mediator); 115 | this.name = name; 116 | } 117 | 118 | public void Send(String msg) 119 | { 120 | mediator.Send(this, msg); 121 | } 122 | 123 | public void Notify(String msg) 124 | { 125 | System.out.println("\nBoss sees message: " + msg); 126 | System.out.println(""); 127 | } 128 | } 129 | 130 | class MediatorPatternEx 131 | { 132 | public static void main(String[] args) 133 | { 134 | System.out.println("***Mediator Pattern Demo***\n"); 135 | ConcreteMediator m = new ConcreteMediator(); 136 | 137 | Friend1 Amit= new Friend1(m,"Amit"); 138 | Friend2 Sohel = new Friend2(m,"Sohel"); 139 | Boss Raghu = new Boss(m,"Raghu"); 140 | 141 | m.setFriend1(Amit); 142 | m.setFriend2(Sohel); 143 | m.setBoss(Raghu); 144 | 145 | Amit.Send("[Amit here]Good Morrning. Can we discuss the mediator pattern?"); 146 | Sohel.Send("[Sohel here]Good Morning.Yes, we can discuss now."); 147 | Raghu.Send("\n[Raghu here]:Please get back to work quickly"); 148 | 149 | 150 | } 151 | } 152 | 153 | 154 | -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | MementoPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/memento/pattern/demo/Caretaker.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MementoPattern/memento/pattern/demo/Caretaker.class -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/memento/pattern/demo/Memento.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MementoPattern/memento/pattern/demo/Memento.class -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/memento/pattern/demo/MementoPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MementoPattern/memento/pattern/demo/MementoPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/memento/pattern/demo/MementoPatternEx.java: -------------------------------------------------------------------------------- 1 | package memento.pattern.demo; 2 | 3 | // Memento class 4 | 5 | class Memento 6 | { 7 | private String state; 8 | 9 | public Memento(String state) 10 | { 11 | this.state = state; 12 | } 13 | 14 | public String getState() 15 | { 16 | return state; 17 | } 18 | 19 | } 20 | 21 | // Originator class 22 | 23 | class Originator 24 | { 25 | private String state; 26 | Memento m; 27 | 28 | public void setState(String state) 29 | { 30 | this.state = state; 31 | System.out.println("State at present : " +state); 32 | } 33 | 34 | // Creates memento 35 | public Memento OriginatorMemento() 36 | { 37 | m = new Memento(state); 38 | return m; 39 | } 40 | 41 | 42 | // Back to old state 43 | public void Revert(Memento memento) 44 | { 45 | System.out.println("Restoring to previous state..."); 46 | state = memento.getState(); 47 | System.out.println("State at present :" +state); 48 | } 49 | } 50 | 51 | 52 | 53 | //Caretaker Class 54 | class Caretaker 55 | { 56 | private Memento _memento; 57 | 58 | public void SaveMemento(Memento m) 59 | { 60 | _memento = m; 61 | } 62 | public Memento RetrieveMemento() 63 | { 64 | return _memento; 65 | } 66 | 67 | } 68 | 69 | class MementoPatternEx 70 | { 71 | public static void main(String[] args) 72 | { 73 | System.out.println("***Memento Pattern Demo***\n"); 74 | Originator o = new Originator(); 75 | o.setState("First state"); 76 | 77 | // Holding old state 78 | Caretaker c = new Caretaker(); 79 | c.SaveMemento(o.OriginatorMemento()); 80 | 81 | //Changing state 82 | o.setState("Second state"); 83 | 84 | // Restore saved state 85 | o.Revert(c.RetrieveMemento()); 86 | 87 | } 88 | } 89 | 90 | -------------------------------------------------------------------------------- /ApressCodes/MementoPattern/memento/pattern/demo/Originator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/MementoPattern/memento/pattern/demo/Originator.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ObserverPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/observer/pattern/demo/ISubject.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPattern/observer/pattern/demo/ISubject.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/observer/pattern/demo/Observer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPattern/observer/pattern/demo/Observer.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/observer/pattern/demo/ObserverPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPattern/observer/pattern/demo/ObserverPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPattern/observer/pattern/demo/ObserverPatternEx.java: -------------------------------------------------------------------------------- 1 | package observer.pattern.demo; 2 | import java.util.*; 3 | 4 | /* interface IObserver 5 | { 6 | void update(); 7 | }*/ 8 | //class Observer implements IObserver 9 | class Observer 10 | { 11 | //@Override 12 | public void update() 13 | { 14 | System.out.println("flag value changed in Subject"); 15 | } 16 | } 17 | 18 | interface ISubject 19 | { 20 | void register(Observer o); 21 | void unregister( Observer o); 22 | void notifyObservers(); 23 | } 24 | class Subject implements ISubject 25 | { 26 | //List observerList = new ArrayList(); 27 | List observerList = new ArrayList(); 28 | private int _flag; 29 | public int getFlag() 30 | { 31 | return _flag; 32 | } 33 | public void setFlag(int _flag) 34 | { 35 | this._flag=_flag; 36 | //flag value changed .So notify observer(s) 37 | notifyObservers(); 38 | } 39 | @Override 40 | public void register(Observer o) 41 | { 42 | observerList.add(o); 43 | } 44 | @Override 45 | public void unregister(Observer o) 46 | { 47 | observerList.remove(o); 48 | } 49 | @Override 50 | public void notifyObservers() 51 | { 52 | for(int i=0;i 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ObserverPatternDemo3 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/IObserver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/IObserver.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/ISubject.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/ISubject.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/Observer1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/Observer1.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/Observer2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/Observer2.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/Observer3.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/Observer3.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/ObserverPatternDemo3Ex.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/ObserverPatternDemo3Ex.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternDemo3/observer/pattern/demo3/ObserverPatternDemo3Ex.java: -------------------------------------------------------------------------------- 1 | package observer.pattern.demo3; 2 | 3 | import java.util.*; 4 | 5 | interface IObserver 6 | { 7 | void update(String s,int i); 8 | } 9 | class Observer1 implements IObserver 10 | { 11 | @Override 12 | public void update(String s,int i) 13 | { 14 | System.out.println("Observer1: myValue in "+ s+ " is now: "+i); 15 | } 16 | } 17 | class Observer2 implements IObserver 18 | { 19 | @Override 20 | public void update(String s,int i) 21 | { 22 | System.out.println("Observer2: observes ->myValue is changed in "+s+" to :"+i); 23 | } 24 | } 25 | class Observer3 implements IObserver 26 | { 27 | @Override 28 | public void update(String s,int i) 29 | { 30 | System.out.println("Observer3 is observing:myValue is changed in "+s+" to :"+i); 31 | } 32 | } 33 | 34 | interface ISubject 35 | { 36 | void register(IObserver o); 37 | void unregister(IObserver o); 38 | void notifyObservers(int i); 39 | } 40 | 41 | class Subject1 implements ISubject 42 | { 43 | private int myValue; 44 | 45 | 46 | public int getMyValue() { 47 | return myValue; 48 | } 49 | 50 | public void setMyValue(int myValue) { 51 | this.myValue = myValue; 52 | //Notify observers 53 | notifyObservers(myValue); 54 | } 55 | 56 | List observersList=new ArrayList(); 57 | 58 | @Override 59 | public void register(IObserver o) 60 | { 61 | observersList.add(o); 62 | } 63 | @Override 64 | public void unregister(IObserver o) 65 | { 66 | observersList.remove(o); 67 | } 68 | @Override 69 | public void notifyObservers(int updatedValue) 70 | { 71 | for(int i=0;i observersList=new ArrayList(); 93 | 94 | @Override 95 | public void register(IObserver o) 96 | { 97 | observersList.add(o); 98 | } 99 | @Override 100 | public void unregister(IObserver o) 101 | { 102 | observersList.remove(o); 103 | } 104 | @Override 105 | public void notifyObservers(int updatedValue) 106 | { 107 | for(int i=0;i 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ObserverPatternModified 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/observer/pattern/demo2/IObserver.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternModified/observer/pattern/demo2/IObserver.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/observer/pattern/demo2/ISubject.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternModified/observer/pattern/demo2/ISubject.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/observer/pattern/demo2/Observer1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternModified/observer/pattern/demo2/Observer1.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/observer/pattern/demo2/Observer2.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternModified/observer/pattern/demo2/Observer2.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/observer/pattern/demo2/ObserverPatternModifiedEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ObserverPatternModified/observer/pattern/demo2/ObserverPatternModifiedEx.class -------------------------------------------------------------------------------- /ApressCodes/ObserverPatternModified/observer/pattern/demo2/ObserverPatternModifiedEx.java: -------------------------------------------------------------------------------- 1 | package observer.pattern.demo2; 2 | import java.util.*; 3 | 4 | interface IObserver 5 | { 6 | void update(int i); 7 | } 8 | class Observer1 implements IObserver 9 | { 10 | @Override 11 | public void update(int i) 12 | { 13 | System.out.println("Observer1: myValue in Subject is now: "+i); 14 | } 15 | } 16 | class Observer2 implements IObserver 17 | { 18 | @Override 19 | public void update(int i) 20 | { 21 | System.out.println("Observer2: observes ->myValue is changed in Subject to :"+i); 22 | } 23 | } 24 | 25 | interface ISubject 26 | { 27 | void register(IObserver o); 28 | void unregister(IObserver o); 29 | void notifyObservers(int i); 30 | } 31 | 32 | class Subject implements ISubject 33 | { 34 | private int myValue; 35 | 36 | 37 | public int getMyValue() { 38 | return myValue; 39 | } 40 | 41 | public void setMyValue(int myValue) { 42 | this.myValue = myValue; 43 | //Notify observers 44 | notifyObservers(myValue); 45 | } 46 | 47 | List observersList=new ArrayList(); 48 | 49 | @Override 50 | public void register(IObserver o) 51 | { 52 | observersList.add(o); 53 | } 54 | @Override 55 | public void unregister(IObserver o) 56 | { 57 | observersList.remove(o); 58 | } 59 | @Override 60 | public void notifyObservers(int updatedValue) 61 | { 62 | for(int i=0;i 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | PrototypePattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/car/BasicCar.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/PrototypePattern/car/BasicCar.class -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/car/BasicCar.java: -------------------------------------------------------------------------------- 1 | package car; 2 | import java.util.Random; 3 | 4 | public abstract class BasicCar implements Cloneable 5 | { 6 | public String modelname; 7 | public int price; 8 | 9 | public String getModelname() { 10 | return modelname; 11 | } 12 | public void setModelname(String modelname) { 13 | this.modelname = modelname; 14 | } 15 | 16 | public static int setPrice() 17 | { 18 | int price = 0; 19 | Random r = new Random(); 20 | int p = r.nextInt(100000); 21 | price = p; 22 | return price; 23 | } 24 | public BasicCar clone() throws CloneNotSupportedException 25 | { 26 | return (BasicCar)super.clone(); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/car/Ford.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/PrototypePattern/car/Ford.class -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/car/Ford.java: -------------------------------------------------------------------------------- 1 | package car; 2 | 3 | public class Ford extends BasicCar 4 | { 5 | public Ford(String m) 6 | { 7 | modelname = m; 8 | } 9 | 10 | @Override 11 | public BasicCar clone() throws CloneNotSupportedException 12 | { 13 | return (Ford)super.clone(); 14 | } 15 | } -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/car/Nano.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/PrototypePattern/car/Nano.class -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/car/Nano.java: -------------------------------------------------------------------------------- 1 | package car; 2 | 3 | public class Nano extends BasicCar 4 | { 5 | public Nano(String m) 6 | { 7 | modelname = m; 8 | } 9 | @Override 10 | public BasicCar clone() throws CloneNotSupportedException 11 | { 12 | return (Nano)super.clone(); 13 | //return this.clone(); 14 | } 15 | } -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/prototype/pattern/demo/PrototypePatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/PrototypePattern/prototype/pattern/demo/PrototypePatternEx.class -------------------------------------------------------------------------------- /ApressCodes/PrototypePattern/prototype/pattern/demo/PrototypePatternEx.java: -------------------------------------------------------------------------------- 1 | package prototype.pattern.demo; 2 | import car.BasicCar; 3 | import car.Ford; 4 | import car.Nano; 5 | //import car.*; 6 | 7 | public class PrototypePatternEx 8 | { 9 | public static void main(String[] args) throws CloneNotSupportedException 10 | { 11 | System.out.println("***Prototype Pattern Demo***\n"); 12 | BasicCar nano_base = new Nano("Green Nano") ; 13 | nano_base.price=100000; 14 | 15 | BasicCar ford_basic = new Ford("Ford Yellow"); 16 | ford_basic.price=500000; 17 | 18 | BasicCar bc1; 19 | //Nano 20 | bc1 =nano_base.clone(); 21 | //Price will be more than 100000 for sure 22 | bc1.price = nano_base.price+BasicCar.setPrice(); 23 | System.out.println("Car is: "+ bc1.modelname+" and it's price is Rs."+bc1.price); 24 | 25 | //Ford 26 | bc1 =ford_basic.clone(); 27 | //Price will be more than 500000 for sure 28 | bc1.price = ford_basic.price+BasicCar.setPrice(); 29 | System.out.println("Car is: "+ bc1.modelname+" and it's price is Rs."+bc1.price); 30 | 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | ProxyPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/OriginalClasses/ConcreteSubject.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ProxyPattern/OriginalClasses/ConcreteSubject.class -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/OriginalClasses/ConcreteSubject.java: -------------------------------------------------------------------------------- 1 | package OriginalClasses; 2 | import OriginalClasses.Subject; 3 | 4 | public class ConcreteSubject extends Subject 5 | { 6 | 7 | @Override 8 | public void doSomeWork() 9 | { 10 | System.out.println(" I am from concrete subject"); 11 | } 12 | } -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/OriginalClasses/Subject.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ProxyPattern/OriginalClasses/Subject.class -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/OriginalClasses/Subject.java: -------------------------------------------------------------------------------- 1 | package OriginalClasses; 2 | 3 | public abstract class Subject 4 | { 5 | public abstract void doSomeWork(); 6 | } 7 | -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/ProxyClasses/Proxy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ProxyPattern/ProxyClasses/Proxy.class -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/ProxyClasses/Proxy.java: -------------------------------------------------------------------------------- 1 | package ProxyClasses; 2 | import OriginalClasses.*; 3 | 4 | public class Proxy extends Subject 5 | { 6 | ConcreteSubject cs; 7 | @Override 8 | public void doSomeWork() 9 | { 10 | System.out.println("Proxy call happening now"); 11 | //Lazy initialization 12 | if (cs == null) 13 | { 14 | cs = new ConcreteSubject(); 15 | } 16 | cs.doSomeWork(); 17 | } 18 | } -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/proxy/pattern/demo/ProxyPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/ProxyPattern/proxy/pattern/demo/ProxyPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/ProxyPattern/proxy/pattern/demo/ProxyPatternEx.java: -------------------------------------------------------------------------------- 1 | package proxy.pattern.demo; 2 | import ProxyClasses.Proxy; 3 | 4 | class ProxyPatternEx 5 | { 6 | public static void main(String[] args) 7 | { 8 | 9 | System.out.println("***Proxy Pattern Demo***\n"); 10 | Proxy px = new Proxy(); 11 | px.doSomeWork(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | SingletonPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/singleton/pattern/demo/MakeACaptain$SingletonHelper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/SingletonPattern/singleton/pattern/demo/MakeACaptain$SingletonHelper.class -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/singleton/pattern/demo/MakeACaptain.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/SingletonPattern/singleton/pattern/demo/MakeACaptain.class -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/singleton/pattern/demo/SingletonPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/SingletonPattern/singleton/pattern/demo/SingletonPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/SingletonPattern/singleton/pattern/demo/SingletonPatternEx.java: -------------------------------------------------------------------------------- 1 | package singleton.pattern.demo; 2 | 3 | class MakeACaptain 4 | { 5 | private static MakeACaptain _captain; 6 | //We make the constructor private to prevent the use of "new" 7 | private MakeACaptain() { } 8 | 9 | 10 | // public static synchronized MakeACaptain getCaptain() 11 | /* public static MakeACaptain getCaptain() 12 | { 13 | 14 | // Lazy initialization 15 | if (_captain == null) 16 | { _captain = new MakeACaptain(); 17 | System.out.println("New Captain selected for our team"); 18 | } 19 | else 20 | { 21 | System.out.print("You already have a Captain for your team."); 22 | System.out.println("Send him for the toss."); 23 | } 24 | return _captain; 25 | 26 | }*/ 27 | //Bill Pugh solution 28 | private static class SingletonHelper{ 29 | private static final MakeACaptain _captain = new MakeACaptain(); 30 | } 31 | 32 | public static MakeACaptain getCaptain() 33 | { 34 | return SingletonHelper._captain; 35 | } 36 | 37 | 38 | } 39 | 40 | 41 | class SingletonPatternEx 42 | { 43 | public static void main(String[] args) 44 | { 45 | System.out.println("***Singleton Pattern Demo***\n"); 46 | System.out.println("Trying to make a captain for our team"); 47 | MakeACaptain c1 = MakeACaptain.getCaptain(); 48 | System.out.println("Trying to make another captain for our team"); 49 | MakeACaptain c2 = MakeACaptain.getCaptain(); 50 | if (c1 == c2) 51 | { 52 | System.out.println("c1 and c2 are same instance"); 53 | } 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /ApressCodes/StatePattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/StatePattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | StatePattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/StatePattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/StatePattern/state/pattern/demo/Off.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StatePattern/state/pattern/demo/Off.class -------------------------------------------------------------------------------- /ApressCodes/StatePattern/state/pattern/demo/On.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StatePattern/state/pattern/demo/On.class -------------------------------------------------------------------------------- /ApressCodes/StatePattern/state/pattern/demo/RemoteControl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StatePattern/state/pattern/demo/RemoteControl.class -------------------------------------------------------------------------------- /ApressCodes/StatePattern/state/pattern/demo/StatePatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StatePattern/state/pattern/demo/StatePatternEx.class -------------------------------------------------------------------------------- /ApressCodes/StatePattern/state/pattern/demo/StatePatternEx.java: -------------------------------------------------------------------------------- 1 | package state.pattern.demo; 2 | abstract class RemoteControl 3 | { 4 | public abstract void pressSwitch(TV context); 5 | } 6 | 7 | 8 | class Off extends RemoteControl 9 | { 10 | @Override 11 | public void pressSwitch(TV context){ 12 | System.out.println("I am Off .Going to be On now"); 13 | context.setState(new On()); 14 | } 15 | } 16 | 17 | 18 | class On extends RemoteControl 19 | { 20 | @Override 21 | public void pressSwitch(TV context) 22 | { 23 | System.out.println("I am already On .Going to be Off now"); 24 | context.setState(new Off()); 25 | } 26 | } 27 | 28 | 29 | class TV 30 | { 31 | private RemoteControl state; 32 | 33 | public RemoteControl getState() { 34 | return state; 35 | } 36 | public void setState(RemoteControl state) { 37 | this.state = state; 38 | } 39 | public TV(RemoteControl state) 40 | { 41 | this.state=state; 42 | } 43 | public void pressButton() 44 | { 45 | state.pressSwitch(this); 46 | } 47 | } 48 | class StatePatternEx 49 | { 50 | public static void main(String[] args) 51 | { 52 | System.out.println("***State Pattern Demo***\n"); 53 | //Initially TV is Off 54 | Off initialState = new Off(); 55 | TV tv = new TV(initialState); 56 | //First time press 57 | tv.pressButton(); 58 | //Second time press 59 | tv.pressButton(); 60 | } 61 | } 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /ApressCodes/StatePattern/state/pattern/demo/TV.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StatePattern/state/pattern/demo/TV.class -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | StrategyPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/choices/FirstChoice.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StrategyPattern/choices/FirstChoice.class -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/choices/FirstChoice.java: -------------------------------------------------------------------------------- 1 | package choices; 2 | 3 | public class FirstChoice implements IChoice 4 | { 5 | public void myChoice(String s1, String s2) 6 | { 7 | System.out.println("You wanted to add the numbers."); 8 | int int1, int2,sum; 9 | int1=Integer.parseInt(s1); 10 | int2=Integer.parseInt(s2); 11 | sum=int1+int2; 12 | System.out.println(" The result of the addition is:"+sum); 13 | System.out.println("***End of the strategy***"); 14 | } 15 | } -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/choices/IChoice.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StrategyPattern/choices/IChoice.class -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/choices/IChoice.java: -------------------------------------------------------------------------------- 1 | package choices; 2 | public interface IChoice 3 | { 4 | void myChoice(String s1, String s2); 5 | } -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/choices/SecondChoice.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StrategyPattern/choices/SecondChoice.class -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/choices/SecondChoice.java: -------------------------------------------------------------------------------- 1 | package choices; 2 | 3 | public class SecondChoice implements IChoice 4 | { 5 | public void myChoice(String s1, String s2) 6 | { 7 | System.out.println("You wanted to concatenate the numbers."); 8 | System.out.println(" The result of the addition is:"+s1+s2); 9 | System.out.println("***End of the strategy***"); 10 | } 11 | } -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/contextofchoice/Context.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StrategyPattern/contextofchoice/Context.class -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/contextofchoice/Context.java: -------------------------------------------------------------------------------- 1 | package contextofchoice; 2 | 3 | import choices.IChoice; 4 | 5 | public class Context 6 | { 7 | IChoice myC; 8 | // Set a Strategy or algorithm in the Context 9 | public void SetChoice(IChoice ic) 10 | { 11 | myC = ic; 12 | } 13 | public void ShowChoice(String s1,String s2) 14 | { 15 | myC.myChoice(s1,s2); 16 | } 17 | } -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/strategy/pattern/demo/StrategyPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/StrategyPattern/strategy/pattern/demo/StrategyPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/StrategyPattern/strategy/pattern/demo/StrategyPatternEx.java: -------------------------------------------------------------------------------- 1 | package strategy.pattern.demo; 2 | import java.io.IOException; 3 | //For Java old versions-to take input from user 4 | //import java.io.BufferedReader; 5 | //import java.io.InputStreamReader; 6 | /* Java 5 added a nice utility class called Scanner, to get input from user */ 7 | import java.util.Scanner; 8 | 9 | import contextofchoice.Context; 10 | //import choices.*; 11 | import choices.FirstChoice; 12 | import choices.IChoice; 13 | import choices.SecondChoice; 14 | 15 | 16 | class StrategyPatternEx 17 | { 18 | public static void main(String[] args) throws IOException 19 | { 20 | System.out.println("***Strategy Pattern Demo***"); 21 | Scanner in= new Scanner(System.in);//To take input from user 22 | IChoice ic = null; 23 | Context cxt = new Context(); 24 | String input1,input2;; 25 | //Looping twice to test two different choices 26 | try 27 | { 28 | for (int i = 1; i <= 2; i++) 29 | { 30 | System.out.println("Enter an integer:"); 31 | input1 = in.nextLine(); 32 | System.out.println("Enter another integer:"); 33 | input2 = in.nextLine(); 34 | System.out.println("Enter ur choice(1 or 2)"); 35 | System.out.println("Press 1 for Addition, 2 for Concatenation"); 36 | String c = in.nextLine(); 37 | 38 | /*For Java old versions-use these lines to collect input from user 39 | BufferedReader br = new BufferedReader( new InputStreamReader( System.in )); 40 | String c = br.readLine();*/ 41 | 42 | if (c.equals("1")) 43 | { 44 | //If user input is 1, create object of FirstChoice (Strategy 1) 45 | ic = new FirstChoice(); 46 | } 47 | else 48 | { 49 | //If user input is 2, create object of SecondChoice (Strategy 2) 50 | ic = new SecondChoice(); 51 | } 52 | //Associate the Strategy with Context 53 | cxt.SetChoice(ic); 54 | cxt.ShowChoice(input1,input2); 55 | } 56 | } 57 | finally 58 | { 59 | in.close(); 60 | } 61 | System.out.println("End of Strategy pattern"); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | TemplateMethodPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/engineering/papers/BasicEngineering.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/TemplateMethodPattern/engineering/papers/BasicEngineering.class -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/engineering/papers/BasicEngineering.java: -------------------------------------------------------------------------------- 1 | package engineering.papers; 2 | 3 | 4 | public abstract class BasicEngineering 5 | { 6 | public void Papers() 7 | { 8 | //Common Papers: 9 | Math(); 10 | SoftSkills(); 11 | //Specialized Paper: 12 | SpecialPaper(); 13 | } 14 | private void Math() 15 | { 16 | System.out.println("Mathematics"); 17 | } 18 | private void SoftSkills() 19 | { 20 | System.out.println("SoftSkills"); 21 | } 22 | public abstract void SpecialPaper(); 23 | } -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/engineering/papers/ComputerScience.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/TemplateMethodPattern/engineering/papers/ComputerScience.class -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/engineering/papers/ComputerScience.java: -------------------------------------------------------------------------------- 1 | package engineering.papers; 2 | 3 | public class ComputerScience extends BasicEngineering 4 | { 5 | @Override 6 | public void SpecialPaper() 7 | { 8 | System.out.println("Object Oriented Programming"); 9 | } 10 | } -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/engineering/papers/Electronics.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/TemplateMethodPattern/engineering/papers/Electronics.class -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/engineering/papers/Electronics.java: -------------------------------------------------------------------------------- 1 | package engineering.papers; 2 | 3 | public class Electronics extends BasicEngineering 4 | { 5 | @Override 6 | public void SpecialPaper() 7 | { 8 | System.out.println("Digital Logic and Circuit Theory"); 9 | } 10 | } -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/template/method/pattern/demo/TemplateMethodPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/TemplateMethodPattern/template/method/pattern/demo/TemplateMethodPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/TemplateMethodPattern/template/method/pattern/demo/TemplateMethodPatternEx.java: -------------------------------------------------------------------------------- 1 | package template.method.pattern.demo; 2 | import engineering.papers.*; 3 | 4 | class TemplateMethodPatternEx 5 | { 6 | public static void main(String[] args) 7 | { 8 | System.out.println("***Template Method Pattern Demo***\n"); 9 | 10 | BasicEngineering bs = new ComputerScience(); 11 | System.out.println("Computer Sc Papers:"); 12 | bs.Papers(); 13 | System.out.println(); 14 | bs = new Electronics(); 15 | System.out.println("Electronics Papers:"); 16 | bs.Papers(); 17 | 18 | } 19 | } -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | VisitorPattern 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/visitor/pattern/demo/IOriginalInterface.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/VisitorPattern/visitor/pattern/demo/IOriginalInterface.class -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/visitor/pattern/demo/IVisitor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/VisitorPattern/visitor/pattern/demo/IVisitor.class -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/visitor/pattern/demo/MyClass.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/VisitorPattern/visitor/pattern/demo/MyClass.class -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/visitor/pattern/demo/Visitor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/VisitorPattern/visitor/pattern/demo/Visitor.class -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/visitor/pattern/demo/VisitorPatternEx.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/ApressCodes/VisitorPattern/visitor/pattern/demo/VisitorPatternEx.class -------------------------------------------------------------------------------- /ApressCodes/VisitorPattern/visitor/pattern/demo/VisitorPatternEx.java: -------------------------------------------------------------------------------- 1 | package visitor.pattern.demo; 2 | 3 | interface IOriginalInterface 4 | { 5 | void accept(IVisitor visitor); 6 | } 7 | class MyClass implements IOriginalInterface 8 | { 9 | //Initial or default value 10 | private int myInt = 5; 11 | public int getMyInt() 12 | { 13 | return myInt; 14 | } 15 | 16 | public void setMyInt(int myInt) 17 | { 18 | this.myInt = myInt; 19 | } 20 | 21 | @Override 22 | public void accept(IVisitor visitor) 23 | { 24 | System.out.println("Initial value of the integer :"+ myInt); 25 | visitor.visit(this); 26 | System.out.println("\nValue of the integer now :"+ myInt); 27 | } 28 | } 29 | 30 | interface IVisitor 31 | { 32 | void visit(MyClass myClassElement); 33 | } 34 | class Visitor implements IVisitor 35 | { 36 | @Override 37 | public void visit(MyClass myClassElement) 38 | { 39 | System.out.println("Visitor is trying to change the integer value"); 40 | myClassElement.setMyInt(100); 41 | System.out.println("Exiting from Visitor- visit"); 42 | } 43 | } 44 | class VisitorPatternEx 45 | { 46 | public static void main(String[] args) 47 | { 48 | System.out.println("***Visitor Pattern Demo***\n"); 49 | IVisitor v = new Visitor(); 50 | MyClass myClass = new MyClass(); 51 | myClass.accept(v); 52 | } 53 | } 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /Errata.md: -------------------------------------------------------------------------------- 1 | # Errata for *Java Design Patterns : A Tour with 23 Gang of Four Design Patterns in Java* 2 | **General Information-1** 3 | An updated version of this book is appearing shortly.The enhanced version of the book has three parts. In the first part of Java Design Patterns , you will cover the 23 Gang of Four (GoF) design patterns, before moving onto some alternative design patterns, including the Simple Factory Pattern, the Null Object Pattern, and the MVC Pattern. The final part winds up with a conclusion and criticisms of design patterns with an overview of anti-patterns. By working through easy-to-follow examples, you will understand the concepts in depth and have a collection of programs to port over to your own projects. 4 | In each of these chapters, there is a “Q&A Session” that will act as a doubt clearing session with the pros and cons of each of these patterns. Author finishes the book with FAQs that will help you consolidate your knowledge. The step-by-step approach of the book helps you apply your skills to learn other patterns on your own, and to be familiar with the latest version of Java and Eclipse(Photon). 5 | 6 | **General Information-2 (about first edition)** 7 | **Preface** 8 | On **Page xxi** [Typo]: 9 | In point #2, "**I ** has made" should be **Author** has made**. In the initial pages of the book, similar type of typos occured.We are sorry for the inconvenience.So, in general, please replace all these "I"'s with the word **Author** for better readability and understanding. 10 | 11 | **Introduction** 12 | On **page 1** [Typo]: 13 | In 1994–95, four **Is—** should be In 1994–95, four **authors** 14 | 15 | **Chapter 2** 16 | On **page 11** [Typo]: 17 | In Note block, "**I** always suggests that" should be "I always **suggest** that" 18 | 19 | **Chapter 2** 20 | On **page 20** [Typo]: 21 | In Note block, "until the **}**getCaptain()**" should be "until the getCaptain()" i.e. remove the unwanted bracket "}". 22 | 23 | **Chapter 6** 24 | On **page 33** [Typo]: 25 | In Computer World Example, "first semester are common for all **concentrations**" should be "first semester are common for all **all engineering students**" 26 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/java-design-patterns/e5b987b7048cee33774b214c30bb39641b2728d6/LICENSE.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Apress Source Code 2 | 3 | This repository accompanies [*Java Design Patterns*](http://www.apress.com/9781484218013) by Vaskaran Sarcar (Apress, 2016). 4 | 5 | ![Cover image](9781484218013.jpg) 6 | 7 | Download the files as a zip using the green button, or clone the repository to your machine using Git. 8 | 9 | ## Releases 10 | 11 | Release v1.0 corresponds to the code in the published book, without corrections or updates. 12 | 13 | ## Contributions 14 | 15 | See the file Contributing.md for more information on how you can contribute to this repository. 16 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to Apress Source Code 2 | 3 | Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. 4 | 5 | ## How to Contribute 6 | 7 | 1. Make sure you have a GitHub account. 8 | 2. Fork the repository for the relevant book. 9 | 3. Create a new branch on which to make your change, e.g. 10 | `git checkout -b my_code_contribution` 11 | 4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. 12 | 5. Submit a pull request. 13 | 14 | Thank you for your contribution! --------------------------------------------------------------------------------