├── LICENSE ├── README.md ├── Slides ├── 1 - Tasarım Kalıplarına Giriş.pdf ├── 2 - Bolum Nesne-Merkezli Programlama Sistem Yaklaşımı.pdf ├── 3 - Bolum Temel Prensipler.pdf ├── 4 - Yaratımsal Kalıplar.pdf ├── 5 - Yapısal Kalıplar.pdf ├── 6 - Davranışsal Kalıplar.pdf ├── 7 - Diğer Kalıplar.pdf └── Readme.md └── src ├── c# ├── Creational │ ├── AbstractFactory │ │ └── AbstractFactory │ │ │ └── GUIAbstractFactory2 │ │ │ ├── Button.cs │ │ │ ├── Client.cs │ │ │ ├── GUIFactory.cs │ │ │ ├── IComponent.cs │ │ │ ├── IGUIFactory.cs │ │ │ ├── List.cs │ │ │ ├── Table.cs │ │ │ └── Test.cs │ ├── Builder │ │ ├── Domain │ │ │ ├── BIOS.cs │ │ │ ├── CPU.cs │ │ │ ├── Computer.cs │ │ │ ├── Display.cs │ │ │ ├── GraphicCard.cs │ │ │ ├── HardDrive.cs │ │ │ ├── Keyboard.cs │ │ │ ├── Mouse.cs │ │ │ ├── RAM.cs │ │ │ ├── ROM.cs │ │ │ └── Test.cs │ │ └── Problem │ │ │ └── Test.cs │ ├── FactoryMethod │ │ ├── Bloch │ │ │ ├── Employee.cs │ │ │ └── Test.cs │ │ ├── FactoryMethod1 │ │ │ ├── Director.cs │ │ │ ├── DirectorFactory.cs │ │ │ ├── Employee.cs │ │ │ ├── EmployeeFactory.cs │ │ │ ├── HR.cs │ │ │ ├── IFactory.cs │ │ │ ├── Manager.cs │ │ │ ├── ManagerFactory.cs │ │ │ ├── PayrollOffice.cs │ │ │ └── Test.cs │ │ ├── FactoryMethod2 │ │ │ ├── Director.cs │ │ │ ├── DirectorFactory.cs │ │ │ ├── Employee.cs │ │ │ ├── EmployeeFactory.cs │ │ │ ├── HR.cs │ │ │ ├── IFactory.cs │ │ │ ├── Manager.cs │ │ │ ├── ManagerFactory.cs │ │ │ ├── PayrollOffice.cs │ │ │ └── Test.cs │ │ ├── FactoryMethod4 │ │ │ ├── EmployeeFactory.cs │ │ │ ├── HR.cs │ │ │ └── Test.cs │ │ ├── Problem │ │ │ ├── Employee.cs │ │ │ ├── HR.cs │ │ │ ├── PayrollOffice.cs │ │ │ └── Test.cs │ │ └── Util │ │ │ └── EmployeeRandomizer.cs │ ├── Readme.md │ └── Singleton │ │ ├── Client.cs │ │ ├── DoubleCheckedLockingSingleton │ │ ├── Client.cs │ │ └── DoubleCheckedLockingSingleton.cs │ │ ├── EnumSingleton │ │ ├── Client.cs │ │ └── EnumSingleton.cs │ │ ├── LazySingleton │ │ ├── Client.cs │ │ └── LazySingleton.cs │ │ ├── PostCode │ │ ├── City.cs │ │ ├── Client.cs │ │ ├── IPostCodeService.cs │ │ ├── Neighborhood.cs │ │ ├── PostCode.cs │ │ ├── PostCodeServiceEnum.cs │ │ └── Street.cs │ │ ├── Singleton │ │ ├── Client.cs │ │ └── Singleton.cs │ │ ├── SingletonReflection │ │ ├── Client.cs │ │ ├── Client.exe │ │ ├── Singleton.cs │ │ └── Singleton.dll │ │ ├── SingletonSerializable │ │ ├── Client.cs │ │ └── Singleton.cs │ │ ├── ThreadSafeLazySingleton1.cs │ │ ├── ThreadSafeLazySingleton1 │ │ ├── Client.cs │ │ └── ThreadSafeLazySingleton1.cs │ │ ├── ThreadSafeLazySingleton2 │ │ ├── Client.cs │ │ └── ThreadSafeLazySingleton2.cs │ │ ├── ThreadedLazySingleton │ │ ├── Client.cs │ │ └── ThreadedLazySingleton.cs │ │ └── UpdatableSingleton │ │ ├── Client.cs │ │ └── UpdatableSingleton.cs ├── Readme.md ├── ch01 │ ├── BasbakanlikKalemi.cs │ ├── GercekBasbakan.cs │ ├── IBasbakan.cs │ ├── Readme.md │ ├── Test.cs │ ├── Vatandas.cs │ └── VekilBasbakan.cs ├── ch02 │ ├── Elevator │ │ ├── DataOnlyElevatorTest.cs │ │ ├── Domain │ │ │ ├── DataOnlyElevator.cs │ │ │ ├── EncapsulatedElevator.cs │ │ │ ├── Floor.cs │ │ │ ├── FloorMovement.cs │ │ │ ├── GetterSetterElevator.cs │ │ │ ├── PrimitiveElevator.cs │ │ │ └── Readme.md │ │ ├── EncapsulatedElevatorTest.cs │ │ ├── GetterSetterElevatorTest.cs │ │ ├── PrimitiveElevatorTest.cs │ │ ├── Readme.md │ │ └── Responsible │ │ │ ├── Floor.cs │ │ │ ├── FloorMovement.cs │ │ │ ├── IElevator.cs │ │ │ ├── Readme.md │ │ │ ├── ResponsibleElevator.cs │ │ │ └── ResponsibleElevatorTest.cs │ └── Readme.md └── ch03 ├── go └── proxy │ └── basbakan │ ├── Basbakan.go │ ├── BasbakanlikKalemi.go │ ├── GercekBasbakan.go │ ├── Readme.md │ ├── Vatandas.go │ ├── Vekil Basbakan.go │ └── test │ ├── Test.go │ └── Test2.go ├── java ├── Readme.md └── org │ └── javaturk │ └── dp │ ├── Readme.md │ ├── ch01 │ └── Readme.md │ ├── ch02 │ ├── anemic │ │ ├── account1 │ │ │ ├── Account.java │ │ │ ├── AccountService.java │ │ │ ├── CD1.png │ │ │ └── CD1.ucls │ │ └── account2 │ │ │ ├── Account.java │ │ │ ├── AccountService.java │ │ │ ├── AmountValidator.java │ │ │ ├── CD1.png │ │ │ └── CD1.ucls │ ├── calendar │ │ ├── Calendar.java │ │ ├── CalendarTest.java │ │ └── Date.java │ ├── cohesion │ │ └── mixedDomain │ │ │ ├── Complex.java │ │ │ └── Real.java │ ├── coupling │ │ ├── account │ │ │ ├── account1 │ │ │ │ └── Account.java │ │ │ ├── account2 │ │ │ │ ├── Account.java │ │ │ │ ├── AccountAction.java │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── Deposit.java │ │ │ │ └── Withdraw.java │ │ │ └── ex │ │ │ │ ├── InsufficentBalanceException.java │ │ │ │ └── NegativeAmountException.java │ │ └── atm │ │ │ ├── ATM.java │ │ │ └── CardReader.java │ ├── elevator │ │ ├── DataOnlyElevatorTest.java │ │ ├── EncapsulatedElevatorTest.java │ │ ├── GetterSetterElevatorTest.java │ │ ├── PrimitiveElevatorTest.java │ │ ├── domain │ │ │ ├── DataOnlyElevator.java │ │ │ ├── DataOnlyElevatorCD.png │ │ │ ├── DataOnlyElevatorCD.ucls │ │ │ ├── EncapsulatedElevator.java │ │ │ ├── EncapsulatedElevatorCD.png │ │ │ ├── EncapsulatedElevatorCD.ucls │ │ │ ├── Floor.java │ │ │ ├── GetterSetterElevator.java │ │ │ ├── GetterSetterElevatorCD.png │ │ │ ├── GetterSetterElevatorCD.ucls │ │ │ ├── PrimitiveElevator.java │ │ │ ├── PrimitiveElevatorCD.png │ │ │ └── PrimitiveElevatorCD.ucls │ │ └── responsible │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Elevator.java │ │ │ ├── Floor.java │ │ │ ├── ResponsibleElevator.java │ │ │ └── ResponsibleElevatorTest.java │ ├── factory │ │ ├── problem │ │ │ ├── Employee.java │ │ │ └── IamNotDirectorException.java │ │ └── solution │ │ │ ├── Boss.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── CD2.png │ │ │ ├── CD2.ucls │ │ │ ├── Director.java │ │ │ ├── Employee.java │ │ │ ├── Engineer.java │ │ │ ├── Manager.java │ │ │ ├── Secretary.java │ │ │ ├── Test.java │ │ │ └── Worker.java │ └── polymorphism │ │ ├── ConfRoom.java │ │ ├── Employee.java │ │ ├── Equipment.java │ │ ├── Schedulable.java │ │ └── Schedule.java │ ├── ch03 │ ├── Readme.md │ ├── di │ │ ├── dependency1 │ │ │ ├── A.java │ │ │ ├── B.java │ │ │ ├── C.java │ │ │ ├── CD1.png │ │ │ └── CD1.ucls │ │ └── dependency2 │ │ │ ├── A.java │ │ │ ├── B.java │ │ │ ├── C.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ └── D.java │ ├── dip │ │ └── paper │ │ │ ├── problem │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ ├── Copy.java │ │ │ ├── CopyTest.java │ │ │ ├── Keyboard.java │ │ │ └── Printer.java │ │ │ └── solution │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ ├── Copy.java │ │ │ ├── CopyTest.java │ │ │ ├── FileReader.java │ │ │ ├── FileWriter.java │ │ │ ├── Keyboard.java │ │ │ ├── Printer.java │ │ │ ├── Reader.java │ │ │ └── Writer.java │ ├── isp │ │ ├── log │ │ │ ├── Log.java │ │ │ ├── bad │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ └── Logger.java │ │ │ └── good │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── DBLogger.java │ │ │ │ ├── FileLogger.java │ │ │ │ └── Logger.java │ │ └── paper │ │ │ ├── collection │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── ICollection.java │ │ │ ├── IEnumerator.java │ │ │ ├── Int32.java │ │ │ └── Test.java │ │ │ └── security │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Door.java │ │ │ ├── TimedDoor.java │ │ │ ├── Timer.java │ │ │ └── TimerClient.java │ ├── lsp │ │ ├── designByContract │ │ │ ├── bad │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── Calculator.java │ │ │ │ ├── PositiveCalculator.java │ │ │ │ └── Test.java │ │ │ ├── calculator │ │ │ │ ├── bad │ │ │ │ │ ├── CD1.png │ │ │ │ │ ├── CD1.ucls │ │ │ │ │ ├── Calculator.java │ │ │ │ │ ├── PositiveCalculator.java │ │ │ │ │ └── Test.java │ │ │ │ └── ex │ │ │ │ │ ├── CD1.png │ │ │ │ │ ├── CD1.ucls │ │ │ │ │ ├── Calculator.java │ │ │ │ │ ├── NegativeArgumentException.java │ │ │ │ │ └── PositiveCalculator.java │ │ │ └── taxi │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── Customer.java │ │ │ │ ├── Service.java │ │ │ │ ├── Taxi.java │ │ │ │ ├── Test.java │ │ │ │ ├── VipService.java │ │ │ │ └── VipTaxi.java │ │ ├── rtti │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Director.java │ │ │ ├── Employee.java │ │ │ ├── EmployeeFactory.java │ │ │ ├── Factory.java │ │ │ ├── HR.java │ │ │ ├── Manager.java │ │ │ └── Test.java │ │ └── square │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Geometry.java │ │ │ ├── Rectangle.java │ │ │ ├── Square.java │ │ │ └── Test.java │ ├── ocp │ │ └── factory │ │ │ ├── problem │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ └── Employee.java │ │ │ └── solution │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Director.java │ │ │ ├── DirectorFactory.java │ │ │ ├── Employee.java │ │ │ ├── EmployeeFactory.java │ │ │ ├── Factory.java │ │ │ ├── HR.java │ │ │ ├── Manager.java │ │ │ └── ManagerFactory.java │ └── srp │ │ ├── customerService │ │ ├── problem │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ └── CustomerService.java │ │ └── solution │ │ │ ├── dao │ │ │ └── CustomerDAOI.java │ │ │ ├── ex │ │ │ ├── CustomerAlreadyExistsException.java │ │ │ ├── CustomerAlreadyLoggedException.java │ │ │ ├── CustomerLockedException.java │ │ │ ├── ImproperCustomerCredentialsException.java │ │ │ ├── InsufficentFundException.java │ │ │ ├── MaxNumberOfFailedLoggingAttemptExceededException.java │ │ │ ├── NegativeAmountException.java │ │ │ ├── NoProperPasswordException.java │ │ │ ├── NoSuchCustomerException.java │ │ │ ├── ValidationException.java │ │ │ └── WrongCustomerCredentialsException.java │ │ │ ├── service │ │ │ ├── AbstractService.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── CustomerService.java │ │ │ ├── CustomerServiceI.java │ │ │ ├── LoginService.java │ │ │ └── LoginServiceI.java │ │ │ └── util │ │ │ ├── ATMLogger.java │ │ │ ├── ATMProperties.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── PasswordValidator.java │ │ │ ├── TcknValidator.java │ │ │ └── Validator.java │ │ ├── domain │ │ ├── Account.java │ │ ├── Customer.java │ │ ├── Transaction.java │ │ └── TransactionType.java │ │ ├── paper │ │ └── comm1 │ │ │ └── Cd1.png │ │ └── task │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── Job.java │ │ ├── Product.java │ │ ├── Sorter.java │ │ ├── SorterTask.java │ │ ├── SorterTaskFactory.java │ │ └── Test.java │ ├── ch04 │ ├── Readme.md │ └── abstractFactory │ │ ├── gui │ │ ├── sol1 │ │ │ ├── Button.java │ │ │ ├── ButtonFactory.java │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ ├── Client.java │ │ │ ├── Component.java │ │ │ ├── GUIFactory.java │ │ │ ├── List.java │ │ │ ├── ListFactory.java │ │ │ ├── Table.java │ │ │ ├── TableFactory.java │ │ │ └── Test.java │ │ ├── sol2 │ │ │ ├── Button.java │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ ├── Client.java │ │ │ ├── Component.java │ │ │ ├── GUIFactory.java │ │ │ ├── GUIFactoryImpl.java │ │ │ ├── List.java │ │ │ ├── Table.java │ │ │ └── Test.java │ │ └── sol3 │ │ │ ├── Button.java │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ ├── Client.java │ │ │ ├── Component.java │ │ │ ├── GUIFactory.java │ │ │ ├── List.java │ │ │ ├── OSXButton.java │ │ │ ├── OSXFactory.java │ │ │ ├── OSXList.java │ │ │ ├── OSXTable.java │ │ │ ├── Table.java │ │ │ ├── Test.java │ │ │ ├── WinButton.java │ │ │ ├── WinFactory.java │ │ │ ├── WinList.java │ │ │ └── WinTable.java │ │ └── university │ │ ├── sol1 │ │ ├── AUniversityFactory.java │ │ ├── BUniversityFactory.java │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── Course.java │ │ ├── Professor.java │ │ ├── Schedule.java │ │ ├── Syllabus.java │ │ └── UniversityFactory.java │ │ ├── sol2 │ │ ├── AUniversityFactory.java │ │ ├── BUniversityFactory.java │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── Course.java │ │ ├── FactoryForUniversityA.java │ │ ├── FactoryForUniversityB.java │ │ ├── Professor.java │ │ ├── Schedule.java │ │ ├── Syllabus.java │ │ └── VirtualClassroom.java │ │ └── sol3 │ │ ├── AUniversityFactory.java │ │ ├── BUniversityFactory.java │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── Course.java │ │ ├── FactoryForUniversityA.java │ │ ├── FactoryForUniversityB.java │ │ ├── Professor.java │ │ ├── Schedule.java │ │ └── Syllabus.java │ ├── ch05 │ ├── Readme.md │ ├── adapter │ │ ├── electricity │ │ │ ├── domain │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── tr │ │ │ │ │ ├── Appliance.java │ │ │ │ │ ├── ClassDiagram1.png │ │ │ │ │ ├── ClassDiagram1.ucls │ │ │ │ │ ├── HomeAppliance.java │ │ │ │ │ ├── Test.java │ │ │ │ │ ├── TurkishHomeAppliance.java │ │ │ │ │ ├── TurkishPowerProvider.java │ │ │ │ │ └── TurkishPowerSource.java │ │ │ │ └── us │ │ │ │ │ ├── CD.png │ │ │ │ │ ├── CD.ucls │ │ │ │ │ ├── Test.java │ │ │ │ │ ├── USHomeApplicance.java │ │ │ │ │ ├── USPowerProvider.java │ │ │ │ │ └── USPowerSource.java │ │ │ ├── powerAdapter1 │ │ │ │ ├── ClassDiagram2.png │ │ │ │ ├── ClassDiagram2.ucls │ │ │ │ ├── Test1.java │ │ │ │ └── USTurkishPowerAdapter.java │ │ │ ├── powerAdapter2 │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── Test1.java │ │ │ │ └── USTurkishPowerAdapter.java │ │ │ ├── problem1 │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── Test.java │ │ │ │ └── TurkishHomeAppliance.java │ │ │ ├── problem2 │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── Test.java │ │ │ │ └── TurkishHomeApplianceCompatibleWithUSPowerSource.java │ │ │ └── twoWayAdapter │ │ │ │ ├── CD.png │ │ │ │ ├── CD.ucls │ │ │ │ ├── Test.java │ │ │ │ └── TwoWayUSTurkishPowerAdapter.java │ │ ├── javaAPI │ │ │ ├── awtSwing │ │ │ │ ├── CD.png │ │ │ │ └── CD.ucls │ │ │ └── io │ │ │ │ ├── CD1.png │ │ │ │ ├── CD1.ucls │ │ │ │ ├── CD2.png │ │ │ │ └── CD2.ucls │ │ └── sorter │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Client.java │ │ │ ├── JavaArraysSorter.java │ │ │ ├── SorterClient.java │ │ │ ├── SorterTest.java │ │ │ ├── contract │ │ │ ├── ApacheSorterI.java │ │ │ ├── JavaArraysSorterI.java │ │ │ └── Sorter.java │ │ │ └── impl │ │ │ ├── ApacheSorter.java │ │ │ └── BubbleSorter.java │ ├── composite │ │ ├── Readme.md │ │ ├── awtSwing │ │ │ ├── AwtCD.png │ │ │ ├── AwtCD.ucls │ │ │ ├── CD2.png │ │ │ └── CD2.ucls │ │ ├── fileSystem │ │ │ ├── Alias.java │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ ├── Directory.java │ │ │ ├── File.java │ │ │ ├── ShortCut.java │ │ │ ├── Storage.java │ │ │ ├── StorageContainer.java │ │ │ ├── StorageElement.java │ │ │ ├── Test.java │ │ │ └── iterator │ │ │ │ ├── DirectoryIterator.java │ │ │ │ └── StorageIterator.java │ │ └── graphic │ │ │ ├── Canvas.java │ │ │ ├── Circle.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── CompositeGraphic.java │ │ │ ├── Ellipse.java │ │ │ ├── Graphic.java │ │ │ ├── GraphicObject.java │ │ │ ├── Rectangle.java │ │ │ ├── Test.java │ │ │ └── Triangle.java │ ├── decorator │ │ ├── io │ │ │ └── DataInputOutputStreamDemo.java │ │ └── toast │ │ │ ├── pattern │ │ │ ├── CD1.png │ │ │ ├── Cheese.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── Ketchup.java │ │ │ ├── SD1.png │ │ │ ├── SD1.useq │ │ │ ├── Salad.java │ │ │ ├── Sausage.java │ │ │ ├── SequenceDiagram1.png │ │ │ ├── SequenceDiagram1.useq │ │ │ ├── Test.java │ │ │ ├── ToastBread.java │ │ │ ├── Toastable.java │ │ │ ├── Tomato.java │ │ │ └── Topping.java │ │ │ └── problem │ │ │ ├── AbstractToast.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── CheeseTomatoToast.java │ │ │ ├── CheseToast.java │ │ │ ├── SausageToast.java │ │ │ ├── SausageTomatoToast.java │ │ │ └── Toast.java │ ├── facade │ │ └── computer │ │ │ ├── BIOS.java │ │ │ ├── CD1.png │ │ │ ├── CPU.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── Client.java │ │ │ ├── Computer.java │ │ │ ├── Display.java │ │ │ ├── HardDrive.java │ │ │ ├── RAM.java │ │ │ ├── ROM.java │ │ │ ├── SD1.png │ │ │ ├── SD1.useq │ │ │ ├── SequenceDiagram1.png │ │ │ ├── SequenceDiagram1.useq │ │ │ └── problem │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── Client.java │ │ │ ├── SD1.png │ │ │ └── SD1.useq │ ├── flyweight │ │ ├── book │ │ │ ├── Book.java │ │ │ ├── BookFactory.java │ │ │ ├── CD1.png │ │ │ ├── Character.java │ │ │ ├── Factory.java │ │ │ ├── Line.java │ │ │ ├── Page.java │ │ │ └── Test.java │ │ └── circles │ │ │ ├── ButtonListener.java │ │ │ ├── CD.png │ │ │ ├── Circle.java │ │ │ ├── CircleFactory.java │ │ │ ├── CircleThread.java │ │ │ ├── CirclesCanvas.java │ │ │ ├── CirclesFrame.java │ │ │ ├── CirclesTest.java │ │ │ ├── Factory.java │ │ │ └── Point.java │ └── proxy │ │ ├── basbakan │ │ ├── Basbakan.java │ │ ├── BasbakanlikKalemi.java │ │ ├── CD1.png │ │ ├── ClassDiagram1.png │ │ ├── GercekBasbakan.java │ │ ├── Test.java │ │ ├── Vatandas.java │ │ ├── VekilBasbakan.java │ │ └── basbakan1 │ │ │ ├── Basbakan.java │ │ │ ├── CD.png │ │ │ ├── CD.ucls │ │ │ └── Vatandas.java │ │ ├── basbakan2 │ │ ├── Basbakan.java │ │ ├── CD1.png │ │ ├── Vatandas.java │ │ └── Vekil.java │ │ ├── image │ │ ├── BigImage.java │ │ ├── CD1.png │ │ ├── Document.java │ │ ├── Image.java │ │ ├── ImageChooser.java │ │ └── ImageProxy.java │ │ └── network │ │ ├── CD1.png │ │ ├── Gateway.java │ │ ├── Logger.java │ │ ├── Network.java │ │ ├── NetworkClient.java │ │ ├── NetworkServer.java │ │ ├── ProxyServer.java │ │ └── YasakKardesimException.java │ ├── ch06 │ ├── Readme.md │ ├── chainOfResponsibility │ │ ├── callCenter │ │ │ ├── AbstractCallTaker.java │ │ │ ├── AbstractCustomer.java │ │ │ ├── CD1.png │ │ │ ├── CallTaker.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── Customer.java │ │ │ ├── GoldCallTaker.java │ │ │ ├── GoldCustomer.java │ │ │ ├── SD1.png │ │ │ ├── SD1.useq │ │ │ ├── SequenceDiagram1.png │ │ │ ├── SequenceDiagram1.useq │ │ │ ├── SequenceDiagram2.png │ │ │ ├── StandardCallTaker.java │ │ │ ├── StandardCustomer.java │ │ │ ├── Test.java │ │ │ ├── VipCallTaker.java │ │ │ └── VipCustomer.java │ │ └── pattern │ │ │ ├── AbstractHandler.java │ │ │ ├── AbstractHelp.java │ │ │ ├── CD1.png │ │ │ ├── ConcreteHandler1.java │ │ │ ├── ConcreteHandler2.java │ │ │ ├── ConcreteHandler3.java │ │ │ ├── Context.java │ │ │ ├── Handler.java │ │ │ ├── Help.java │ │ │ ├── Help1.java │ │ │ ├── Help2.java │ │ │ ├── Help3.java │ │ │ └── Test.java │ ├── command │ │ ├── ac │ │ │ ├── ACSwitch.java │ │ │ ├── AirConditioner.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── Command.java │ │ │ ├── CoolCommand.java │ │ │ ├── HeatCommand.java │ │ │ ├── Person.java │ │ │ ├── Temperature.java │ │ │ ├── TurnOffCommand.java │ │ │ └── TurnOnCommand.java │ │ ├── account │ │ │ ├── pattern │ │ │ │ ├── AbstractTransaction.java │ │ │ │ ├── Account.java │ │ │ │ ├── AccountFactory.java │ │ │ │ ├── CD1.png │ │ │ │ ├── CheckingAccount.java │ │ │ │ ├── CheckingAccountFactory.java │ │ │ │ ├── CheckingAccountTransactionFactory.java │ │ │ │ ├── ClassDiagram1.png │ │ │ │ ├── Deposit.java │ │ │ │ ├── Factory.java │ │ │ │ ├── NotEnoughBalanceException.java │ │ │ │ ├── SD1.png │ │ │ │ ├── Test.java │ │ │ │ ├── Transaction.java │ │ │ │ ├── TransactionFactory.java │ │ │ │ └── Withdraw.java │ │ │ └── problem │ │ │ │ ├── Account.java │ │ │ │ ├── CD1.png │ │ │ │ └── NotEnoughBalanceException.java │ │ └── lender │ │ │ ├── pattern │ │ │ ├── Borrower.java │ │ │ ├── CD1.png │ │ │ ├── Command.java │ │ │ ├── Lender.java │ │ │ └── TaxOffice.java │ │ │ ├── problem1 │ │ │ ├── Borrower.java │ │ │ ├── CD1.png │ │ │ └── Lender.java │ │ │ └── problem2 │ │ │ ├── Borrower.java │ │ │ ├── CD1.png │ │ │ ├── ConcreteBorrower1.java │ │ │ ├── ConcreteBorrower2.java │ │ │ └── Lender.java │ ├── iterator │ │ └── fileSystem │ │ │ ├── Alias.java │ │ │ ├── CD1.png │ │ │ ├── CD2.png │ │ │ ├── Directory.java │ │ │ ├── File.java │ │ │ ├── ShortCut.java │ │ │ ├── Storage.java │ │ │ ├── StorageElement.java │ │ │ ├── Test.java │ │ │ └── iterator │ │ │ └── DirectoryIterator.java │ ├── mediator │ │ └── traffic │ │ │ ├── CD.png │ │ │ ├── Car.java │ │ │ ├── Junction.java │ │ │ ├── Test.java │ │ │ ├── TrafficMediator.java │ │ │ ├── TrafficPolice.java │ │ │ └── Vehicle.java │ ├── memento │ │ ├── gui │ │ │ ├── CD1.png │ │ │ ├── GuiComponent.java │ │ │ ├── GuiComponentMemento.java │ │ │ ├── GuiComponentState.java │ │ │ ├── SD1.png │ │ │ └── Test.java │ │ ├── pattern1 │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Caretaker.java │ │ │ ├── Memento.java │ │ │ ├── Originator.java │ │ │ └── Test.java │ │ └── pattern2 │ │ │ ├── CD1.png │ │ │ ├── Caretaker.java │ │ │ ├── Originator.java │ │ │ └── Test.java │ ├── observer │ │ ├── payment │ │ │ ├── Accountant.java │ │ │ ├── Boss.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── Invoice.java │ │ │ ├── SequenceDiagram1.png │ │ │ ├── SequenceDiagram1.useq │ │ │ └── Test.java │ │ └── publisher │ │ │ ├── AbstractPublication.java │ │ │ ├── AbstractSubscriber.java │ │ │ ├── CD1.png │ │ │ ├── FourFourTwo.java │ │ │ ├── IndividualSubscriber.java │ │ │ ├── InstitutionalSubscriber.java │ │ │ ├── Newsweek.java │ │ │ ├── Publication.java │ │ │ ├── Publisher.java │ │ │ ├── SequenceDiagram1.png │ │ │ ├── SequenceDiagram1.useq │ │ │ ├── Subscriber.java │ │ │ └── Test.java │ ├── state │ │ ├── account │ │ │ ├── Account.java │ │ │ ├── AccountStatus.java │ │ │ ├── Active.java │ │ │ ├── CD1.png │ │ │ ├── Closed.java │ │ │ ├── Frozen.java │ │ │ ├── Overdrawn.java │ │ │ ├── SD1.png │ │ │ └── Test.java │ │ ├── door │ │ │ ├── pattern1 │ │ │ │ ├── AbstractDoorState.java │ │ │ │ ├── CD1.png │ │ │ │ ├── ClosedDoor.java │ │ │ │ ├── Door.java │ │ │ │ ├── DoorState.java │ │ │ │ ├── OpenDoor.java │ │ │ │ └── Test.java │ │ │ ├── pattern2 │ │ │ │ ├── AbstractDoor.java │ │ │ │ ├── CD1.png │ │ │ │ ├── ClosedDoor.java │ │ │ │ ├── Door.java │ │ │ │ ├── DoorState.java │ │ │ │ ├── DoorStateManager.java │ │ │ │ ├── OpenDoor.java │ │ │ │ └── Test.java │ │ │ └── problem │ │ │ │ ├── CD1.png │ │ │ │ ├── Door.java │ │ │ │ └── Test.java │ │ ├── elevator │ │ │ ├── Elevator.java │ │ │ ├── ElevatorState.java │ │ │ ├── GoingDownState.java │ │ │ ├── GoingUpState.java │ │ │ ├── StoppedState.java │ │ │ └── Test.java │ │ ├── pattern │ │ │ ├── CD1.png │ │ │ ├── ConcreteTCPConnection.java │ │ │ ├── TCPClosed.java │ │ │ ├── TCPConnection.java │ │ │ ├── TCPEstablished.java │ │ │ ├── TCPListen.java │ │ │ └── TCPState.java │ │ └── person │ │ │ ├── CD1.png │ │ │ ├── EmotionalState.java │ │ │ ├── HappyState.java │ │ │ ├── Person.java │ │ │ ├── SD1.png │ │ │ ├── SadState.java │ │ │ └── Test.java │ ├── strategy │ │ └── sorting │ │ │ ├── ArrayCreator.java │ │ │ ├── pattern │ │ │ ├── BubbleSorter.java │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── JavaSorter.java │ │ │ ├── QuickSorter.java │ │ │ ├── Readme.txt │ │ │ ├── SequenceDiagram1.png │ │ │ ├── SequenceDiagram1.useq │ │ │ ├── Sorter.java │ │ │ ├── SortingContext.java │ │ │ └── Test.java │ │ │ ├── problem │ │ │ ├── ClassDiagram1.png │ │ │ ├── ClassDiagram1.ucls │ │ │ ├── Sorter.java │ │ │ └── Test.java │ │ │ └── subClassing │ │ │ ├── BubbleSorter.java │ │ │ ├── ClassDİagram1.png │ │ │ ├── ClassDİagram1.ucls │ │ │ ├── JavaSorter.java │ │ │ ├── QuickSorter.java │ │ │ ├── Sorter.java │ │ │ └── Test.java │ ├── templateMethod │ │ ├── pattern │ │ │ ├── Application.java │ │ │ ├── CD1.png │ │ │ ├── Document.java │ │ │ ├── MyApplication.java │ │ │ ├── MyDocument.java │ │ │ └── Test.java │ │ └── task │ │ │ ├── CD1.png │ │ │ ├── ClassDiagram1.png │ │ │ ├── Fax.java │ │ │ ├── Print.java │ │ │ ├── Scan.java │ │ │ ├── Task.java │ │ │ └── Test.java │ └── visitor │ │ ├── animal │ │ ├── ReadMe.txt │ │ ├── pattern1 │ │ │ ├── Animal.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Cat.java │ │ │ ├── Dog.java │ │ │ ├── Feeder.java │ │ │ └── Test.java │ │ ├── pattern2 │ │ │ ├── AbstractAnimal.java │ │ │ ├── Animal.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Cat.java │ │ │ ├── CatFeeder.java │ │ │ ├── Dog.java │ │ │ ├── DogFeeder.java │ │ │ ├── Feeder.java │ │ │ └── Test.java │ │ └── problem │ │ │ ├── Animal.java │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── Cat.java │ │ │ ├── Dog.java │ │ │ ├── Feeder.java │ │ │ ├── Readme.txt │ │ │ └── Test.java │ │ ├── factory │ │ ├── Boss.java │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── CD2.png │ │ ├── CD3.png │ │ ├── Company.java │ │ ├── Director.java │ │ ├── Employee.java │ │ ├── Engineer.java │ │ ├── HR.java │ │ ├── HealthVisitor.java │ │ ├── Manager.java │ │ ├── ReadMe.txt │ │ ├── SD1.png │ │ ├── SD1.useq │ │ ├── Secretary.java │ │ ├── Test.java │ │ └── Visitor.java │ │ ├── file │ │ ├── domain │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── File.java │ │ │ ├── TextFile.java │ │ │ └── XMLFile.java │ │ ├── pattern1 │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── File.java │ │ │ ├── FileVisitor.java │ │ │ ├── Test.java │ │ │ ├── TextFile.java │ │ │ ├── Visitor.java │ │ │ └── XMLFile.java │ │ ├── problem1 │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── File.java │ │ │ ├── Test.java │ │ │ ├── TextFile.java │ │ │ └── XMLFile.java │ │ └── problem2 │ │ │ ├── CD1.png │ │ │ ├── CD1.ucls │ │ │ ├── File.java │ │ │ ├── FileOperator.java │ │ │ ├── Test.java │ │ │ ├── TextFile.java │ │ │ └── XMLFile.java │ │ └── pattern │ │ └── problem │ │ ├── Assignment.java │ │ ├── Node.java │ │ └── VariableReference.java │ └── ch07 │ ├── nullObject │ └── pattern │ │ ├── AbstractObject.java │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── Client.java │ │ ├── Factory.java │ │ ├── NullObject.java │ │ ├── RealObject.java │ │ ├── Test.java │ │ ├── optional │ │ ├── AbstractObject.java │ │ ├── Client.java │ │ ├── Factory.java │ │ ├── RealObject.java │ │ └── Test.java │ │ └── problem │ │ ├── CD1.png │ │ ├── CD1.ucls │ │ ├── Client.java │ │ ├── Factory.java │ │ └── Test.java │ └── typeObject │ └── drink │ ├── Drink.java │ ├── DrinkType.java │ └── Test.java └── python └── proxy └── ProxyTest.py /README.md: -------------------------------------------------------------------------------- 1 | # DesignPatterns 2 | 3 | 4 | Materials for **Design Patterns** training course. 5 | Its slides are in Turkish. I am planning to port them to English. 6 | 7 | Examples written in Java are complete i.e. all patterns have example code in Java but for other langauges such as C#, C++, Python, Go, etc they are not complete. I'll add new examples whenever I find time. 8 | 9 | Please contact me at akin@javaturk.org for typos, suggestions and questions. 10 | 11 | -------------------------------------------------------------------------------- /Slides/1 - Tasarım Kalıplarına Giriş.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/1 - Tasarım Kalıplarına Giriş.pdf -------------------------------------------------------------------------------- /Slides/2 - Bolum Nesne-Merkezli Programlama Sistem Yaklaşımı.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/2 - Bolum Nesne-Merkezli Programlama Sistem Yaklaşımı.pdf -------------------------------------------------------------------------------- /Slides/3 - Bolum Temel Prensipler.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/3 - Bolum Temel Prensipler.pdf -------------------------------------------------------------------------------- /Slides/4 - Yaratımsal Kalıplar.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/4 - Yaratımsal Kalıplar.pdf -------------------------------------------------------------------------------- /Slides/5 - Yapısal Kalıplar.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/5 - Yapısal Kalıplar.pdf -------------------------------------------------------------------------------- /Slides/6 - Davranışsal Kalıplar.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/6 - Davranışsal Kalıplar.pdf -------------------------------------------------------------------------------- /Slides/7 - Diğer Kalıplar.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/Slides/7 - Diğer Kalıplar.pdf -------------------------------------------------------------------------------- /Slides/Readme.md: -------------------------------------------------------------------------------- 1 | Slides for **Design Patterns** training course. 2 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/Button.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public class Button : IComponent 5 | { 6 | public void Paint() 7 | { 8 | Console.WriteLine("Painting a button!"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/Client.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public class Client 5 | { 6 | public Client(IGUIFactory factory) 7 | { 8 | IComponent button = factory.CreateButton(); 9 | button.Paint(); 10 | 11 | IComponent list = factory.CreateList(); 12 | list.Paint(); 13 | 14 | IComponent table = factory.CreateTable(); 15 | table.Paint(); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/GUIFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public class GUIFactory : IGUIFactory 5 | { 6 | 7 | public IComponent CreateButton() 8 | { 9 | return new Button(); 10 | } 11 | 12 | public IComponent CreateList() 13 | { 14 | return new List(); 15 | } 16 | 17 | public IComponent CreateTable() 18 | { 19 | return new Table(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/IComponent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public interface IComponent 5 | { 6 | void Paint(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/IGUIFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public interface IGUIFactory 5 | { 6 | IComponent CreateButton(); 7 | 8 | IComponent CreateList(); 9 | 10 | IComponent CreateTable(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/List.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public class List : IComponent 5 | { 6 | public void Paint() 7 | { 8 | Console.WriteLine("Painting a list!"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/Table.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public class Table : IComponent 5 | { 6 | public void Paint() 7 | { 8 | Console.WriteLine("Painting a table!"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/AbstractFactory/AbstractFactory/GUIAbstractFactory2/Test.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace GUIAbstractFactory2 3 | { 4 | public class Test 5 | { 6 | public static void Main() 7 | { 8 | new Client(new GUIFactory()); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/BIOS.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Domain 4 | { 5 | internal class BIOS 6 | { 7 | private ROM rom; 8 | 9 | public BIOS() 10 | { 11 | rom = new ROM(2 * 1024); 12 | } 13 | 14 | public void Start() 15 | { 16 | Console.WriteLine("BIOS: Getting the image of OS kernel."); 17 | rom.GetOSKernelImage(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/CPU.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class CPU 5 | { 6 | public void Start() 7 | { 8 | Console.WriteLine("CPU has started."); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/Display.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class Display 5 | { 6 | public void Start() 7 | { 8 | Console.WriteLine("Display has started."); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/GraphicCard.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class GraphicCard 5 | { 6 | public void Start() 7 | { 8 | Console.WriteLine("GraphicCard has started."); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/HardDrive.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class HardDrive 5 | { 6 | public void Start() 7 | { 8 | Console.WriteLine("Hard disk has started."); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/Keyboard.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class Keyboard 5 | { 6 | public void Start() 7 | { 8 | Console.WriteLine("Keyboard has started."); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/Mouse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class Mouse 5 | { 6 | public void Start() 7 | { 8 | Console.WriteLine("Mouse has started."); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/ROM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Domain 3 | { 4 | public class ROM 5 | { 6 | private readonly int size; // Size of ROM in MB 7 | 8 | public ROM(int size) 9 | { 10 | this.size = size; 11 | } 12 | 13 | public byte[] GetOSKernelImage() 14 | { 15 | Console.WriteLine("ROM: Loading the image of OS kernel."); 16 | byte[] kernelImage = new byte[2 * 1024 * 1024]; 17 | 18 | // ... 19 | 20 | return kernelImage; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/c#/Creational/Builder/Domain/Test.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Domain 4 | { 5 | public class Test 6 | { 7 | static void Main() 8 | { 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/Bloch/Test.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Bloch 4 | { 5 | public class Test 6 | { 7 | static void Main() 8 | { 9 | Employee newEmployee = Employee.CreateNewEmployee(4, "Ali", "Sales"); 10 | Employee newTempEmployee = Employee.CreateNewTemporaryEmployee(4, "Ali"); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod1/DirectorFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Util; 3 | 4 | namespace FactoryMethod1 5 | { 6 | public class DirectorFactory : IFactory 7 | { 8 | public Employee Create() 9 | { 10 | Director director = new Director(EmployeeRandomizer.CreateId(), EmployeeRandomizer.CreateName(), 11 | EmployeeRandomizer.CreateYear(), "Management", "Management", 5000); 12 | return director; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod1/EmployeeFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Util; 3 | 4 | namespace FactoryMethod1 5 | { 6 | public class EmployeeFactory : IFactory 7 | { 8 | public Employee Create() 9 | { 10 | Employee employee = new Employee(EmployeeRandomizer.CreateId(), EmployeeRandomizer.CreateName(), 11 | EmployeeRandomizer.CreateYear(), EmployeeRandomizer.CreateDepartment()); 12 | return employee; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod1/IFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace FactoryMethod1 3 | { 4 | public interface IFactory 5 | { 6 | Employee Create(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod1/ManagerFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Util; 3 | 4 | namespace FactoryMethod1 5 | { 6 | public class ManagerFactory : IFactory 7 | { 8 | public Employee Create() { 9 | string department = EmployeeRandomizer.CreateDepartment(); 10 | Manager manager = new Manager(EmployeeRandomizer.CreateId(), EmployeeRandomizer.CreateName(), 11 | EmployeeRandomizer.CreateYear(), department, department); 12 | return manager; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod1/PayrollOffice.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace FactoryMethod1 3 | { 4 | public class PayrollOffice 5 | { 6 | public void PaySalary(Employee employee) 7 | { 8 | string name = employee.name; 9 | string department = employee.department; 10 | double salary = employee.CalculateSalary(); 11 | 12 | Console.WriteLine("Paying " + salary + " to " + " " + name + " in " + department); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod2/DirectorFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Util; 3 | 4 | namespace FactoryMethod2 5 | { 6 | public class DirectorFactory : IFactory 7 | { 8 | public Employee Create(string name) 9 | { 10 | Director director = new Director(EmployeeRandomizer.CreateId(), name, 11 | EmployeeRandomizer.CreateYear(), "Management", "Management", 5000); 12 | return director; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod2/EmployeeFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Util; 3 | 4 | namespace FactoryMethod2 5 | { 6 | public class EmployeeFactory : IFactory 7 | { 8 | public Employee Create(string name) 9 | { 10 | Employee employee = new Employee(EmployeeRandomizer.CreateId(), name, 11 | EmployeeRandomizer.CreateYear(), EmployeeRandomizer.CreateDepartment()); 12 | return employee; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod2/IFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace FactoryMethod2 3 | { 4 | public interface IFactory 5 | { 6 | Employee Create(string name); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod2/ManagerFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Util; 3 | 4 | namespace FactoryMethod2 5 | { 6 | public class ManagerFactory : IFactory 7 | { 8 | public Employee Create(string name) { 9 | string department = EmployeeRandomizer.CreateDepartment(); 10 | Manager manager = new Manager(EmployeeRandomizer.CreateId(), name, 11 | EmployeeRandomizer.CreateYear(), department, department); 12 | return manager; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/FactoryMethod2/PayrollOffice.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace FactoryMethod2 3 | { 4 | public class PayrollOffice 5 | { 6 | public void PaySalary(Employee employee) 7 | { 8 | string name = employee.name; 9 | string department = employee.department; 10 | double salary = employee.CalculateSalary(); 11 | 12 | Console.WriteLine("Paying " + salary + " to " + " " + name + " in " + department); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/c#/Creational/FactoryMethod/Problem/PayrollOffice.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Problem 3 | { 4 | public class PayrollOffice 5 | { 6 | public void PaySalary(Employee employee) 7 | { 8 | string type = employee.type; 9 | string name = employee.name; 10 | string department = employee.department; 11 | double salary = employee.CalculateSalary(); 12 | 13 | Console.WriteLine("Paying " + salary + " to " + type + " " + name + " in " + department); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/c#/Creational/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/Client.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | 4 | namespace ThreadSafeLazySingleton1 5 | { 6 | public class Client 7 | { 8 | static void Main() 9 | { 10 | Client client = new Client(); 11 | for (int i = 0; i < 1000; i++) 12 | { 13 | Thread thr = new Thread(new ThreadStart(client.Run)); 14 | thr.Start(); 15 | } 16 | } 17 | 18 | public void Run() 19 | { 20 | ThreadSafeLazySingleton1 s = ThreadSafeLazySingleton1.Instance; 21 | s.PrintName(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/LazySingleton/Client.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Singleton { 3 | public class LazySingletonClient { 4 | static void Main(string[] args) { 5 | for (int i = 0; i < 100; i++) { 6 | LazySingleton s = LazySingleton.Instance; 7 | s.PrintName(); 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/PostCode/City.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace PostCode 3 | { 4 | public class City 5 | { 6 | private string name { get; } 7 | 8 | public City(string name) 9 | { 10 | this.name = name; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/PostCode/IPostCodeService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace PostCode 5 | { 6 | public interface IPostCodeService 7 | { 8 | PostCode GetPostCode(City city, Neighborhood neighborhood); 9 | 10 | public PostCode GetPostCode(City city, Street street); 11 | 12 | public List GetPostCodes(City city); 13 | 14 | public List GetPostCodesAround(PostCode postCode); 15 | 16 | public void Refresh(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/PostCode/Neighborhood.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace PostCode 3 | { 4 | public class Neighborhood 5 | { 6 | public Neighborhood() 7 | { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/PostCode/Street.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace PostCode 3 | { 4 | public class Street 5 | { 6 | private string name { get; } 7 | 8 | public Street(string name) 9 | { 10 | this.name = name; 11 | } 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/SingletonReflection/Client.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/c#/Creational/Singleton/SingletonReflection/Client.exe -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/SingletonReflection/Singleton.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/c#/Creational/Singleton/SingletonReflection/Singleton.dll -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/ThreadSafeLazySingleton1/Client.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | 4 | namespace ThreadSafeLazySingleton1 5 | { 6 | public class Client 7 | { 8 | static void Main() 9 | { 10 | Client client = new Client(); 11 | for (int i = 0; i < 1000; i++) 12 | { 13 | Thread thr = new Thread(new ThreadStart(client.Run)); 14 | thr.Start(); 15 | } 16 | } 17 | 18 | public void Run() 19 | { 20 | ThreadSafeLazySingleton1 s = ThreadSafeLazySingleton1.Instance; 21 | s.PrintName(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/c#/Creational/Singleton/ThreadSafeLazySingleton2/Client.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | 4 | namespace ThreadSafeLazySingleton2 5 | { 6 | public class Client 7 | { 8 | static void Main() 9 | { 10 | Client client = new Client(); 11 | for (int i = 0; i < 100; i++) 12 | { 13 | Thread thread = new Thread(new ThreadStart(client.Run)); 14 | thread.Start(); 15 | } 16 | } 17 | 18 | public void Run() 19 | { 20 | ThreadSafeLazySingleton2 s = ThreadSafeLazySingleton2.Instance; 21 | s.PrintName(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/c#/Readme.md: -------------------------------------------------------------------------------- 1 | C# source code for the examples. 2 | -------------------------------------------------------------------------------- /src/c#/ch01/GercekBasbakan.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace DesignPatterns.org.javaturk.dp.basic.pattern.gof.structural.proxy.basbakan 3 | { 4 | public class GercekBasbakan : IBasbakan 5 | { 6 | 7 | public void DertDinle(string dert) 8 | { 9 | Console.WriteLine("Basbakan: Dinliyorum."); 10 | } 11 | 12 | public void IsBul(string yakinim) 13 | { 14 | Console.WriteLine("Basbakan: Bana boyle isteklerle gelmeyin."); 15 | } 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/c#/ch01/IBasbakan.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace DesignPatterns.org.javaturk.dp.basic.pattern.gof.structural.proxy.basbakan 3 | { 4 | public interface IBasbakan 5 | { 6 | void DertDinle(string dert); 7 | 8 | void IsBul(string yakinim); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/c#/ch01/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Domain/DataOnlyElevator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Elevator.Domain { 3 | 4 | public class DataOnlyElevator { 5 | public bool doorOpen = false; 6 | public int currentFloor = 1; 7 | public int weight = 0; 8 | 9 | public readonly int CAPACITY = 1000; 10 | public readonly int TOP_FLOOR = 5; 11 | public readonly int BOTTOM_FLOOR = 1; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Domain/Floor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Elevator.Domain 3 | { 4 | public enum Floor 5 | { 6 | ENTRANCE, FIRST, SECOND, THIRD, FOURTH, FIFTH 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Domain/GetterSetterElevator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Elevator.Domain { 3 | public class GetterSetterElevator { 4 | public bool DoorOpen { get; set; } = false; 5 | public int CurrentFloor { get; set; } = 1; 6 | public int Weight { get; set; } = 0; 7 | 8 | public readonly int CAPACITY = 1000; 9 | public readonly int TOP_FLOOR = 5; 10 | public readonly int BOTTOM_FLOOR = 1; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Domain/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Responsible/Floor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Elevator.Responsible 3 | { 4 | public enum Floor 5 | { 6 | ENTRANCE, FIRST, SECOND, THIRD, FOURTH, FIFTH 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Responsible/IElevator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace Elevator.Responsible 3 | { 4 | public interface IElevator 5 | { 6 | 7 | void Go(Floor desiredFloor); 8 | 9 | void OpenDoor(); 10 | 11 | void CloseDoor(); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/c#/ch02/Elevator/Responsible/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/c#/ch02/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/c#/ch03: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/go/proxy/basbakan/Basbakan.go: -------------------------------------------------------------------------------- 1 | package basbakan 2 | 3 | type Basbakan interface { 4 | 5 | DertDinle(dert string) 6 | 7 | IsBul(yakinim string) 8 | } 9 | -------------------------------------------------------------------------------- /src/go/proxy/basbakan/BasbakanlikKalemi.go: -------------------------------------------------------------------------------- 1 | package basbakan 2 | 3 | import "fmt" 4 | 5 | type BasbakanlikKalemi struct{ 6 | 7 | vekilBasbakan *VekilBasbakan 8 | 9 | } 10 | 11 | func (bk *BasbakanlikKalemi) Init(gb *GercekBasbakan) { 12 | bk.vekilBasbakan = new(VekilBasbakan) 13 | bk.vekilBasbakan.Init(gb) 14 | } 15 | 16 | func (bk *BasbakanlikKalemi) BanaBasbakaniVer() Basbakan{ 17 | fmt.Println("Başbakanlık Kalemi: Tabi efendim"); 18 | return bk.vekilBasbakan; 19 | } 20 | -------------------------------------------------------------------------------- /src/go/proxy/basbakan/GercekBasbakan.go: -------------------------------------------------------------------------------- 1 | package basbakan 2 | 3 | import "fmt" 4 | 5 | type GercekBasbakan struct{ 6 | Name string 7 | 8 | } 9 | 10 | func (gb *GercekBasbakan) DertDinle(dert string){ 11 | fmt.Println("Basbakan: Dinliyorum.") 12 | } 13 | 14 | func (gb *GercekBasbakan) IsBul(yakinim string){ 15 | fmt.Println("Basbakan: Bana boyle isteklerle gelmeyin.") 16 | } 17 | -------------------------------------------------------------------------------- /src/go/proxy/basbakan/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/go/proxy/basbakan/test/Test2.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | . "structural/proxy/basbakan" 5 | ) 6 | 7 | func main() { 8 | var basbakan = new(GercekBasbakan) 9 | var kalem = new(BasbakanlikKalemi) 10 | kalem.Init(basbakan) 11 | 12 | var riza = new(Vatandas) 13 | riza.SetKalem(kalem) 14 | 15 | riza.DerdiniAnlat() 16 | riza.IsIste() 17 | } 18 | -------------------------------------------------------------------------------- /src/java/Readme.md: -------------------------------------------------------------------------------- 1 | Source code in Java for the course **Design Patterns**. 2 | 3 | Please contact me at akin@javaturk.org for typos, suggestions and questions. 4 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch01/Readme.md: -------------------------------------------------------------------------------- 1 | No source code for this chapter. 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/anemic/account1/Account.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.anemic.account1; 2 | 3 | public class Account { 4 | 5 | private String iban; 6 | private double balance; 7 | 8 | public String getIban() { 9 | return iban; 10 | } 11 | 12 | public void setIban(String iban) { 13 | this.iban = iban; 14 | } 15 | 16 | public double getBalance() { 17 | return balance; 18 | } 19 | 20 | public void setBalance(double balance) { 21 | this.balance = balance; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/anemic/account1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/anemic/account1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/anemic/account2/AmountValidator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.anemic.account2; 2 | 3 | import org.javaturk.dp.ch02.coupling.account.ex.NegativeAmountException; 4 | 5 | public class AmountValidator { 6 | 7 | public void validate(double amount) throws NegativeAmountException { 8 | if(amount < 0) 9 | throw new NegativeAmountException(amount); 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/anemic/account2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/anemic/account2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/account/account2/AccountAction.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.account.account2; 2 | 3 | import org.javaturk.dp.ch02.coupling.account.ex.InsufficentBalanceException; 4 | 5 | public interface AccountAction { 6 | 7 | public double act(double balance, double amount) throws InsufficentBalanceException; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/account/account2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/coupling/account/account2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/account/account2/Deposit.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.account.account2; 2 | 3 | public class Deposit implements AccountAction { 4 | 5 | @Override 6 | public double act(double balance, double amount) { 7 | balance -= amount; 8 | return balance; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/account/account2/Withdraw.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.account.account2; 2 | 3 | import org.javaturk.dp.ch02.coupling.account.ex.InsufficentBalanceException; 4 | 5 | public class Withdraw implements AccountAction { 6 | 7 | @Override 8 | public double act(double balance, double amount) throws InsufficentBalanceException { 9 | if (balance >= amount) 10 | balance -= amount; 11 | else 12 | throw new InsufficentBalanceException(balance, amount); 13 | 14 | return balance; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/account/ex/InsufficentBalanceException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.account.ex; 2 | 3 | public class InsufficentBalanceException extends Exception { 4 | 5 | public InsufficentBalanceException(String action, double balance, double amount) { 6 | } 7 | 8 | public InsufficentBalanceException(double balance, double amount) { 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/account/ex/NegativeAmountException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.account.ex; 2 | 3 | public class NegativeAmountException extends Exception { 4 | private static final String prefix = "Negative amount can't be provided. "; 5 | public NegativeAmountException(double amount) { 6 | super(prefix + amount); 7 | } 8 | 9 | public String getMessage(){ 10 | return prefix + super.getMessage(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/atm/ATM.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.atm; 2 | 3 | public class ATM { 4 | private String state; 5 | // ... 6 | public void serviceCustomers() { 7 | // ... 8 | while (state.equals("RUNNING")) { 9 | int readerStatus = CardReader.NO_CARD; 10 | // .... 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/coupling/atm/CardReader.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.coupling.atm; 2 | 3 | public class CardReader { 4 | 5 | public static final int NO_CARD = 0; 6 | public static final int CARD_INSIDE = 1; 7 | public static final int CARD_EJECTED = 2; 8 | // ... 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/domain/DataOnlyElevator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.elevator.domain; 2 | 3 | public class DataOnlyElevator { 4 | 5 | public boolean doorOpen = false; 6 | public int currentFloor = 1; 7 | public int weight = 0; 8 | 9 | public final int CAPACITY = 1000; 10 | public final int TOP_FLOOR = 5; 11 | public final int BOTTOM_FLOOR = 1; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/domain/DataOnlyElevatorCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/elevator/domain/DataOnlyElevatorCD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/domain/EncapsulatedElevatorCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/elevator/domain/EncapsulatedElevatorCD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/domain/GetterSetterElevatorCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/elevator/domain/GetterSetterElevatorCD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/domain/PrimitiveElevatorCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/elevator/domain/PrimitiveElevatorCD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/responsible/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/elevator/responsible/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/responsible/Elevator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.elevator.responsible; 2 | 3 | public interface Elevator { 4 | 5 | public void go(Floor desiredFloor); 6 | 7 | public void openDoor(); 8 | 9 | public void closeDoor(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/elevator/responsible/ResponsibleElevatorTest.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.elevator.responsible; 2 | 3 | 4 | public class ResponsibleElevatorTest { 5 | public static void main(String[] args) { 6 | 7 | Elevator elevator = new ResponsibleElevator(); 8 | elevator.openDoor(); // Get into the elevator 9 | elevator.go(Floor.FIFTH); 10 | 11 | elevator.openDoor(); // Somebody is coming :) 12 | elevator.go(Floor.FIRST); 13 | elevator.go(Floor.FIFTH); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/factory/problem/IamNotDirectorException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.factory.problem; 2 | 3 | public class IamNotDirectorException extends Exception { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/factory/solution/Boss.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.factory.solution; 2 | 3 | public class Boss implements Worker{ 4 | 5 | public void youWorkToo(){ 6 | System.out.println("Boss is working for you :)"); 7 | } 8 | 9 | @Override 10 | public void work() { 11 | youWorkToo(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/factory/solution/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/factory/solution/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/factory/solution/CD2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch02/factory/solution/CD2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/factory/solution/Worker.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch02.factory.solution; 2 | 3 | public interface Worker { 4 | 5 | void work(); 6 | } 7 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/polymorphism/ConfRoom.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch02.polymorphism; 3 | 4 | public class ConfRoom implements Schedulable{ 5 | 6 | @Override 7 | public int getObjectId() { 8 | return (int) (Math.random() * (2^31)); 9 | } 10 | 11 | @Override 12 | public void notifyAboutActivity() { 13 | System.out.println("Notification from an conference room."); 14 | } 15 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/polymorphism/Employee.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch02.polymorphism; 3 | 4 | public class Employee implements Schedulable{ 5 | 6 | @Override 7 | public int getObjectId() { 8 | return (int) (Math.random() * (2^31)); 9 | } 10 | 11 | @Override 12 | public void notifyAboutActivity() { 13 | System.out.println("Notification from an employee."); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/polymorphism/Equipment.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch02.polymorphism; 3 | 4 | public class Equipment implements Schedulable{ 5 | 6 | @Override 7 | public int getObjectId() { 8 | return (int) (Math.random() * (2^31)); 9 | } 10 | 11 | @Override 12 | public void notifyAboutActivity() { 13 | System.out.println("Notification from an equipment."); 14 | } 15 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/polymorphism/Schedulable.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch02.polymorphism; 3 | 4 | public interface Schedulable { 5 | 6 | int getObjectId(); 7 | 8 | void notifyAboutActivity(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch02/polymorphism/Schedule.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch02.polymorphism; 3 | 4 | public class Schedule { 5 | 6 | public void add(Schedulable schedulable) { 7 | 8 | } 9 | 10 | public void remove(Schedulable schedulable) { 11 | 12 | } 13 | 14 | public void notify(String dateTime) { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency1/A.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency1; 2 | 3 | public class A { 4 | C c; 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency1/B.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency1; 2 | 3 | public class B { 4 | C c; 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency1/C.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency1; 2 | 3 | public class C { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/di/dependency1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency2/A.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency2; 2 | 3 | public class A { 4 | B b; 5 | 6 | void f(C c) { 7 | D d = new D(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency2/B.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency2; 2 | 3 | public class B { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency2/C.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency2; 2 | 3 | public class C { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/di/dependency2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/di/dependency2/D.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.di.dependency2; 2 | 3 | public class D { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/problem/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/dip/paper/problem/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/problem/CopyTest.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.problem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class CopyTest { 9 | 10 | public static void main(String[] args) { 11 | Keyboard in = new Keyboard(); 12 | Printer out = new Printer(); 13 | 14 | Copy copy = new Copy(in, out); 15 | copy.start(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/problem/Keyboard.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.problem; 3 | 4 | import java.io.IOException; 5 | import java.io.InputStream; 6 | 7 | public class Keyboard { 8 | private InputStream input = System.in; 9 | 10 | public char read(){ 11 | char ch = ' '; 12 | try { 13 | ch = (char) input.read(); 14 | } catch (IOException e) { 15 | System.out.println("Problem while reading: " + e.getMessage()); 16 | } 17 | return ch; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/problem/Printer.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.problem; 3 | 4 | import java.io.PrintStream; 5 | 6 | public class Printer { 7 | private PrintStream out = System.out; 8 | 9 | public void write(char ch){ 10 | out.print(ch); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/solution/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/dip/paper/solution/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/solution/CopyTest.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.solution; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class CopyTest { 9 | 10 | public static void main(String[] args) { 11 | // Reader in = new Keyboard(); 12 | // Writer out = new Printer(); 13 | 14 | Reader in = new FileReader("/Users/akin/Desktop/Siir.txt"); 15 | Writer out = new FileWriter("/Users/akin/Desktop/SiirCopy2.txt"); 16 | 17 | Copy copy = new Copy(in, out); 18 | copy.start(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/solution/Printer.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.solution; 3 | 4 | import java.io.PrintStream; 5 | 6 | public class Printer implements Writer{ 7 | private PrintStream out = System.out; 8 | 9 | @Override 10 | public void write(char ch){ 11 | out.print(ch); 12 | } 13 | 14 | @Override 15 | public void close() { 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/solution/Reader.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.solution; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public interface Reader { 9 | public char read(); 10 | 11 | public void close(); 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/dip/paper/solution/Writer.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.dip.paper.solution; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public interface Writer { 9 | 10 | public void write(char ch); 11 | 12 | public void close(); 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/Log.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.log; 2 | 3 | public interface Log { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/bad/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/isp/log/bad/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/bad/Logger.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.log.bad; 2 | 3 | import java.io.File; 4 | 5 | import org.javaturk.dp.ch03.isp.log.Log; 6 | 7 | public interface Logger { 8 | 9 | void log(Log log); 10 | 11 | void openConnection(); 12 | 13 | void closeConnection(); 14 | 15 | void openFile(File file, boolean create); 16 | 17 | void closeFile(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/good/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/isp/log/good/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/good/DBLogger.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.log.good; 2 | 3 | import java.io.File; 4 | 5 | public interface DBLogger extends Logger { 6 | 7 | void openConnection(); 8 | 9 | void closeConnection(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/good/FileLogger.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.log.good; 2 | 3 | import java.io.File; 4 | 5 | public interface FileLogger extends Logger { 6 | 7 | void openFile(File file, boolean create); 8 | 9 | void closeFile(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/log/good/Logger.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.log.good; 2 | 3 | import java.io.File; 4 | 5 | import org.javaturk.dp.ch03.isp.log.Log; 6 | 7 | public interface Logger { 8 | 9 | void log(Log log); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/collection/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/isp/paper/collection/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/collection/ICollection.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.collection; 2 | 3 | public interface ICollection { 4 | 5 | public void Add(T t) ; 6 | 7 | public void Clear() ; 8 | 9 | public void Contains(T t) ; 10 | 11 | public void CopyTo(T[] t, Int32 i) ; 12 | 13 | public IEnumerator GetEnumerator() ; 14 | 15 | public void Remove(T t); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/collection/IEnumerator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.collection; 2 | 3 | public interface IEnumerator { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/collection/Int32.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.collection; 2 | 3 | public interface Int32 { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/collection/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.collection; 2 | 3 | import java.util.*; 4 | 5 | 6 | public class Test { 7 | public static void main(String[] args) { 8 | Collection col = null; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/security/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/isp/paper/security/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/security/Door.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.security; 2 | 3 | public class Door{ 4 | 5 | public void lock() { 6 | 7 | } 8 | 9 | public void unLock() { 10 | 11 | } 12 | 13 | public boolean isOpen() { 14 | return true; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/security/TimedDoor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.security; 2 | 3 | public class TimedDoor extends Door implements TimerClient{ 4 | 5 | @Override 6 | public void timeout() { 7 | 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/security/Timer.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.security; 2 | 3 | public class Timer { 4 | 5 | public void register(int timeout, TimerClient client) { 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/isp/paper/security/TimerClient.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.isp.paper.security; 2 | 3 | public interface TimerClient { 4 | 5 | public void timeout() ; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/bad/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/lsp/designByContract/bad/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/bad/Calculator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.bad; 2 | 3 | public class Calculator { 4 | 5 | public int add(int i, int j) { 6 | return i + j; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/bad/PositiveCalculator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.bad; 2 | 3 | /** 4 | * Counter example for design by contract. PositiveCalculator enforces a new 5 | * condition as a preceondition whereas its parent has no precondition. 6 | * 7 | * @author akin 8 | * 9 | */ 10 | public class PositiveCalculator extends Calculator { 11 | 12 | public int add(int i, int j) { 13 | if (i <= 0 | j <= 0) 14 | return -1; 15 | return i + j; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/bad/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/bad/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/bad/Calculator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.calculator.bad; 2 | 3 | public class Calculator { 4 | 5 | public int add(int i, int j) { 6 | return i + j; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/bad/PositiveCalculator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.calculator.bad; 2 | 3 | /** 4 | * Counter example for design by contract. PositiveCalculator enforces a new 5 | * condition as a preceondition whereas its parent has no precondition. 6 | * 7 | * @author akin 8 | * 9 | */ 10 | public class PositiveCalculator extends Calculator { 11 | 12 | public int add(int i, int j) { 13 | if (i <= 0 | j <= 0) 14 | return -1; 15 | return i + j; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/ex/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/ex/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/ex/Calculator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.calculator.ex; 2 | 3 | public class Calculator { 4 | 5 | public int add(int i, int j) throws NegativeArgumentException{ 6 | return i + j; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/calculator/ex/NegativeArgumentException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.calculator.ex; 2 | 3 | public class NegativeArgumentException extends Exception { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/taxi/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/lsp/designByContract/taxi/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/taxi/Service.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.taxi; 2 | 3 | public class Service { 4 | protected String description = "Destination arrived!"; 5 | 6 | @Override 7 | public String toString() { 8 | return "Service [description=" + description + "]"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/taxi/VipService.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.taxi; 2 | 3 | public class VipService extends Service{ 4 | private String vipDescription = "Wifi provided! "; 5 | 6 | @Override 7 | public String toString() { 8 | return "Service [description=" + vipDescription + description + "]"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/designByContract/taxi/VipTaxi.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.designByContract.taxi; 2 | 3 | public class VipTaxi extends Taxi { 4 | 5 | public VipTaxi(String string) { 6 | super(string); 7 | } 8 | 9 | public boolean checkPrecondition(Customer customer) { 10 | return true; 11 | } 12 | 13 | @Override 14 | public VipService service() { 15 | return new VipService(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/rtti/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/lsp/rtti/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/rtti/Factory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.rtti; 2 | 3 | public interface Factory { 4 | 5 | public Employee create(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/square/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/lsp/square/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/square/Geometry.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.square; 2 | 3 | public class Geometry { 4 | 5 | public void draw(Rectangle rectangle) { 6 | System.out.println("Area: " + rectangle.calculateArea()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/lsp/square/Square.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.lsp.square; 2 | 3 | public class Square extends Rectangle{ 4 | 5 | public Square() { 6 | } 7 | 8 | public Square(int side) { 9 | super(side, side); 10 | } 11 | 12 | @Override 13 | public void setShortSide(int shortSide) { 14 | this.shortSide = shortSide; 15 | this.longSide = shortSide; 16 | } 17 | 18 | @Override 19 | public void setLongSide(int longSide) { 20 | this.shortSide = longSide; 21 | this.longSide = longSide; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/ocp/factory/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/ocp/factory/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/ocp/factory/solution/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/ocp/factory/solution/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/ocp/factory/solution/DirectorFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.ocp.factory.solution; 2 | 3 | import org.javaturk.dp.ch04.factoryMethod.employee.EmployeeRandomizer; 4 | 5 | public class DirectorFactory implements Factory { 6 | 7 | @Override 8 | public Director create() { 9 | Director director = new Director(EmployeeRandomizer.createId(), EmployeeRandomizer.createName(), 10 | EmployeeRandomizer.createYear(), "Management", "Management", 5000); 11 | return director; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/ocp/factory/solution/EmployeeFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.ocp.factory.solution; 2 | 3 | import org.javaturk.dp.ch04.factoryMethod.employee.EmployeeRandomizer; 4 | 5 | public class EmployeeFactory implements Factory { 6 | 7 | @Override 8 | public Employee create() { 9 | Employee employee = new Employee(EmployeeRandomizer.createId(), EmployeeRandomizer.createName(), 10 | EmployeeRandomizer.createYear(), EmployeeRandomizer.createDepartment()); 11 | return employee; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/ocp/factory/solution/Factory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.ocp.factory.solution; 2 | 3 | public interface Factory { 4 | 5 | public Employee create(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/ocp/factory/solution/ManagerFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.ocp.factory.solution; 2 | 3 | import org.javaturk.dp.ch04.factoryMethod.employee.EmployeeRandomizer; 4 | 5 | public class ManagerFactory implements Factory{ 6 | 7 | @Override 8 | public Manager create() { 9 | Manager manager = new Manager(EmployeeRandomizer.createId(), EmployeeRandomizer.createName(), 10 | EmployeeRandomizer.createYear(), EmployeeRandomizer.createDepartment(), EmployeeRandomizer.createDepartment()); 11 | return manager; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/srp/customerService/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/CustomerAlreadyExistsException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | /** 4 | * Thrown when a Customer object is saved if another Customer with the same tckn exists in the database. 5 | * @author akin 6 | * 7 | */ 8 | public class CustomerAlreadyExistsException extends Exception { 9 | public CustomerAlreadyExistsException(String message) { 10 | super(message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/CustomerAlreadyLoggedException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class CustomerAlreadyLoggedException extends Exception { 4 | 5 | public CustomerAlreadyLoggedException(String message) { 6 | super(message); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/CustomerLockedException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class CustomerLockedException extends Exception { 4 | 5 | public CustomerLockedException(String message){ 6 | super(message); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/InsufficentFundException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class InsufficentFundException extends Exception { 4 | 5 | public InsufficentFundException(String message){ 6 | super(message); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/MaxNumberOfFailedLoggingAttemptExceededException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class MaxNumberOfFailedLoggingAttemptExceededException extends Exception { 4 | public MaxNumberOfFailedLoggingAttemptExceededException(String message){ 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/NegativeAmountException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class NegativeAmountException extends Exception { 4 | private static final String prefix = "Negative amount can't be provided. "; 5 | public NegativeAmountException(String string) { 6 | super(prefix + string); 7 | } 8 | 9 | public String getMessage(){ 10 | return prefix + super.getMessage(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/NoProperPasswordException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class NoProperPasswordException extends ValidationException { 4 | public NoProperPasswordException(String message){ 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/NoSuchCustomerException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class NoSuchCustomerException extends Exception { 4 | public NoSuchCustomerException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/ValidationException.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 3 | 4 | public class ValidationException extends Exception { 5 | 6 | public ValidationException(String message){ 7 | super(message); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/ex/WrongCustomerCredentialsException.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.ex; 2 | 3 | public class WrongCustomerCredentialsException extends Exception { 4 | public WrongCustomerCredentialsException(String message){ 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/service/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/srp/customerService/solution/service/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/util/ATMLogger.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.customerService.solution.util; 2 | 3 | import java.util.logging.Logger; 4 | 5 | public class ATMLogger { 6 | private static Logger logger = Logger.getLogger("ATMLogger"); 7 | 8 | public ATMLogger(){ 9 | logger = Logger.getLogger("ATMLogger"); 10 | } 11 | 12 | public static Logger getLogger(){ 13 | return logger; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/util/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/srp/customerService/solution/util/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/customerService/solution/util/Validator.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch03.srp.customerService.solution.util; 3 | 4 | import org.javaturk.dp.ch03.srp.customerService.solution.ex.*; 5 | 6 | public interface Validator { 7 | 8 | void validate(String string) throws ValidationException; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/domain/TransactionType.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.domain; 2 | 3 | public enum TransactionType { 4 | TRANSFER, 5 | DEPOSIT, 6 | WITHDRAW, 7 | EFT, 8 | PAYMENT 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/paper/comm1/Cd1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/srp/paper/comm1/Cd1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/task/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch03/srp/task/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/task/Job.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.task; 2 | 3 | public interface Job { 4 | 5 | public void doIt(); 6 | } 7 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/task/Product.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.task; 2 | 3 | public class Product { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/task/Sorter.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.task; 2 | 3 | import java.util.Collection; 4 | 5 | public interface Sorter { 6 | 7 | public void sort(Collection collection); 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/task/SorterTask.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.task; 2 | 3 | import java.util.Collection; 4 | 5 | public class SorterTask implements Job, Runnable, Sorter, Comparable { 6 | 7 | @Override 8 | public int compareTo(T t) { 9 | return 0; 10 | } 11 | 12 | @Override 13 | public void sort(Collection collection) { 14 | 15 | } 16 | 17 | @Override 18 | public void doIt() { 19 | 20 | } 21 | 22 | @Override 23 | public void run() { 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch03/srp/task/SorterTaskFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch03.srp.task; 2 | 3 | public class SorterTaskFactory { 4 | 5 | public Sorter create() { 6 | return new SorterTask(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/Button.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class Button implements Component { 4 | public void paint() { 5 | System.out.println("Painting an button!"); 6 | } 7 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/ButtonFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class ButtonFactory implements GUIFactory { 4 | 5 | public Button create() { 6 | return new Button(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/Client.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class Client { 4 | public Client(GUIFactory factory){ 5 | Component component = factory.create(); 6 | component.paint(); 7 | } 8 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/Component.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public interface Component { 4 | public void paint(); 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/GUIFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | interface GUIFactory { 4 | 5 | public Component create(); 6 | } 7 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/List.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class List implements Component{ 4 | 5 | public void paint() { 6 | System.out.println("Painting an list!"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/ListFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class ListFactory implements GUIFactory { 4 | 5 | @Override 6 | public List create() { 7 | return new List(); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/Table.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class Table implements Component{ 4 | public void paint() { 5 | System.out.println("Painting an table!"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/TableFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | public class TableFactory implements GUIFactory { 4 | 5 | @Override 6 | public Table create() { 7 | return new Table(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol1/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol1; 2 | 3 | import org.javaturk.dp.ch04.abstractFactory.gui.sol3.*; 4 | 5 | public class Test { 6 | public static void main(String[] args) { 7 | new Client(new ButtonFactory()); 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/Button.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | public class Button implements Component { 4 | public void paint() { 5 | System.out.println("Painting a button!"); 6 | } 7 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/Client.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | public class Client { 4 | public Client(GUIFactory factory){ 5 | Component button = factory.createButton(); 6 | button.paint(); 7 | 8 | Component list = factory.createList(); 9 | list.paint(); 10 | 11 | Component table = factory.createTable(); 12 | table.paint(); 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/Component.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | public interface Component { 4 | public void paint(); 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/GUIFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | interface GUIFactory { 4 | 5 | public Component createButton(); 6 | 7 | public Component createList(); 8 | 9 | public Component createTable(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/GUIFactoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | public class GUIFactoryImpl implements GUIFactory { 4 | public Button createButton() { 5 | return new Button(); 6 | } 7 | 8 | @Override 9 | public List createList() { 10 | return new List(); 11 | } 12 | 13 | @Override 14 | public Table createTable() { 15 | return new Table(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/List.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | public class List implements Component{ 4 | 5 | public void paint() { 6 | System.out.println("Painting an list!"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/Table.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | public class Table implements Component{ 4 | public void paint() { 5 | System.out.println("Painting an table!"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol2/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol2; 2 | 3 | import org.javaturk.dp.ch04.abstractFactory.gui.sol3.*; 4 | 5 | public class Test { 6 | public static void main(String[] args) { 7 | new Client(new GUIFactoryImpl()); 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/Button.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public abstract class Button implements Component{ 4 | public abstract void paint(); 5 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/Client.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class Client { 4 | public Client(GUIFactory factory){ 5 | Component button = factory.createButton(); 6 | button.paint(); 7 | 8 | Component list = factory.createList(); 9 | list.paint(); 10 | 11 | Component table = factory.createTable(); 12 | table.paint(); 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/Component.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public interface Component { 4 | public void paint(); 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/GUIFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | interface GUIFactory { 4 | 5 | public Component createButton(); 6 | 7 | public Component createList(); 8 | 9 | public Component createTable(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/List.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public abstract class List implements Component{ 4 | 5 | public abstract void paint(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/OSXButton.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class OSXButton extends Button { 4 | public void paint() { 5 | System.out.println("Painting an OSX Button!"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/OSXFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class OSXFactory implements GUIFactory { 4 | 5 | public Component createButton() { 6 | return new OSXButton(); 7 | } 8 | 9 | @Override 10 | public Component createList() { 11 | return new OSXList(); 12 | } 13 | 14 | @Override 15 | public Component createTable() { 16 | return new OSXTable(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/OSXList.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class OSXList extends List { 4 | 5 | @Override 6 | public void paint() { 7 | System.out.println("Painting an OSX List!"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/OSXTable.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class OSXTable extends Table { 4 | 5 | @Override 6 | public void paint() { 7 | System.out.println("Painting an OSX Table!"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/Table.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public abstract class Table implements Component{ 4 | public abstract void paint(); 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/WinButton.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class WinButton extends Button { 4 | public void paint() { 5 | System.out.println("Painting a Win Button!"); 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/WinFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class WinFactory implements GUIFactory { 4 | public Component createButton() { 5 | return new WinButton(); 6 | } 7 | 8 | @Override 9 | public Component createList() { 10 | return new WinList(); 11 | } 12 | 13 | @Override 14 | public Component createTable() { 15 | return new WinTable(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/WinList.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class WinList extends List { 4 | 5 | @Override 6 | public void paint() { 7 | System.out.println("Painting a Win List!"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/gui/sol3/WinTable.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.gui.sol3; 2 | 3 | public class WinTable extends Table { 4 | 5 | @Override 6 | public void paint() { 7 | System.out.println("Painting a Win Table!"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/Course.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol1; 2 | 3 | public class Course { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/Professor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol1; 2 | 3 | public class Professor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/Schedule.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol1; 2 | 3 | public class Schedule { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/Syllabus.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol1; 2 | 3 | public class Syllabus { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol1/UniversityFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol1; 2 | 3 | public interface UniversityFactory { 4 | 5 | Course createCourse(); 6 | Professor createProfessor(); 7 | Schedule createSchedule(); 8 | Syllabus createSyllabus(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/Course.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public class Course { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/FactoryForUniversityA.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public interface FactoryForUniversityA { 4 | 5 | Course createCourse(); 6 | Professor createProfessor(); 7 | Schedule createSchedule(); 8 | Syllabus createSyllabus(); 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/FactoryForUniversityB.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public interface FactoryForUniversityB { 4 | 5 | Course createCourse(); 6 | Professor createProfessor(); 7 | Schedule createSchedule(); 8 | Syllabus createSyllabus(); 9 | VirtualClassroom createVirtualClassroom(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/Professor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public class Professor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/Schedule.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public class Schedule { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/Syllabus.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public class Syllabus { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol2/VirtualClassroom.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol2; 2 | 3 | public class VirtualClassroom { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/Course.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol3; 2 | 3 | public class Course { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/FactoryForUniversityA.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol3; 2 | 3 | public interface FactoryForUniversityA { 4 | 5 | Course createCourse(String name); 6 | Professor createProfessor(String name); 7 | Schedule createSchedule(String name); 8 | Syllabus createSyllabus(String name); 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/FactoryForUniversityB.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol3; 2 | 3 | public interface FactoryForUniversityB { 4 | 5 | Course createCourse(); 6 | Professor createProfessor(); 7 | Schedule createSchedule(); 8 | Syllabus createSyllabus(); 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/Professor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol3; 2 | 3 | public class Professor { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/Schedule.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol3; 2 | 3 | public class Schedule { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch04/abstractFactory/university/sol3/Syllabus.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch04.abstractFactory.university.sol3; 2 | 3 | public class Syllabus { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/domain/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/tr/Appliance.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.adapter.electricity.domain.tr; 2 | 3 | public interface Appliance { 4 | 5 | public void setPowerSource(TurkishPowerSource powerSource); 6 | 7 | public void start(); 8 | 9 | public void stop(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/tr/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/domain/tr/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/tr/HomeAppliance.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.adapter.electricity.domain.tr; 2 | 3 | public abstract class HomeAppliance implements Appliance { 4 | protected TurkishPowerSource powerSource; 5 | 6 | @Override 7 | public void setPowerSource(TurkishPowerSource powerSource) { 8 | this.powerSource = powerSource; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/tr/TurkishPowerSource.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.adapter.electricity.domain.tr; 2 | 3 | public interface TurkishPowerSource { 4 | 5 | public void providePowerAt220V(); 6 | 7 | public void turnOn(); 8 | 9 | public void turnOff(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/us/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/domain/us/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/us/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.adapter.electricity.domain.us; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | USPowerSource usPowerSource = new USPowerProvider(); 7 | 8 | USHomeApplicance usMixer = new USHomeApplicance("Mixer"); 9 | usMixer.setPowerSource(usPowerSource); 10 | usMixer.start(); 11 | usMixer.stop(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/domain/us/USPowerSource.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.adapter.electricity.domain.us; 2 | 3 | public interface USPowerSource { 4 | 5 | public void providePowerAt110V(); 6 | 7 | public void pushSwitch(); 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/powerAdapter1/ClassDiagram2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/powerAdapter1/ClassDiagram2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/powerAdapter2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/powerAdapter2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/problem1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/problem1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/problem2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/problem2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/electricity/twoWayAdapter/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/electricity/twoWayAdapter/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/javaAPI/awtSwing/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/javaAPI/awtSwing/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/javaAPI/io/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/javaAPI/io/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/javaAPI/io/CD2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/javaAPI/io/CD2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/adapter/sorter/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/Client.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter; 3 | 4 | import org.javaturk.dp.ch05.adapter.sorter.contract.Sorter; 5 | 6 | public interface Client { 7 | 8 | public void setSorter(Sorter sorter); 9 | 10 | public int[] sortArray(int[] array); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/JavaArraysSorter.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter; 3 | 4 | import java.util.Arrays; 5 | 6 | import org.javaturk.dp.ch05.adapter.sorter.contract.*; 7 | 8 | public class JavaArraysSorter implements JavaArraysSorterI { 9 | 10 | public JavaArraysSorter(){ 11 | System.out.println("\n*** JavaArraysSorter ***"); 12 | } 13 | 14 | @Override 15 | public void sort(int[] array) { 16 | Arrays.sort(array); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/SorterClient.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter; 3 | 4 | import org.javaturk.dp.ch05.adapter.sorter.contract.Sorter; 5 | 6 | public class SorterClient implements Client { 7 | private Sorter sorter; 8 | 9 | @Override 10 | public void setSorter(Sorter sorter) { 11 | this.sorter = sorter; 12 | } 13 | 14 | @Override 15 | public int[] sortArray(int[] array) { 16 | sorter.sort(array); 17 | return array; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/contract/ApacheSorterI.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter.contract; 3 | 4 | public interface ApacheSorterI { 5 | 6 | public void sortInPlace(double[] x, double[]... yList); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/contract/JavaArraysSorterI.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter.contract; 3 | 4 | public interface JavaArraysSorterI { 5 | 6 | public void sort(int[] a); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/contract/Sorter.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter.contract; 3 | 4 | public interface Sorter { 5 | 6 | public int[] sort(int[] array); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/adapter/sorter/impl/ApacheSorter.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.adapter.sorter.impl; 3 | 4 | import org.apache.commons.math3.util.MathArrays; 5 | import org.javaturk.dp.ch05.adapter.sorter.contract.ApacheSorterI; 6 | 7 | public class ApacheSorter implements ApacheSorterI { 8 | 9 | public ApacheSorter(){ 10 | System.out.println("\n*** ApacheSorter ***"); 11 | } 12 | 13 | @Override 14 | public void sortInPlace(double[] x, double[]... yList) { 15 | MathArrays.sortInPlace(x); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/awtSwing/AwtCD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/composite/awtSwing/AwtCD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/awtSwing/CD2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/composite/awtSwing/CD2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/Alias.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.composite.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class Alias extends StorageElement{ 9 | 10 | public Alias(String name, StorageElement parent) { 11 | super(name, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/composite/fileSystem/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/File.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.composite.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class File extends StorageElement{ 9 | 10 | public File(String name, Storage parent) { 11 | super(name, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/ShortCut.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.composite.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class ShortCut extends StorageElement{ 9 | 10 | public ShortCut(String name, Storage parent) { 11 | super(name, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/Storage.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.composite.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public interface Storage { 9 | 10 | public void rename(String newName); 11 | 12 | public void save(); 13 | 14 | public void delete(); 15 | 16 | public Storage copy(); 17 | 18 | public void move(Directory target); 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/StorageContainer.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.composite.fileSystem; 3 | 4 | import java.util.List; 5 | 6 | import org.javaturk.dp.ch05.composite.fileSystem.iterator.DirectoryIterator; 7 | 8 | public interface StorageContainer { 9 | 10 | public void add(Storage element); 11 | 12 | public void delete(Storage element); 13 | 14 | public void list(); 15 | 16 | public List elements(); 17 | 18 | public DirectoryIterator iterator(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/fileSystem/iterator/StorageIterator.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.composite.fileSystem.iterator; 3 | 4 | import java.util.Iterator; 5 | 6 | import org.javaturk.dp.ch05.composite.fileSystem.Storage; 7 | 8 | public interface StorageIterator extends Iterator { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/graphic/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/composite/graphic/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/graphic/CompositeGraphic.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.composite.graphic; 2 | 3 | import java.util.*; 4 | 5 | public interface CompositeGraphic{ 6 | 7 | public void addGraphic(Graphic graphic); 8 | 9 | public void removeGraphic(Graphic graphic); 10 | 11 | public Collection getGraphics(); 12 | 13 | public void listGraphic(); 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/composite/graphic/Graphic.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.composite.graphic; 2 | 3 | public interface Graphic { 4 | 5 | public void draw(); 6 | 7 | public void erase(); 8 | 9 | public void paint(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/decorator/toast/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/Cheese.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.pattern; 2 | 3 | public class Cheese extends Topping{ 4 | 5 | public Cheese(Toastable toastTopping, String name, int price) { 6 | super(toastTopping, price, name); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/decorator/toast/pattern/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/Ketchup.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.pattern; 2 | 3 | public class Ketchup extends Topping{ 4 | 5 | public Ketchup(Toastable toastTopping, String name, int price) { 6 | super(toastTopping, price, name); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/decorator/toast/pattern/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/SD1.useq: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/Salad.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.pattern; 2 | 3 | public class Salad extends Topping{ 4 | 5 | public Salad(Toastable toastTopping, String name, int price) { 6 | super(toastTopping, price, name); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/Sausage.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.pattern; 2 | 3 | public class Sausage extends Topping{ 4 | 5 | public Sausage(Toastable toastTopping, String name, int price) { 6 | super(toastTopping, price, name); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/SequenceDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/decorator/toast/pattern/SequenceDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/Toastable.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.pattern; 2 | 3 | import java.util.List; 4 | 5 | public interface Toastable { 6 | 7 | public int calculatePrice(); 8 | 9 | List getToppings(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/pattern/Tomato.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.pattern; 2 | 3 | public class Tomato extends Topping{ 4 | 5 | public Tomato(Toastable toastTopping, String name, int price) { 6 | super(toastTopping, price, name); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/AbstractToast.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.problem; 2 | 3 | public abstract class AbstractToast implements Toast{ 4 | protected String name; 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/decorator/toast/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/CheeseTomatoToast.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.problem; 2 | 3 | public class CheeseTomatoToast extends CheseToast { 4 | 5 | public CheeseTomatoToast() { 6 | name = "Cheese Domato Toast"; 7 | } 8 | 9 | @Override 10 | public int calculatePrice() { 11 | return super.calculatePrice() + 2; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/CheseToast.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.problem; 2 | 3 | public class CheseToast extends AbstractToast{ 4 | 5 | public CheseToast() { 6 | name = "Chese Toast"; 7 | } 8 | 9 | @Override 10 | public int calculatePrice() { 11 | return 5; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/SausageToast.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.problem; 2 | 3 | public class SausageToast extends AbstractToast { 4 | 5 | public SausageToast() { 6 | super(); 7 | name = "Sausage Toast"; 8 | } 9 | 10 | @Override 11 | public int calculatePrice() { 12 | return 6; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/SausageTomatoToast.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.problem; 2 | 3 | public class SausageTomatoToast extends SausageToast { 4 | 5 | public SausageTomatoToast() { 6 | name = "Sausage Domato Toast"; 7 | } 8 | 9 | @Override 10 | public int calculatePrice() { 11 | return super.calculatePrice() + 2; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/decorator/toast/problem/Toast.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.decorator.toast.problem; 2 | 3 | public interface Toast { 4 | 5 | public int calculatePrice(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/BIOS.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.facade.computer; 2 | 3 | public class BIOS { 4 | private ROM rom; 5 | 6 | public BIOS() { 7 | rom = new ROM(2*1024); 8 | } 9 | 10 | public void start() { 11 | System.out.println("BIOS: Getting the image of OS kernel."); 12 | rom.getOSKernelImage(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/facade/computer/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/CPU.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.facade.computer; 2 | 3 | public class CPU { 4 | 5 | public void start() { 6 | System.out.println("CPU has started."); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/facade/computer/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/Client.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.facade.computer; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | Computer computer = new Computer(); 7 | computer.start(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/Display.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.facade.computer; 2 | 3 | public class Display { 4 | 5 | public void start() { 6 | System.out.println("Display has started."); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/HardDrive.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.facade.computer; 2 | 3 | public class HardDrive { 4 | 5 | public void start() { 6 | System.out.println("HardDrive has started."); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/ROM.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.facade.computer; 2 | 3 | public class ROM { 4 | private int size; // Size of ROM in MB 5 | 6 | public ROM(int size) { 7 | this.size = size; 8 | } 9 | 10 | public byte[] getOSKernelImage() { 11 | System.out.println("ROM: Loading the image of OS kernel."); 12 | byte[] kernelImage = new byte[2*1024*1024]; 13 | 14 | // ... 15 | 16 | return kernelImage; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/facade/computer/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/SequenceDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/facade/computer/SequenceDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/problem/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/facade/computer/problem/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/facade/computer/problem/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/facade/computer/problem/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/flyweight/book/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/flyweight/book/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/flyweight/book/Factory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.flyweight.book; 2 | 3 | public interface Factory { 4 | Character createCharacter(char c, boolean upperCase); 5 | 6 | Line createLine(int numberOfCharacters); 7 | 8 | Page createPage(int no, int numberOfLines); 9 | 10 | Book createBook(String name, int numberOfPages); 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/flyweight/circles/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/flyweight/circles/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/flyweight/circles/CirclesTest.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.flyweight.circles; 3 | 4 | import javax.swing.JFrame; 5 | 6 | public class CirclesTest { 7 | 8 | public static void main(String[] args) { 9 | JFrame frame = new CirclesFrame(); 10 | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 11 | frame.setVisible(true); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/flyweight/circles/Factory.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.flyweight.circles; 3 | 4 | import java.awt.Component; 5 | 6 | /** 7 | * @author akin 8 | * 9 | */ 10 | public interface Factory { 11 | 12 | Circle create(); 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/flyweight/circles/Point.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.flyweight.circles; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class Point { 9 | private int x; 10 | private int y; 11 | 12 | public Point(int x, int y) { 13 | this.x = x; 14 | this.y = y; 15 | } 16 | 17 | public int getX() { 18 | return x; 19 | } 20 | 21 | public int getY() { 22 | return y; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/Basbakan.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.proxy.basbakan; 2 | 3 | public interface Basbakan { 4 | 5 | public void dertDinle(String dert); 6 | 7 | public void isBul(String yakinim); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/BasbakanlikKalemi.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.proxy.basbakan; 2 | 3 | public class BasbakanlikKalemi { 4 | 5 | private Basbakan basbakan; 6 | 7 | public BasbakanlikKalemi(Basbakan basbakan){ 8 | this.basbakan = new VekilBasbakan(basbakan); 9 | } 10 | 11 | public Basbakan banaBasbakaniVer(){ 12 | System.out.println("Başbakanlık Kalemi: Tabi efendim"); 13 | return basbakan; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/proxy/basbakan/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/proxy/basbakan/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/GercekBasbakan.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.proxy.basbakan; 2 | 3 | public class GercekBasbakan implements Basbakan { 4 | 5 | @Override 6 | public void dertDinle(String dert) { 7 | System.out.println("Basbakan: Dinliyorum."); 8 | } 9 | 10 | @Override 11 | public void isBul(String yakinim) { 12 | System.out.println("Basbakan: Bana boyle isteklerle gelmeyin."); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.proxy.basbakan; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | System.err.println("*** Vatandaş başbakanlık kalemine gelir ve süreç başlar. ***"); 7 | 8 | Basbakan basbakan = new GercekBasbakan(); 9 | BasbakanlikKalemi kalem = new BasbakanlikKalemi(basbakan); 10 | 11 | Vatandas riza = new Vatandas(kalem); 12 | riza.derdiniAnlat(); 13 | riza.isIste(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/Vatandas.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.proxy.basbakan; 2 | 3 | public class Vatandas { 4 | private Basbakan basbakan; 5 | 6 | public Vatandas(BasbakanlikKalemi kalem){ 7 | basbakan = kalem.banaBasbakaniVer(); 8 | } 9 | 10 | public String derdiniAnlat(){ 11 | basbakan.dertDinle("Bir derdim var..."); 12 | return "Yasasiiinnn!!!"; 13 | } 14 | 15 | public String isIste(){ 16 | basbakan.isBul("Oglum"); 17 | return "Yasasiiinnn!!!"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/basbakan1/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/proxy/basbakan/basbakan1/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan/basbakan1/Vatandas.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.proxy.basbakan.basbakan1; 3 | 4 | public class Vatandas { 5 | private Basbakan basbakan = new Basbakan(); 6 | 7 | public String derdiniAnlat() { 8 | basbakan.dertDinle("Bir derdim var..."); 9 | return "Yasasiiinnn!!!"; 10 | } 11 | 12 | public String isIste() { 13 | basbakan.isBul("Oglum"); 14 | return "Yasasiiinnn!!!"; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/proxy/basbakan2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan2/Vatandas.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch05.proxy.basbakan2; 3 | 4 | public class Vatandas { 5 | private Vekil vekil = new Vekil(); 6 | 7 | public String derdiniAnlat() { 8 | vekil.dinle("Bir derdim var..."); 9 | return "Yasasiiinnn!!!"; 10 | } 11 | 12 | public String isIste() { 13 | vekil.dinle("Oglum'a iş bul..."); 14 | return "Yasasiiinnn!!!"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/basbakan2/Vekil.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch05.proxy.basbakan2; 2 | 3 | public class Vekil { 4 | private Basbakan basbakan = new Basbakan(); 5 | 6 | public void dinle(String konu) { 7 | 8 | } 9 | 10 | private boolean ayikla(String konu) { 11 | // ... 12 | return true; 13 | } 14 | 15 | private void ilet(String konu) { 16 | basbakan.dertDinle(konu); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/image/BigImage.java: -------------------------------------------------------------------------------- 1 | /* 2 | * All rights reserved 3 | * Written by Akin Kaldiroglu for Design Patterns Seminar 4 | * 27 May 2009 5 | * akink@bilginc.com 6 | */ 7 | 8 | package org.javaturk.dp.ch05.proxy.image; 9 | 10 | public class BigImage implements Image { 11 | 12 | public void draw() { 13 | System.out.println("Drawing the big image"); 14 | } 15 | 16 | public void erase() { 17 | System.out.println("Erasing the big image"); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/image/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/proxy/image/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/image/Image.java: -------------------------------------------------------------------------------- 1 | /* 2 | * All rights reserved 3 | * Written by Akin Kaldiroglu for Design Patterns Seminar 4 | * 27 May 2009 5 | * akink@bilginc.com 6 | */ 7 | 8 | package org.javaturk.dp.ch05.proxy.image; 9 | 10 | public interface Image { 11 | public void draw(); 12 | 13 | public void erase(); 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/image/ImageProxy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * All rights reserved 3 | * Written by Akin Kaldiroglu for Design Patterns Seminar 4 | * 27 May 2009 5 | * akink@bilginc.com 6 | */ 7 | 8 | package org.javaturk.dp.ch05.proxy.image; 9 | 10 | public class ImageProxy implements Image { 11 | 12 | private BigImage bigImage; 13 | 14 | public void draw() { 15 | if(bigImage == null) 16 | bigImage = new BigImage(); 17 | bigImage.draw(); 18 | } 19 | 20 | public void erase() { 21 | bigImage.erase(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/network/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch05/proxy/network/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/network/Logger.java: -------------------------------------------------------------------------------- 1 | /* 2 | * All rights reserved 3 | * Written by Akin Kaldiroglu for Design Patterns Seminar 4 | * 27 May 2009 5 | * akink@bilginc.com 6 | */ 7 | 8 | package org.javaturk.dp.ch05.proxy.network; 9 | 10 | import java.util.Date; 11 | 12 | public class Logger { 13 | public static void log(String message){ 14 | System.out.println("\n" + new Date() + ": " + message); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/network/Network.java: -------------------------------------------------------------------------------- 1 | /* 2 | * All rights reserved 3 | * Written by Akin Kaldiroglu for Design Patterns Seminar 4 | * 27 May 2009 5 | * akink@bilginc.com 6 | */ 7 | 8 | package org.javaturk.dp.ch05.proxy.network; 9 | 10 | public interface Network { 11 | public void telnet(String ip, String targetIp) throws YasakKardesimException; 12 | public void ftp(String ip, String targetIp) throws YasakKardesimException; 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch05/proxy/network/YasakKardesimException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * All rights reserved 3 | * Written by Akin Kaldiroglu for Design Patterns Seminar 4 | * 27 May 2009 5 | * akink@bilginc.com 6 | */ 7 | 8 | package org.javaturk.dp.ch05.proxy.network; 9 | 10 | public class YasakKardesimException extends Exception{ 11 | 12 | public YasakKardesimException(String message){ 13 | super(message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/AbstractCustomer.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public abstract class AbstractCustomer implements Customer{ 4 | 5 | @Override 6 | public void receiveAnswer(String answer){ 7 | System.out.println("Answer: " + answer); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/CallTaker.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public interface CallTaker { 4 | 5 | public abstract void answer(Customer customer); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/Customer.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public interface Customer { 4 | 5 | public void askAQuestion(); 6 | 7 | public void receiveAnswer(String answer); 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/GoldCustomer.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public class GoldCustomer extends AbstractCustomer { 4 | 5 | public void askAQuestion() { 6 | askAGoldQuestion(); 7 | } 8 | 9 | private void askAGoldQuestion() { 10 | System.out.println("\n--- Gold Customer: Asking a GOLD question!"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/SequenceDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/SequenceDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/SequenceDiagram2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/SequenceDiagram2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/StandardCustomer.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public class StandardCustomer extends AbstractCustomer{ 4 | 5 | @Override 6 | public void askAQuestion() { 7 | askAStandardQuestion(); 8 | } 9 | 10 | private void askAStandardQuestion() { 11 | System.out.println("\nStandard Customer: Asking a question!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/VipCallTaker.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public class VipCallTaker extends AbstractCallTaker{ 4 | 5 | public VipCallTaker(CallTaker next) { 6 | super(next); 7 | } 8 | 9 | @Override 10 | public void answer(Customer customer) { 11 | System.out.println("VipCallTaker received a customer."); 12 | customer.askAQuestion(); 13 | customer.receiveAnswer("Here is your VIP answer!"); 14 | System.out.println(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/callCenter/VipCustomer.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.callCenter; 2 | 3 | public class VipCustomer extends AbstractCustomer { 4 | 5 | public void askAQuestion() { 6 | askAVipQuestion(); 7 | } 8 | 9 | private void askAVipQuestion() { 10 | System.out.println("\n*** Vip Customer: Asking a VIP question!"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/AbstractHandler.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public abstract class AbstractHandler implements Handler { 4 | protected Handler successor; 5 | protected Handler predecessor; 6 | protected Help help; 7 | 8 | public AbstractHandler(Handler successor, Handler predecessor) { 9 | this.successor = successor; 10 | this.predecessor = predecessor; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/ConcreteHandler3.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public class ConcreteHandler3 extends AbstractHandler { 4 | 5 | public ConcreteHandler3(Handler successor, Handler predecessor) { 6 | super(successor, predecessor); 7 | help = new Help3(); 8 | } 9 | 10 | @Override 11 | public Help handleRequest(Context context) { 12 | // Context.GENERIC 13 | return new Help3(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/Context.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public enum Context { 4 | GENERIC, SPECIFIC, MORE_SPECIFIC 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/Handler.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public interface Handler { 4 | 5 | public Help handleRequest(Context context); 6 | } 7 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/Help.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public interface Help { 4 | void show(); 5 | 6 | void setOtherHelp(Help otherHelp); 7 | 8 | Help getOtherHelp(); 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/Help1.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public class Help1 extends AbstractHelp{ 4 | 5 | public Help1() { 6 | description = "Help1"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/Help2.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public class Help2 extends AbstractHelp{ 4 | 5 | public Help2() { 6 | description = "Help2"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/chainOfResponsibility/pattern/Help3.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.chainOfResponsibility.pattern; 2 | 3 | public class Help3 extends AbstractHelp{ 4 | 5 | public Help3() { 6 | description = "Help3"; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/ac/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/ac/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/ac/Command.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.ac; 2 | 3 | public interface Command { 4 | 5 | public void execute(Temperature temperature); 6 | 7 | public void undo(); 8 | 9 | public void redo(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/ac/Temperature.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.ac; 2 | 3 | public class Temperature { 4 | private int temperature; 5 | 6 | public Temperature(int temperature) { 7 | this.temperature = temperature; 8 | } 9 | 10 | public int getTemperature() { 11 | return temperature; 12 | } 13 | 14 | public void setTemperature(int temperature) { 15 | this.temperature = temperature; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/AccountFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.account.pattern; 2 | 3 | public class AccountFactory implements Factory{ 4 | private static AccountFactory factory = new AccountFactory(); 5 | 6 | @Override 7 | public Account createAccount(int amount){ 8 | return new Account(amount); 9 | } 10 | 11 | public static AccountFactory getInstance() { 12 | return factory; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/account/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/CheckingAccount.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.account.pattern; 2 | 3 | public class CheckingAccount extends Account { 4 | 5 | public CheckingAccount(int balance) { 6 | super(balance); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/CheckingAccountFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.account.pattern; 2 | 3 | public class CheckingAccountFactory extends AccountFactory { 4 | private static CheckingAccountFactory factory = new CheckingAccountFactory(); 5 | 6 | @Override 7 | public Account createAccount(int amount) { 8 | return new CheckingAccount(amount); 9 | } 10 | 11 | public static CheckingAccountFactory getInstance() { 12 | return factory; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/account/pattern/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/Factory.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.command.account.pattern; 3 | 4 | public interface Factory { 5 | public Account createAccount(int amount); 6 | } 7 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/NotEnoughBalanceException.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.command.account.pattern; 3 | 4 | public class NotEnoughBalanceException extends Exception { 5 | private static String description = "Account does not have enough balance: Balance: "; 6 | 7 | public NotEnoughBalanceException(int balance, int amount){ 8 | super(description + balance + " Amount: " + amount); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/account/pattern/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/Transaction.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.account.pattern; 2 | 3 | import java.util.List; 4 | 5 | public interface Transaction { 6 | 7 | public void execute(int amount); 8 | 9 | public void undo(); 10 | 11 | public void redo(); 12 | 13 | public List getTransactions(); 14 | 15 | public void setAccount(Account account); 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/pattern/TransactionFactory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.account.pattern; 2 | 3 | public interface TransactionFactory { 4 | 5 | public Transaction createWithdraw(); 6 | 7 | public Transaction createDeposit(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/account/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/account/problem/NotEnoughBalanceException.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.command.account.problem; 3 | 4 | public class NotEnoughBalanceException extends Exception { 5 | private static String description = "Account does not have enough balance: Balance: "; 6 | 7 | public NotEnoughBalanceException(int balance, int amount){ 8 | super(description + balance + " Amount: " + amount); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/pattern/Borrower.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.pattern; 2 | 3 | public class Borrower implements Command { 4 | 5 | @Override 6 | public void execute(int money) { 7 | System.out.println("Spending for family!"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/lender/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/pattern/Command.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.pattern; 2 | 3 | public interface Command { 4 | 5 | public void execute(int money); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/pattern/Lender.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.pattern; 2 | 3 | public class Lender { 4 | public void lend(Command command, int money) { 5 | command.execute(money); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/pattern/TaxOffice.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.pattern; 2 | 3 | public class TaxOffice implements Command { 4 | 5 | @Override 6 | public void execute(int money) { 7 | System.out.println("Receiving for the tax payment!"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem1/Borrower.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.problem1; 2 | 3 | public class Borrower { 4 | 5 | public void borrow(int money) { 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/lender/problem1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem1/Lender.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.problem1; 2 | 3 | public class Lender { 4 | 5 | public void lend(Borrower borrower, int money) { 6 | borrower.borrow(money); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem2/Borrower.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.problem2; 2 | 3 | public interface Borrower { 4 | 5 | public void borrow(int money); 6 | } 7 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/command/lender/problem2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem2/ConcreteBorrower1.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.problem2; 2 | 3 | public class ConcreteBorrower1 implements Borrower{ 4 | 5 | public void borrow(int money) { 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem2/ConcreteBorrower2.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.problem2; 2 | 3 | public class ConcreteBorrower2 implements Borrower{ 4 | 5 | public void borrow(int money) { 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/command/lender/problem2/Lender.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.command.lender.problem2; 2 | 3 | public class Lender { 4 | public void lend(Borrower borrower, int money) { 5 | borrower.borrow(money); 6 | } 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/iterator/fileSystem/Alias.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.iterator.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class Alias extends StorageElement{ 9 | 10 | public Alias(String name, StorageElement parent) { 11 | super(name, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/iterator/fileSystem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/iterator/fileSystem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/iterator/fileSystem/CD2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/iterator/fileSystem/CD2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/iterator/fileSystem/File.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.iterator.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class File extends StorageElement{ 9 | 10 | public File(String name, Storage parent) { 11 | super(name, parent); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/iterator/fileSystem/ShortCut.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.iterator.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public class ShortCut extends StorageElement{ 9 | 10 | public ShortCut(String name, Storage parent) { 11 | super(name, parent); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/iterator/fileSystem/Storage.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.iterator.fileSystem; 3 | 4 | /** 5 | * @author akin 6 | * 7 | */ 8 | public interface Storage { 9 | 10 | public void rename(String newName); 11 | 12 | public void save(); 13 | 14 | public void delete(); 15 | 16 | public Storage copy(); 17 | 18 | public void move(Directory target); 19 | } 20 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/mediator/traffic/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/mediator/traffic/CD.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/mediator/traffic/Junction.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.mediator.traffic; 3 | 4 | public class Junction { 5 | private String name; 6 | private boolean busy; 7 | 8 | public Junction(String name) { 9 | this.name = name; 10 | busy = false; 11 | System.out.println("Junction " + name + " created."); 12 | } 13 | 14 | public boolean isBusy() { 15 | return busy; 16 | } 17 | 18 | public void setBusy(boolean busy) { 19 | this.busy = busy; 20 | } 21 | 22 | public String getName() { 23 | return name; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/mediator/traffic/TrafficMediator.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.mediator.traffic; 3 | 4 | public interface TrafficMediator { 5 | 6 | public void receive(Vehicle vehicle); 7 | 8 | public void askPermitToPass(Vehicle vehicle); 9 | 10 | public void done(Vehicle vehicle); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/mediator/traffic/Vehicle.java: -------------------------------------------------------------------------------- 1 | 2 | package org.javaturk.dp.ch06.mediator.traffic; 3 | 4 | public interface Vehicle { 5 | 6 | public void approach(); 7 | 8 | public void proceed(); 9 | 10 | public void stopp(); 11 | 12 | public void waitForAWhile(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/gui/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/memento/gui/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/gui/GuiComponentMemento.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.memento.gui; 2 | 3 | public class GuiComponentMemento { 4 | 5 | private GuiComponentState state; 6 | 7 | public void setState(GuiComponentState state){ 8 | this.state = state; 9 | } 10 | 11 | public GuiComponentState getState(){ 12 | return state; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/gui/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/memento/gui/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/gui/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.memento.gui; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | GuiComponent window = new GuiComponent("window", 0, 0, 20, 10); 7 | 8 | System.out.println(window); 9 | 10 | window.setMemento(new GuiComponentMemento()); 11 | window.saveState(); 12 | 13 | window.setX(20); 14 | window.setLength(40); 15 | System.out.println(window); 16 | 17 | window.undo(); 18 | System.out.println(window); 19 | 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/pattern1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/memento/pattern1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/pattern1/Caretaker.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.memento.pattern1; 2 | 3 | public class Caretaker extends Thread{ 4 | private Memento memento; 5 | 6 | public Caretaker(Memento memento) { 7 | this.memento = memento; 8 | } 9 | 10 | public void run() { 11 | for(int i = 0; i < 11; i++) { 12 | if(i != 0 && i % 5 == 0) 13 | memento.undo(); 14 | else 15 | memento.save(); 16 | try { 17 | sleep(2000); 18 | } catch (InterruptedException e) { 19 | e.printStackTrace(); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/memento/pattern2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/memento/pattern2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/payment/Accountant.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.observer.payment; 2 | 3 | import java.util.Observable; 4 | import java.util.Observer; 5 | 6 | public class Accountant implements Observer { 7 | 8 | public void update(Observable arg0, Object arg1) { 9 | System.out.println("\nAccountant has received an update."); 10 | Invoice invoice = (Invoice) arg0; 11 | System.out.println(invoice); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/payment/Boss.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.observer.payment; 2 | 3 | import java.util.Observable; 4 | import java.util.Observer; 5 | 6 | public class Boss implements Observer { 7 | 8 | public void update(Observable arg0, Object arg1) { 9 | System.out.println("\nBoss has received an update."); 10 | Invoice invoice = (Invoice) arg0; 11 | System.out.println(invoice); 12 | } 13 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/payment/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/observer/payment/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/payment/SequenceDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/observer/payment/SequenceDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/publisher/AbstractSubscriber.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.observer.publisher; 2 | 3 | public abstract class AbstractSubscriber implements Subscriber { 4 | protected String name; 5 | 6 | public AbstractSubscriber(String name) { 7 | super(); 8 | this.name = name; 9 | } 10 | 11 | public String getName() { 12 | return name; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/publisher/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/observer/publisher/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/publisher/IndividualSubscriber.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.observer.publisher; 2 | 3 | public class IndividualSubscriber extends AbstractSubscriber { 4 | 5 | public IndividualSubscriber(String name) { 6 | super(name); 7 | } 8 | 9 | public void receive(Publication publication) { 10 | read(publication); 11 | } 12 | 13 | public void read(Publication publication) { 14 | System.out.println(name + " is reading " + publication.getName()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/publisher/Publication.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.observer.publisher; 2 | 3 | public interface Publication { 4 | 5 | String getName(); 6 | 7 | void addSubscriber(Subscriber subscriber); 8 | 9 | void removeSubscriber(Subscriber subscriber); 10 | 11 | void publish(String date); 12 | 13 | void listSubscribers(); 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/publisher/SequenceDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/observer/publisher/SequenceDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/observer/publisher/Subscriber.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.observer.publisher; 2 | 3 | public interface Subscriber { 4 | 5 | public String getName(); 6 | 7 | public void receive(Publication publication); 8 | } 9 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/account/AccountStatus.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.account; 2 | 3 | public interface AccountStatus { 4 | 5 | public void withdraw(int amount); 6 | public void deposit(int amount); 7 | public void transfer(int amount); 8 | public void close(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/account/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/account/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/account/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/account/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/door/pattern1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern1/ClosedDoor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern1; 2 | 3 | public class ClosedDoor extends AbstractDoorState { 4 | 5 | public ClosedDoor() { 6 | super(false); 7 | } 8 | 9 | @Override 10 | public void open() { 11 | door.changeState(openState); 12 | } 13 | 14 | @Override 15 | public void close() { 16 | System.out.println("Door is already closed!"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern1/DoorState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern1; 2 | 3 | public interface DoorState { 4 | 5 | void open(); 6 | 7 | void close(); 8 | 9 | boolean isOpen(); 10 | 11 | void setDoor(Door door); 12 | 13 | void setClosedState(DoorState closedState); 14 | 15 | void setOpenState(DoorState openState); 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern1/OpenDoor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern1; 2 | 3 | public class OpenDoor extends AbstractDoorState { 4 | 5 | public OpenDoor() { 6 | super(true); 7 | } 8 | 9 | @Override 10 | public void open() { 11 | System.out.println("Door is already open!"); 12 | } 13 | 14 | @Override 15 | public void close() { 16 | door.changeState(closedState); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern2/AbstractDoor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern2; 2 | 3 | public abstract class AbstractDoor implements DoorState { 4 | protected boolean open; 5 | protected DoorStateManager dsm; 6 | 7 | public AbstractDoor(boolean open, DoorStateManager dsm) { 8 | this.open = open; 9 | this.dsm = dsm; 10 | } 11 | 12 | @Override 13 | public boolean isOpen() { 14 | return open; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/door/pattern2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern2/ClosedDoor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern2; 2 | 3 | public class ClosedDoor extends AbstractDoor { 4 | 5 | public ClosedDoor(DoorStateManager dsm) { 6 | super(false, dsm); 7 | } 8 | 9 | @Override 10 | public void open() { 11 | dsm.openDoor(); 12 | } 13 | 14 | @Override 15 | public void close() { 16 | System.out.println("Door is already closed."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern2/DoorState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern2; 2 | 3 | public interface DoorState { 4 | 5 | void open(); 6 | 7 | void close(); 8 | 9 | boolean isOpen(); 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/pattern2/OpenDoor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.door.pattern2; 2 | 3 | public class OpenDoor extends AbstractDoor { 4 | 5 | public OpenDoor(DoorStateManager dsm) { 6 | super(true, dsm); 7 | } 8 | 9 | @Override 10 | public void open() { 11 | System.out.println("Door is already open."); 12 | } 13 | 14 | @Override 15 | public void close() { 16 | dsm.closeDoor(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/door/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/door/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/elevator/ElevatorState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.elevator; 2 | 3 | public interface ElevatorState { 4 | 5 | public void goUp(); 6 | 7 | public void goDown(); 8 | 9 | public void stop(); 10 | 11 | public void openDoor(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/elevator/GoingDownState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.elevator; 2 | 3 | public class GoingDownState implements ElevatorState { 4 | 5 | public void goDown() { 6 | System.out.println(":)"); 7 | } 8 | 9 | public void goUp() { 10 | System.out.println("Please first stop the elevator."); 11 | } 12 | 13 | public void openDoor() { 14 | System.out.println("Please first stop the elevator."); 15 | } 16 | 17 | public void stop() { 18 | System.out.println("Stooping!"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/elevator/GoingUpState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.elevator; 2 | 3 | public class GoingUpState implements ElevatorState { 4 | 5 | public void goDown() { 6 | System.out.println("Please first stop the elevator."); 7 | } 8 | 9 | public void goUp() { 10 | System.out.println(":)"); 11 | } 12 | 13 | public void openDoor() { 14 | System.out.println("Please first stop the elevator."); 15 | } 16 | 17 | public void stop() { 18 | System.out.println("Stooping!"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/elevator/StoppedState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.elevator; 2 | 3 | public class StoppedState implements ElevatorState { 4 | 5 | public void goDown() { 6 | System.out.println("Going down."); 7 | } 8 | 9 | public void goUp() { 10 | System.out.println("Going up."); 11 | } 12 | 13 | public void openDoor() { 14 | System.out.println("Door is open."); 15 | } 16 | 17 | public void stop() { 18 | System.out.println(":)"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/ConcreteTCPConnection.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.pattern; 2 | 3 | public class ConcreteTCPConnection implements TCPConnection{ 4 | 5 | private TCPState state; 6 | 7 | @Override 8 | public void open() { 9 | 10 | } 11 | 12 | @Override 13 | public void close() { 14 | 15 | } 16 | 17 | @Override 18 | public void acknowledge() { 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/TCPClosed.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.pattern; 2 | 3 | public class TCPClosed implements TCPState{ 4 | 5 | @Override 6 | public void open() { 7 | // TODO Auto-generated method stub 8 | 9 | } 10 | 11 | @Override 12 | public void close() { 13 | // TODO Auto-generated method stub 14 | 15 | } 16 | 17 | @Override 18 | public void acknowledge() { 19 | // TODO Auto-generated method stub 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/TCPConnection.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.pattern; 2 | 3 | public interface TCPConnection { 4 | 5 | void open(); 6 | 7 | void close(); 8 | 9 | void acknowledge(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/TCPEstablished.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.pattern; 2 | 3 | public class TCPEstablished implements TCPState{ 4 | 5 | @Override 6 | public void open() { 7 | // TODO Auto-generated method stub 8 | 9 | } 10 | 11 | @Override 12 | public void close() { 13 | // TODO Auto-generated method stub 14 | 15 | } 16 | 17 | @Override 18 | public void acknowledge() { 19 | // TODO Auto-generated method stub 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/TCPListen.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.pattern; 2 | 3 | public class TCPListen implements TCPState{ 4 | 5 | @Override 6 | public void open() { 7 | // TODO Auto-generated method stub 8 | 9 | } 10 | 11 | @Override 12 | public void close() { 13 | // TODO Auto-generated method stub 14 | 15 | } 16 | 17 | @Override 18 | public void acknowledge() { 19 | // TODO Auto-generated method stub 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/pattern/TCPState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.pattern; 2 | 3 | public interface TCPState { 4 | 5 | void open(); 6 | 7 | void close(); 8 | 9 | void acknowledge(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/person/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/person/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/person/EmotionalState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.person; 2 | 3 | public interface EmotionalState { 4 | 5 | public String sayHello(); 6 | 7 | public String sayGoodbye(); 8 | 9 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/person/HappyState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.person; 2 | 3 | public class HappyState implements EmotionalState { 4 | 5 | public String sayGoodbye() { 6 | return "Bye, friend!"; 7 | } 8 | 9 | public String sayHello() { 10 | return "Hello, friend!"; 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/person/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/state/person/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/state/person/SadState.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.state.person; 2 | 3 | public class SadState implements EmotionalState { 4 | 5 | public String sayGoodbye() { 6 | return "Bye. Sniff, sniff."; 7 | } 8 | 9 | public String sayHello() { 10 | return "Hello. Sniff, sniff."; 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/ArrayCreator.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.strategy.sorting; 2 | 3 | public class ArrayCreator { 4 | 5 | public static double[] createArray(int n) { 6 | double[] array = new double[n]; 7 | 8 | for (int i = 0; i < n; i++) { 9 | array[i] = i * Math.random(); 10 | } 11 | 12 | return array; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/JavaSorter.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.strategy.sorting.pattern; 2 | 3 | import java.util.Arrays; 4 | 5 | public class JavaSorter implements Sorter{ 6 | 7 | @Override 8 | public void sort(double[] array) { 9 | long start = System.currentTimeMillis(); 10 | Arrays.sort(array); 11 | long end = System.currentTimeMillis(); 12 | System.out.println("Time to sort by JavaSort: " + (end - start) + " ms"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/Readme.txt: -------------------------------------------------------------------------------- 1 | http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/SequenceDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/SequenceDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/pattern/Sorter.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.strategy.sorting.pattern; 2 | 3 | public interface Sorter { 4 | public void sort(double[] array); 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/problem/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/strategy/sorting/problem/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/subClassing/ClassDİagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/strategy/sorting/subClassing/ClassDİagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/subClassing/JavaSorter.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.strategy.sorting.subClassing; 2 | 3 | import java.util.Arrays; 4 | 5 | public class JavaSorter extends QuickSorter { 6 | 7 | @Override 8 | public void sort(double[] array) { 9 | System.out.println("Using JavaSorter!"); 10 | Arrays.sort(array); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/strategy/sorting/subClassing/Sorter.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.strategy.sorting.subClassing; 2 | 3 | public abstract class Sorter { 4 | 5 | public abstract void sort(double[] list); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/templateMethod/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/pattern/Document.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.templateMethod.pattern; 2 | 3 | public abstract class Document { 4 | protected String name; 5 | 6 | public Document(String name) { 7 | this.name = name; 8 | } 9 | 10 | abstract void open(); 11 | 12 | abstract void read(); 13 | 14 | abstract void save(); 15 | 16 | abstract void close(); 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/pattern/MyApplication.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.templateMethod.pattern; 2 | 3 | public class MyApplication extends Application{ 4 | 5 | @Override 6 | boolean canOpenDocument(String fileName) { 7 | System.out.println("Checking the document " + fileName); 8 | return true; 9 | } 10 | 11 | @Override 12 | Document createDocument(String fileName) { 13 | System.out.println("Opening document " + fileName); 14 | return new MyDocument(fileName); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/pattern/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.templateMethod.pattern; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Application myApplication = new MyApplication(); 7 | myApplication.openDocument("mydoc"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/task/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/templateMethod/task/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/task/ClassDiagram1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/templateMethod/task/ClassDiagram1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/task/Fax.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.templateMethod.task; 2 | 3 | public class Fax extends Task { 4 | 5 | public Fax(String name, int interval, int repetation) { 6 | super(name, interval, repetation); 7 | } 8 | 9 | @Override 10 | public void doTask() { 11 | System.out.println("I'm faxing!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/task/Scan.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.templateMethod.task; 2 | 3 | public class Scan extends Task { 4 | 5 | public Scan(String name, int interval, int repetation) { 6 | super(name, interval, repetation); 7 | } 8 | 9 | @Override 10 | public void doTask() { 11 | System.out.println("I'm scanning!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/templateMethod/task/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.templateMethod.task; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Task task = new Print("Printing", 1, 10); 7 | task.run(); 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/ReadMe.txt: -------------------------------------------------------------------------------- 1 | https://dzone.com/articles/visitor-design-pattern -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/Animal.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern1; 2 | 3 | public interface Animal { 4 | void eat(); 5 | 6 | void accept(Feeder feeder); 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/Cat.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern1; 2 | 3 | public class Cat implements Animal { 4 | public void eat() { 5 | System.out.println("Meeoow"); 6 | } 7 | 8 | @Override 9 | public void accept(Feeder feeder) { 10 | feeder.feed(this); 11 | } 12 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/Dog.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern1; 2 | 3 | public class Dog implements Animal { 4 | public void eat() { 5 | System.out.println("Woof"); 6 | } 7 | 8 | @Override 9 | public void accept(Feeder feeder) { 10 | feeder.feed(this); 11 | } 12 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/Feeder.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern1; 2 | 3 | public class Feeder { 4 | 5 | public void feed(Dog d) { 6 | d.eat(); 7 | } 8 | 9 | public void feed(Cat c) { 10 | c.eat(); 11 | } 12 | 13 | // public void feed(Animal a) { 14 | // a.eat(); 15 | // } 16 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern1/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern1; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Feeder feeder = new Feeder(); 7 | 8 | Animal a = new Dog(); 9 | a.accept(feeder); 10 | 11 | a = new Cat(); 12 | a.accept(feeder); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/AbstractAnimal.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public abstract class AbstractAnimal implements Animal{ 4 | private String name; 5 | 6 | public AbstractAnimal(String name) { 7 | this.name = name; 8 | } 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/Animal.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public interface Animal { 4 | void eat(); 5 | 6 | String getName(); 7 | 8 | void accept(Feeder feeder); 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/Cat.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public class Cat extends AbstractAnimal { 4 | public Cat(String name) { 5 | super(name); 6 | } 7 | 8 | public void eat() { 9 | System.out.println("Meeoow"); 10 | } 11 | 12 | @Override 13 | public void accept(Feeder feeder) { 14 | if(feeder instanceof CatFeeder) 15 | feeder.feed(this); 16 | else 17 | System.out.println("Nop, I don't want this feeder"); 18 | } 19 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/CatFeeder.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public class CatFeeder implements Feeder{ 4 | 5 | @Override 6 | public void feed(Animal a) { 7 | System.out.println("Feeding the cat " + a.getName()); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/Dog.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public class Dog extends AbstractAnimal { 4 | public Dog(String name) { 5 | super(name); 6 | } 7 | 8 | public void eat() { 9 | System.out.println("Woof"); 10 | } 11 | 12 | @Override 13 | public void accept(Feeder feeder) { 14 | if(feeder instanceof DogFeeder) 15 | feeder.feed(this); 16 | else 17 | System.out.println("Nop, I don't want this feeder"); 18 | } 19 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/DogFeeder.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public class DogFeeder implements Feeder{ 4 | 5 | @Override 6 | public void feed(Animal a) { 7 | System.out.println("Feeding the dog " + a.getName()); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/Feeder.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public interface Feeder { 4 | 5 | public void feed(Animal a); 6 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/pattern2/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.pattern2; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Feeder dogFeeder = new DogFeeder(); 7 | Feeder catFeeder = new CatFeeder(); 8 | 9 | Animal a = new Dog("karabas"); 10 | a.accept(dogFeeder); 11 | // a.accept(catFeeder); 12 | 13 | a = new Cat("sarman"); 14 | // a.accept(dogFeeder); 15 | a.accept(catFeeder); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/problem/Animal.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.problem; 2 | 3 | public interface Animal { 4 | void eat(); 5 | } 6 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/animal/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/problem/Cat.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.problem; 2 | 3 | public class Cat implements Animal { 4 | public void eat() { 5 | System.out.println("Meeoow"); 6 | } 7 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/problem/Dog.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.problem; 2 | 3 | public class Dog implements Animal { 4 | public void eat() { 5 | System.out.println("Woof"); 6 | } 7 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/problem/Feeder.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.animal.problem; 2 | 3 | public class Feeder { 4 | 5 | // public void feed(Dog d) { 6 | // d.eat(); 7 | // } 8 | // 9 | // public void feed(Cat c) { 10 | // c.eat(); 11 | // } 12 | 13 | public void feed(Animal a) { 14 | if (a instanceof Dog) { 15 | Dog dog = (Dog) a; 16 | dog.eat(); 17 | } else if (a instanceof Cat) { 18 | Cat cat = (Cat) a; 19 | cat.eat(); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/animal/problem/Readme.txt: -------------------------------------------------------------------------------- 1 | https://dzone.com/articles/visitor-design-pattern -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/Boss.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.factory; 2 | 3 | public class Boss { 4 | private String name; 5 | private int age; 6 | 7 | public Boss(String name, int age) { 8 | this.name = name; 9 | this.age = age; 10 | } 11 | 12 | public String getName() { 13 | return name; 14 | } 15 | 16 | public int getAge() { 17 | return age; 18 | } 19 | 20 | public void accept(Visitor visitor) { 21 | visitor.visit(this); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/factory/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/CD2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/factory/CD2.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/CD3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/factory/CD3.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/ReadMe.txt: -------------------------------------------------------------------------------- 1 | Bu örnek, Employee-Manager-Director kalıtım hiyerarşisini en yetkin haliyle gösterir. 2 | Bu örnekte hem overriding vardır, hem de super ile parenttaki yapılara ulaşmak söz konusudur. -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/SD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/factory/SD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/Secretary.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.factory; 2 | 3 | public class Secretary extends Employee { 4 | 5 | protected Manager managerServed; 6 | 7 | public Secretary(int no, String name, int year, String department, Manager managerServed) { 8 | super(no, name, year, department); 9 | } 10 | 11 | public void serve(){ 12 | System.out.println("Secretary " + name + " serves her manager: " + managerServed); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.factory; 2 | 3 | 4 | public class Test { 5 | 6 | public static void main(String[] args) { 7 | Company company = new Company(5); 8 | company.populateCompany(); 9 | 10 | HealthVisitor hv = new HealthVisitor(); 11 | 12 | company.setVisitor(hv); 13 | 14 | Boss boss = new Boss("Memet Emmi", 52); 15 | boss.accept(hv); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/factory/Visitor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.factory; 2 | 3 | public interface Visitor { 4 | 5 | public void visit(Employee employee); 6 | 7 | public void visit(Boss boss); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/domain/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/file/domain/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/domain/File.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.domain; 2 | 3 | public abstract class File { 4 | protected String name; 5 | 6 | public File(String name){ 7 | this.name = name; 8 | } 9 | 10 | public abstract void open(); 11 | 12 | public abstract void read(); 13 | 14 | public abstract void close(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/domain/TextFile.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.domain; 2 | 3 | public class TextFile extends File { 4 | 5 | public TextFile(String name) { 6 | super(name); 7 | } 8 | 9 | @Override 10 | public void open() { 11 | System.out.println("\nOpening the file: " + name); 12 | } 13 | 14 | @Override 15 | public void read() { 16 | System.out.println("Reading the file: " + name); 17 | } 18 | 19 | @Override 20 | public void close() { 21 | System.out.println("Closing the file: " + name); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/domain/XMLFile.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.domain; 2 | 3 | public class XMLFile extends File { 4 | 5 | public XMLFile(String name) { 6 | super(name); 7 | } 8 | 9 | @Override 10 | public void open() { 11 | System.out.println(); 12 | System.out.println(name + " is opened."); 13 | } 14 | 15 | @Override 16 | public void read() { 17 | System.out.println(name + " is read."); 18 | } 19 | 20 | @Override 21 | public void close() { 22 | System.out.println(name + " is closed."); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/pattern1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/file/pattern1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/pattern1/File.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.pattern1; 2 | 3 | public abstract class File { 4 | protected String name; 5 | 6 | public File(String name){ 7 | this.name = name; 8 | } 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | 14 | public abstract boolean accept(Visitor visitor); 15 | 16 | public abstract void open(); 17 | 18 | public abstract void read(); 19 | 20 | public abstract void close(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/pattern1/Visitor.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.pattern1; 2 | 3 | public interface Visitor { 4 | 5 | public boolean visit(TextFile file); 6 | 7 | public boolean visit(XMLFile file); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/problem1/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/file/problem1/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/problem1/File.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.problem1; 2 | 3 | public abstract class File { 4 | protected String name; 5 | 6 | public File(String name){ 7 | this.name = name; 8 | } 9 | 10 | public abstract void open(); 11 | 12 | public abstract void read(); 13 | 14 | public abstract void close(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/problem2/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch06/visitor/file/problem2/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/file/problem2/File.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.file.problem2; 2 | 3 | public abstract class File { 4 | protected String name; 5 | 6 | public File(String name){ 7 | this.name = name; 8 | } 9 | 10 | public abstract void open(); 11 | 12 | public abstract void read(); 13 | 14 | public abstract void close(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/pattern/problem/Assignment.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.pattern.problem; 2 | 3 | public class Assignment implements Node { 4 | 5 | @Override 6 | public void typeCheck() { 7 | 8 | } 9 | 10 | @Override 11 | public void generatoCode() { 12 | 13 | } 14 | 15 | @Override 16 | public void prettyPrint() { 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/pattern/problem/Node.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.pattern.problem; 2 | 3 | public interface Node { 4 | 5 | void typeCheck(); 6 | 7 | void generatoCode(); 8 | 9 | void prettyPrint(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch06/visitor/pattern/problem/VariableReference.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch06.visitor.pattern.problem; 2 | 3 | public class VariableReference implements Node { 4 | 5 | @Override 6 | public void typeCheck() { 7 | 8 | } 9 | 10 | @Override 11 | public void generatoCode() { 12 | 13 | } 14 | 15 | @Override 16 | public void prettyPrint() { 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/AbstractObject.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern; 2 | 3 | public abstract class AbstractObject { 4 | 5 | public abstract void request(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch07/nullObject/pattern/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/Client.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern; 2 | 3 | public class Client { 4 | private AbstractObject abstractObject; 5 | private Factory factory; 6 | 7 | public Client(Factory factory) { 8 | this.factory = factory; 9 | } 10 | 11 | public void start() { 12 | abstractObject = factory.create(); 13 | abstractObject.request(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/Factory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern; 2 | 3 | public class Factory { 4 | 5 | public AbstractObject create() { 6 | int i = (int) (Math.random() * 2); 7 | AbstractObject o = switch (i) { 8 | case 0 -> new RealObject(); 9 | case 1 -> new NullObject(); 10 | default -> new RealObject(); 11 | }; 12 | 13 | return o; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/NullObject.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern; 2 | 3 | public class NullObject extends AbstractObject { 4 | 5 | @Override 6 | public void request() { 7 | System.err.println("Doing nothing."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/RealObject.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern; 2 | 3 | public class RealObject extends AbstractObject { 4 | 5 | @Override 6 | public void request() { 7 | System.out.println("Doing something."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Factory factory = new Factory(); 7 | Client client = new Client(factory); 8 | client.start(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/optional/AbstractObject.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern.optional; 2 | 3 | public abstract class AbstractObject { 4 | 5 | public abstract void request(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/optional/Factory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern.optional; 2 | 3 | import java.util.Optional; 4 | 5 | public class Factory { 6 | 7 | public Optional create() { 8 | int i = (int) (Math.random() * 2); 9 | Optional o = switch (i) { 10 | case 0 -> Optional.of(new RealObject()); 11 | case 1 -> Optional.ofNullable(null); 12 | default -> Optional.of(new RealObject()); 13 | }; 14 | 15 | return o; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/optional/RealObject.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern.optional; 2 | 3 | public class RealObject extends AbstractObject { 4 | 5 | @Override 6 | public void request() { 7 | System.out.println("Doing something."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/optional/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern.optional; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Factory factory = new Factory(); 7 | Client client = new Client(factory); 8 | client.start(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/problem/CD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/javaturk/DesignPatterns/eaa15b597cfd0818925478477d503069c79dee94/src/java/org/javaturk/dp/ch07/nullObject/pattern/problem/CD1.png -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/problem/Factory.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern.problem; 2 | 3 | import org.javaturk.dp.ch07.nullObject.pattern.AbstractObject; 4 | import org.javaturk.dp.ch07.nullObject.pattern.RealObject; 5 | 6 | public class Factory { 7 | 8 | public AbstractObject create() { 9 | int i = (int) (Math.random() * 2); 10 | AbstractObject o = switch (i) { 11 | case 0 -> new RealObject(); 12 | case 1 -> null; 13 | default -> new RealObject(); 14 | }; 15 | 16 | return o; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/nullObject/pattern/problem/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.nullObject.pattern.problem; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | Factory factory = new Factory(); 7 | Client client = new Client(factory); 8 | client.start(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/java/org/javaturk/dp/ch07/typeObject/drink/Test.java: -------------------------------------------------------------------------------- 1 | package org.javaturk.dp.ch07.typeObject.drink; 2 | 3 | public class Test { 4 | 5 | public static void main(String[] args) { 6 | 7 | } 8 | 9 | } 10 | --------------------------------------------------------------------------------