├── facade ├── kotlin │ ├── Customer.kt │ ├── App.kt │ ├── CreditCardManager.kt │ ├── CreditCardFacade.kt │ └── BlackListService.kt ├── java │ ├── Customer.java │ ├── CreditCardManager.java │ ├── App.java │ ├── CreditCardFacade.java │ └── BlackListService.java └── c-sharp │ ├── Program.cs │ ├── CreditCardManager.cs │ ├── Customer.cs │ ├── CreditCardFacade.cs │ └── BlackListService.cs ├── singleton ├── kotlin │ ├── Database.kt │ └── App.kt ├── php │ ├── index.php │ └── Database.php ├── java │ ├── App.java │ └── Database.java └── c-sharp │ ├── Program.cs │ └── Database.cs ├── images ├── bridge-old.png ├── facade-uml.png ├── human-uml.png ├── liskov-1.png ├── liskov-2.png ├── liskov-3.png ├── proxy-uml.png ├── singleton.png ├── state-uml.png ├── adapter-uml.png ├── builder-uml.png ├── command-uml.png ├── cow-crow-uml.png ├── decorator-1.png ├── decorator-2.png ├── iterator-uml.png ├── mediator-uml.png ├── memento-uml.png ├── observer-uml.png ├── oop-pillars.png ├── open-closed.png ├── organism-uml.png ├── stragety-uml.png ├── visitor-uml.png ├── composite-uml.png ├── decorator-uml.png ├── dependency-inv.png ├── developer-uml.png ├── factory-pattern.png ├── flyweight-uml.png ├── interface-segre.png ├── interpreter-uml.png ├── open-closed-2.png ├── prototype-uml.png ├── tree traversal.png ├── uml-aggregation.png ├── uml-association.png ├── uml-composition.png ├── uml-dependency.png ├── uml-inheritance.png ├── uml-realization.png ├── dependency-inv-2.png ├── interface-segre-2.png ├── single-res-person.png ├── abstract-factory-uml.png ├── single-res-person-2.png ├── template-method-uml.png ├── developer-yusuf-halit.png ├── adapter-uml-left-to-right.png ├── chain-of-responsibility.png ├── uml-poly-logger-service.png ├── bridge-without-imp-and-abst.png ├── tasarim-desenleri-turkce-kaynak.png └── tasarim-desenleri-turkce-kaynak-2.png ├── factory ├── java │ ├── INotify.java │ ├── User.java │ ├── SmsNotify.java │ ├── MailNotify.java │ ├── App.java │ └── NotifyFactory.java └── c-sharp │ ├── INotify.cs │ ├── User.cs │ ├── MailNotify.cs │ ├── SmsNotify.cs │ ├── Program.cs │ └── NotifyFactory.cs ├── flyweight ├── java │ ├── BoxColor.java │ ├── Box.java │ ├── BlueBox.java │ ├── BlackBox.java │ ├── App.java │ └── BoxFactory.java ├── kotlin │ ├── BoxColor.kt │ ├── Box.kt │ ├── BlueBox.kt │ ├── BlackBox.kt │ ├── App.kt │ └── BoxFactory.kt └── c-sharp │ ├── BoxColor.cs │ ├── Box.cs │ ├── BlueBox.cs │ ├── BlackBox.cs │ └── Program.cs ├── TasarimDesenleriTurkceKaynak.pdf ├── bridge ├── kotlin │ ├── Message.kt │ ├── IMessageSender.kt │ ├── EmailMessage.kt │ ├── TextMessage.kt │ ├── TextMessageSender.kt │ ├── EmailMessageSender.kt │ └── App.kt ├── java │ ├── IMessageSender.java │ ├── Message.java │ ├── TextMessageSender.java │ ├── EmailMessageSender.java │ ├── EmailMessage.java │ ├── TextMessage.java │ └── App.java └── c-sharp │ ├── IMessageSender.cs │ ├── TextMessageSender.cs │ ├── EmailMessageSender.cs │ ├── EmailMessage.cs │ ├── TextMessage.cs │ ├── Message.cs │ └── Program.cs ├── proxy ├── kotlin │ ├── Person.kt │ ├── IOrderableMask.kt │ ├── App.kt │ └── MaskOrder.kt ├── java │ ├── IOrderableMask.java │ ├── Person.java │ ├── App.java │ └── MaskOrder.java └── c-sharp │ ├── IOrderableMask.cs │ ├── Person.cs │ ├── Program.cs │ └── MaskOrder.cs ├── abstract-factory ├── java │ ├── Command.java │ ├── Connection.java │ ├── App.java │ ├── MySQLCommand.java │ ├── OracleCommand.java │ ├── IDatabaseFactory.java │ ├── MySQLDatabaseFactory.java │ ├── OracleDatabaseFactory.java │ ├── MySQLConnection.java │ ├── OracleConnection.java │ └── CustomOperation.java └── c-sharp │ ├── Command.cs │ ├── Connection.cs │ ├── MySQLCommand.cs │ ├── OracleCommand.cs │ ├── Program.cs │ ├── IDatabaseFactory.cs │ ├── MySQLDatabaseFactory.cs │ ├── OracleDatabaseFactory.cs │ ├── MySQLConnection.cs │ ├── OracleConnection.cs │ └── CustomOperation.cs ├── chain-of-responsibility ├── kotlin │ ├── Image.kt │ ├── App.kt │ ├── CustomHandler.kt │ ├── BaseHandler.kt │ ├── JPGHandler.kt │ └── JPEGHandler.kt ├── java │ ├── Image.java │ ├── BaseHandler.java │ ├── CustomHandler.java │ ├── JPGHandler.java │ ├── JPEGHandler.java │ └── App.java └── c-sharp │ ├── Image.cs │ ├── BaseHandler.cs │ ├── CustomHandler.cs │ ├── Program.cs │ ├── JPGHandler.cs │ └── JPEGHandler.cs ├── iterator ├── kotlin │ ├── Employee.kt │ ├── IEmployeeAggregate.kt │ ├── IIterator.kt │ ├── EmployeeIterator.kt │ ├── App.kt │ └── EmployeeListAggregate.kt ├── java │ ├── IEmployeeAggregate.java │ ├── Employee.java │ ├── IIterator.java │ ├── EmployeeIterator.java │ ├── EmployeeListAggregate.java │ └── App.java └── c-sharp │ ├── IEmployeeAggregate.cs │ ├── IIterator.cs │ └── Employee.cs ├── strategy ├── kotlin │ ├── Item.kt │ ├── IPayment.kt │ ├── PaypalPayment.kt │ ├── App.kt │ ├── CreditCartPayment.kt │ └── ShoppingCart.kt ├── java │ ├── IPayment.java │ ├── Item.java │ ├── App.java │ ├── PaypalPayment.java │ ├── CreditCartPayment.java │ └── ShoppingCart.java └── c-sharp │ ├── IPayment.cs │ ├── Item.cs │ ├── Program.cs │ ├── PaypalPayment.cs │ └── CreditCartPayment.cs ├── interpreter ├── java │ ├── Context.java │ ├── IJobExpression.java │ ├── DeveloperExpression.java │ ├── AccountingExpression.java │ ├── TeamLeadExpression.java │ └── App.java ├── kotlin │ ├── Context.kt │ ├── IJobExpression.kt │ ├── App.kt │ ├── AccountingExpression.kt │ ├── DeveloperExpression.kt │ ├── TeamLeadExpression.kt │ └── JobManager.kt └── c-sharp │ ├── Context.cs │ ├── IJobExpression.cs │ ├── Program.cs │ ├── DeveloperExpression.cs │ ├── TeamLeadExpression.cs │ └── AccountingExpression.cs ├── adapter ├── kotlin │ ├── IJsonSerializer.kt │ ├── App.kt │ ├── CustomOperation.kt │ ├── CustomSerializer.kt │ └── CustomSerializerAdapter.kt ├── java │ ├── IJsonSerializer.java │ ├── App.java │ ├── CustomOperation.java │ ├── CustomSerializer.java │ └── CustomSerializerAdapter.java └── c-sharp │ ├── IJsonSerializer.cs │ ├── Program.cs │ ├── CustomOperation.cs │ ├── CustomSerializer.cs │ └── CustomSerializerAdapter.cs ├── memento ├── java │ ├── TextMemento.java │ └── TextUndoCareTaker.java ├── kotlin │ ├── TextMemento.kt │ └── TextUndoCareTaker.kt └── c-sharp │ ├── TextMemento.cs │ └── TextUndoCareTaker.cs ├── command ├── java │ ├── IOrderCommand.java │ ├── BuyStock.java │ ├── SellStock.java │ ├── StockManager.java │ ├── App.java │ └── StockController.java ├── kotlin │ ├── IOrderCommand.kt │ ├── BuyStock.kt │ ├── SellStock.kt │ ├── StockManager.kt │ ├── App.kt │ └── StockController.kt └── c-sharp │ ├── IOrderCommand.cs │ ├── BuyStock.cs │ ├── SellStock.cs │ ├── StockManager.cs │ ├── Program.cs │ └── StockController.cs ├── state ├── kotlin │ ├── VendingMachineState.kt │ ├── App.kt │ ├── InitializeState.kt │ ├── WaitingState.kt │ ├── DeliveryState.kt │ ├── PreparingState.kt │ └── VendingMachine.kt ├── java │ ├── VendingMachineState.java │ ├── InitializeState.java │ ├── WaitingState.java │ ├── App.java │ ├── DeliveryState.java │ ├── PreparingState.java │ └── VendingMachine.java └── c-sharp │ ├── VendingMachineState.cs │ ├── Program.cs │ ├── InitializeState.cs │ ├── WaitingState.cs │ ├── DeliveryState.cs │ └── PreparingState.cs ├── observer ├── java │ ├── IObserverUser.java │ ├── ObserverUser.java │ ├── ProductUpdateMessage.java │ ├── Samsung.java │ └── ObservableProduct.java ├── kotlin │ ├── IObserverUser.kt │ ├── ObserverUser.kt │ ├── ProductUpdateMessage.kt │ ├── Samsung.kt │ ├── App.kt │ └── ObservableProduct.kt └── c-sharp │ ├── IObserverUser.cs │ ├── ProductUpdateMessage.cs │ ├── ObserverUser.cs │ └── Samsung.cs ├── mediator ├── kotlin │ ├── ChatUser.kt │ ├── IChatRoomMediator.kt │ ├── ChatRoomMediator.kt │ └── User.kt ├── java │ ├── IChatRoomMediator.java │ ├── ChatUser.java │ └── ChatRoomMediator.java └── c-sharp │ ├── IChatRoom.cs │ ├── ChatUser.cs │ └── ChatRoom.cs ├── composite ├── kotlin │ ├── ICatalogComponent.kt │ ├── Product.kt │ └── ProductCatalog.kt ├── java │ ├── ICatalogComponent.java │ └── Product.java └── c-sharp │ ├── ICatalogComponent.cs │ └── Product.cs ├── decorator ├── kotlin │ ├── IDataSource.kt │ ├── App.kt │ ├── FileDataSource.kt │ ├── BaseDataSourceDecorator.kt │ └── ComporessionDecorator.kt ├── java │ ├── IDataSource.java │ ├── App.java │ ├── FileDataSource.java │ └── BaseDataSourceDecorator.java └── c-sharp │ ├── IDataSource.cs │ ├── Program.cs │ ├── FileDataSource.cs │ └── DataSourceDecorator.cs ├── visitor ├── kotlin │ ├── Magazine.kt │ ├── Encyclopedia.kt │ ├── IBookExportVisitor.kt │ ├── Book.kt │ ├── App.kt │ ├── XmlExportVisitor.kt │ └── JsonExportVisitor.kt ├── java │ ├── IBookExportVisitor.java │ ├── Book.java │ ├── Encyclopedia.java │ ├── Magazine.java │ ├── XmlExportVisitor.java │ ├── JsonExportVisitor.java │ └── App.java └── c-sharp │ ├── Magazine.cs │ ├── Encyclopedia.cs │ ├── IBookExportVisitor.cs │ ├── Book.cs │ ├── XmlExportVisitor.cs │ ├── JsonExportVisitor.cs │ └── Program.cs ├── prototype ├── kotlin │ ├── App.kt │ ├── Employee.kt │ └── ClonablePrototype.kt ├── java │ ├── IClonablePrototype.java │ ├── App.java │ └── Employee.java └── c-sharp │ ├── Program.cs │ ├── IClonablePrototype.cs │ └── Employee.cs └── template-method ├── kotlin ├── XmlDataAnalyzer.kt ├── HtmlDataAnalyzer.kt └── App.kt ├── java ├── XmlDataAnalyzer.java ├── HtmlDataAnalyzer.java └── App.java └── c-sharp ├── XmlDataAnalyzer.cs ├── HtmlDataAnalyzer.cs └── Program.cs /facade/kotlin/Customer.kt: -------------------------------------------------------------------------------- 1 | package Facade 2 | 3 | class Customer(var firstName: String, var lastName: String) 4 | -------------------------------------------------------------------------------- /singleton/kotlin/Database.kt: -------------------------------------------------------------------------------- 1 | package singleton 2 | 3 | object Database { 4 | fun getInstance() = this 5 | } -------------------------------------------------------------------------------- /images/bridge-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/bridge-old.png -------------------------------------------------------------------------------- /images/facade-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/facade-uml.png -------------------------------------------------------------------------------- /images/human-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/human-uml.png -------------------------------------------------------------------------------- /images/liskov-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/liskov-1.png -------------------------------------------------------------------------------- /images/liskov-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/liskov-2.png -------------------------------------------------------------------------------- /images/liskov-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/liskov-3.png -------------------------------------------------------------------------------- /images/proxy-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/proxy-uml.png -------------------------------------------------------------------------------- /images/singleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/singleton.png -------------------------------------------------------------------------------- /images/state-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/state-uml.png -------------------------------------------------------------------------------- /factory/java/INotify.java: -------------------------------------------------------------------------------- 1 | package Factory; 2 | 3 | public interface INotify { 4 | void sendNotification(User user); 5 | } 6 | -------------------------------------------------------------------------------- /images/adapter-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/adapter-uml.png -------------------------------------------------------------------------------- /images/builder-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/builder-uml.png -------------------------------------------------------------------------------- /images/command-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/command-uml.png -------------------------------------------------------------------------------- /images/cow-crow-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/cow-crow-uml.png -------------------------------------------------------------------------------- /images/decorator-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/decorator-1.png -------------------------------------------------------------------------------- /images/decorator-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/decorator-2.png -------------------------------------------------------------------------------- /images/iterator-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/iterator-uml.png -------------------------------------------------------------------------------- /images/mediator-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/mediator-uml.png -------------------------------------------------------------------------------- /images/memento-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/memento-uml.png -------------------------------------------------------------------------------- /images/observer-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/observer-uml.png -------------------------------------------------------------------------------- /images/oop-pillars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/oop-pillars.png -------------------------------------------------------------------------------- /images/open-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/open-closed.png -------------------------------------------------------------------------------- /images/organism-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/organism-uml.png -------------------------------------------------------------------------------- /images/stragety-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/stragety-uml.png -------------------------------------------------------------------------------- /images/visitor-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/visitor-uml.png -------------------------------------------------------------------------------- /images/composite-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/composite-uml.png -------------------------------------------------------------------------------- /images/decorator-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/decorator-uml.png -------------------------------------------------------------------------------- /images/dependency-inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/dependency-inv.png -------------------------------------------------------------------------------- /images/developer-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/developer-uml.png -------------------------------------------------------------------------------- /images/factory-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/factory-pattern.png -------------------------------------------------------------------------------- /images/flyweight-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/flyweight-uml.png -------------------------------------------------------------------------------- /images/interface-segre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/interface-segre.png -------------------------------------------------------------------------------- /images/interpreter-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/interpreter-uml.png -------------------------------------------------------------------------------- /images/open-closed-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/open-closed-2.png -------------------------------------------------------------------------------- /images/prototype-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/prototype-uml.png -------------------------------------------------------------------------------- /images/tree traversal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/tree traversal.png -------------------------------------------------------------------------------- /images/uml-aggregation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-aggregation.png -------------------------------------------------------------------------------- /images/uml-association.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-association.png -------------------------------------------------------------------------------- /images/uml-composition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-composition.png -------------------------------------------------------------------------------- /images/uml-dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-dependency.png -------------------------------------------------------------------------------- /images/uml-inheritance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-inheritance.png -------------------------------------------------------------------------------- /images/uml-realization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-realization.png -------------------------------------------------------------------------------- /flyweight/java/BoxColor.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | // Kutuların rengini tutmaktadır. 4 | enum BoxColor { 5 | BLACK, 6 | BLUE 7 | } -------------------------------------------------------------------------------- /images/dependency-inv-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/dependency-inv-2.png -------------------------------------------------------------------------------- /images/interface-segre-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/interface-segre-2.png -------------------------------------------------------------------------------- /images/single-res-person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/single-res-person.png -------------------------------------------------------------------------------- /images/abstract-factory-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/abstract-factory-uml.png -------------------------------------------------------------------------------- /images/single-res-person-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/single-res-person-2.png -------------------------------------------------------------------------------- /images/template-method-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/template-method-uml.png -------------------------------------------------------------------------------- /TasarimDesenleriTurkceKaynak.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/TasarimDesenleriTurkceKaynak.pdf -------------------------------------------------------------------------------- /images/developer-yusuf-halit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/developer-yusuf-halit.png -------------------------------------------------------------------------------- /bridge/kotlin/Message.kt: -------------------------------------------------------------------------------- 1 | package Bridge 2 | 3 | abstract class Message(protected var messageSender: IMessageSender) { 4 | abstract fun send() 5 | } 6 | -------------------------------------------------------------------------------- /flyweight/kotlin/BoxColor.kt: -------------------------------------------------------------------------------- 1 | package Flyweight 2 | 3 | // Kutuların rengini tutmaktadır. 4 | internal enum class BoxColor { 5 | BLACK, 6 | BLUE 7 | } -------------------------------------------------------------------------------- /images/adapter-uml-left-to-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/adapter-uml-left-to-right.png -------------------------------------------------------------------------------- /images/chain-of-responsibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/chain-of-responsibility.png -------------------------------------------------------------------------------- /images/uml-poly-logger-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-poly-logger-service.png -------------------------------------------------------------------------------- /images/bridge-without-imp-and-abst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/bridge-without-imp-and-abst.png -------------------------------------------------------------------------------- /factory/java/User.java: -------------------------------------------------------------------------------- 1 | package Factory; 2 | 3 | public class User { 4 | // Burada bildirimin gideceği kullanıcıya 5 | // ait bilgiler bulunacaktır. 6 | } 7 | -------------------------------------------------------------------------------- /images/tasarim-desenleri-turkce-kaynak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/tasarim-desenleri-turkce-kaynak.png -------------------------------------------------------------------------------- /proxy/kotlin/Person.kt: -------------------------------------------------------------------------------- 1 | package Proxy 2 | 3 | // Maske siparişini verecek kullanıcıları temsili sınıf. 4 | internal class Person(var tc: String, var address: String) 5 | -------------------------------------------------------------------------------- /images/tasarim-desenleri-turkce-kaynak-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mustafamuratcoskun/tasarim-desenleri-turkce-kaynak/HEAD/images/tasarim-desenleri-turkce-kaynak-2.png -------------------------------------------------------------------------------- /abstract-factory/java/Command.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | // Soyut sınıfımızdır. 4 | public abstract class Command { 5 | public abstract void executeCommand(String query); 6 | } -------------------------------------------------------------------------------- /chain-of-responsibility/kotlin/Image.kt: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility 2 | 3 | // Uygulama süresince resimlerimizi temsil edecek sınıf. 4 | class Image(var name: String, var extension: String) -------------------------------------------------------------------------------- /iterator/kotlin/Employee.kt: -------------------------------------------------------------------------------- 1 | package Iterator 2 | 3 | // Liste üzerinde gezilecek olan elamnı temsil eden sınıf. 4 | internal class Employee(var id: Int, var firstName: String, var lastName: String) -------------------------------------------------------------------------------- /strategy/kotlin/Item.kt: -------------------------------------------------------------------------------- 1 | package Strategy 2 | 3 | // Sepette bulunan ürünleri temsil eden sınıf. 4 | // Ürün kodu ve fiyat bilgileri temel olarak yeterlidir. 5 | internal class Item(val upcCode: String, val price: Int) -------------------------------------------------------------------------------- /abstract-factory/java/Connection.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | // Soyut sınıfımızdır. 4 | abstract class Connection { 5 | public abstract Boolean openConnection(); 6 | 7 | public abstract Boolean closeConnection(); 8 | } -------------------------------------------------------------------------------- /facade/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Facade 2 | 3 | fun main(args: Array) { 4 | val duygu = Customer("Duygu", "Kaya") 5 | 6 | val creditCardFacade = CreditCardFacade() 7 | creditCardFacade.createCreditCart(duygu) 8 | } 9 | -------------------------------------------------------------------------------- /interpreter/java/Context.java: -------------------------------------------------------------------------------- 1 | package Interpreter; 2 | 3 | // Yorumlanacak olan içeriktir. 4 | // UML diyagramındaki Context sınıfına denk gelir. 5 | class Context { 6 | public String formula; 7 | public int totalPoint; 8 | } 9 | -------------------------------------------------------------------------------- /adapter/kotlin/IJsonSerializer.kt: -------------------------------------------------------------------------------- 1 | package Adapter 2 | 3 | // UML diyagramındaki Target'a denk gelmektedir. 4 | // Sistem bu arayüzü uygulayarak çalışmaktadır. 5 | interface IJsonSerializer { 6 | fun serializeObject(obj: Any): String 7 | } -------------------------------------------------------------------------------- /adapter/java/IJsonSerializer.java: -------------------------------------------------------------------------------- 1 | package Adapter; 2 | 3 | // UML diyagramındaki Target'a denk gelmektedir. 4 | // Sistem bu arayüzü uygulayarak çalışmaktadır. 5 | interface IJsonSerializer { 6 | public String serializeObject(Object obj); 7 | } -------------------------------------------------------------------------------- /factory/c-sharp/INotify.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Factory 6 | { 7 | interface INotify 8 | { 9 | void SendNotification(User user); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /strategy/java/IPayment.java: -------------------------------------------------------------------------------- 1 | package Strategy; 2 | 3 | // UML diyagramındaki Strategy arayüzüne denk gelmektedir. 4 | // Benzer işlemleri yapan sınıflar bu arayüzden türeyecektir. 5 | interface IPayment { 6 | void pay(int amount); 7 | } 8 | -------------------------------------------------------------------------------- /interpreter/java/IJobExpression.java: -------------------------------------------------------------------------------- 1 | package Interpreter; 2 | 3 | // Yorumlama işleminin tanımlandığı arayüz. 4 | // UML diyagramındaki Expression arayüzüne denk gelmektedir. 5 | interface IJobExpression { 6 | void interpret(Context context); 7 | } -------------------------------------------------------------------------------- /interpreter/kotlin/Context.kt: -------------------------------------------------------------------------------- 1 | package Interpreter 2 | 3 | // Yorumlanacak olan içeriktir. 4 | // UML diyagramındaki Context sınıfına denk gelir. 5 | internal class Context { 6 | var formula: String? = null 7 | var totalPoint: Int = 0 8 | } 9 | -------------------------------------------------------------------------------- /strategy/kotlin/IPayment.kt: -------------------------------------------------------------------------------- 1 | package Strategy 2 | 3 | // UML diyagramındaki Strategy arayüzüne denk gelmektedir. 4 | // Benzer işlemleri yapan sınıflar bu arayüzden türeyecektir. 5 | internal interface IPayment { 6 | fun pay(amount: Int) 7 | } 8 | -------------------------------------------------------------------------------- /memento/java/TextMemento.java: -------------------------------------------------------------------------------- 1 | package Memento; 2 | 3 | // Saklamak istediğimiz değerlerin tanımlandığı yerdir. 4 | // UML diyagramındaki Memento yapısına denk gelir. 5 | class TextMemento { 6 | public String text; 7 | public int cursorPosition; 8 | } -------------------------------------------------------------------------------- /interpreter/kotlin/IJobExpression.kt: -------------------------------------------------------------------------------- 1 | package Interpreter 2 | 3 | // Yorumlama işleminin tanımlandığı arayüz. 4 | // UML diyagramındaki Expression arayüzüne denk gelmektedir. 5 | internal interface IJobExpression { 6 | fun interpret(context: Context) 7 | } -------------------------------------------------------------------------------- /command/java/IOrderCommand.java: -------------------------------------------------------------------------------- 1 | package Command; 2 | 3 | // Temel arayüzdür. 4 | // Komutların çalıştırılması için temel metotu içermektedir. 5 | // UML diyagramındaki Command arayüzüne denk gelmektedir. 6 | interface IOrderCommand { 7 | void execute(); 8 | } 9 | -------------------------------------------------------------------------------- /state/kotlin/VendingMachineState.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | // Davranışların tanımlandığı soyut sınıftır. 4 | // UML diyagramındaki State yapısına denk gelmektedir. 5 | abstract class VendingMachineState { 6 | abstract fun handleState(context: VendingMachine) 7 | } -------------------------------------------------------------------------------- /adapter/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Adapter 2 | 3 | fun main(args: Array) { 4 | val customOperation = CustomOperation(CustomSerializerAdapter()) 5 | val serializedObject = customOperation.SerializeObject(Any()) 6 | 7 | println(serializedObject) 8 | } 9 | -------------------------------------------------------------------------------- /memento/kotlin/TextMemento.kt: -------------------------------------------------------------------------------- 1 | package Memento 2 | 3 | // Saklamak istediğimiz değerlerin tanımlandığı yerdir. 4 | // UML diyagramındaki Memento yapısına denk gelir. 5 | internal class TextMemento { 6 | var text: String? = null 7 | var cursorPosition: Int = 0 8 | } -------------------------------------------------------------------------------- /proxy/java/IOrderableMask.java: -------------------------------------------------------------------------------- 1 | package Proxy; 2 | 3 | // Sipariş işlemlerini gerçekleştiren sınıflar tarafından uygulanan arayüz. 4 | // UML diyagramındaki Service arayüzüne denk gelmektedir. 5 | interface IOrderableMask { 6 | void createOrder(Person person); 7 | } -------------------------------------------------------------------------------- /command/kotlin/IOrderCommand.kt: -------------------------------------------------------------------------------- 1 | package Command 2 | 3 | // Temel arayüzdür. 4 | // Komutların çalıştırılması için temel metotu içermektedir. 5 | // UML diyagramındaki Command arayüzüne denk gelmektedir. 6 | internal interface IOrderCommand { 7 | fun execute() 8 | } 9 | -------------------------------------------------------------------------------- /proxy/kotlin/IOrderableMask.kt: -------------------------------------------------------------------------------- 1 | package Proxy 2 | 3 | // Sipariş işlemlerini gerçekleştiren sınıflar tarafından uygulanan arayüz. 4 | // UML diyagramındaki Service arayüzüne denk gelmektedir. 5 | internal interface IOrderableMask { 6 | fun createOrder(person: Person) 7 | } -------------------------------------------------------------------------------- /flyweight/c-sharp/BoxColor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Flyweight 6 | { 7 | // Kutuların rengini tutmaktadır. 8 | enum BoxColor 9 | { 10 | Black, 11 | Blue 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /factory/java/SmsNotify.java: -------------------------------------------------------------------------------- 1 | package Factory; 2 | 3 | public class SmsNotify implements INotify { 4 | @Override 5 | public void sendNotification(User user) { 6 | // SMS gönderme operasyonu. 7 | System.out.println("SMS Gönderildi."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /state/java/VendingMachineState.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | // Davranışların tanımlandığı soyut sınıftır. 4 | // UML diyagramındaki State yapısına denk gelmektedir. 5 | public abstract class VendingMachineState 6 | { 7 | public abstract void handleState(VendingMachine context); 8 | } -------------------------------------------------------------------------------- /abstract-factory/java/App.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | CustomOperation customOperation = new CustomOperation(new OracleDatabaseFactory()); 6 | customOperation.removeById(1); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /abstract-factory/java/MySQLCommand.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | class MySQLCommand extends Command { 4 | @Override 5 | public void executeCommand(String query) { 6 | // Gelen sorgunun çalıştırılması için 7 | // Gerekli operasyonel işlemler... 8 | } 9 | } -------------------------------------------------------------------------------- /factory/java/MailNotify.java: -------------------------------------------------------------------------------- 1 | package Factory; 2 | 3 | public class MailNotify implements INotify { 4 | @Override 5 | public void sendNotification(User user) { 6 | // Mail gönderme operasyonu. 7 | System.out.println("Email Gönderildi."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /observer/java/IObserverUser.java: -------------------------------------------------------------------------------- 1 | package Observer; 2 | 3 | // Değişimden etkilenecek, izleyecek olan sınıfların uyguladığı arayüzdür. 4 | // UML diyagramındaki Observer yapısına denk gelmektedir. 5 | interface IObserverUser { 6 | void sendNotification(ProductUpdateMessage message); 7 | } -------------------------------------------------------------------------------- /factory/c-sharp/User.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Factory 6 | { 7 | public class User 8 | { 9 | // Burada bildirimin gideceği kullanıcıya 10 | // ait bilgiler bulunacaktır. 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /observer/kotlin/IObserverUser.kt: -------------------------------------------------------------------------------- 1 | package Observer 2 | 3 | // Değişimden etkilenecek, izleyecek olan sınıfların uyguladığı arayüzdür. 4 | // UML diyagramındaki Observer yapısına denk gelmektedir. 5 | internal interface IObserverUser { 6 | fun sendNotification(message: ProductUpdateMessage) 7 | } -------------------------------------------------------------------------------- /facade/kotlin/CreditCardManager.kt: -------------------------------------------------------------------------------- 1 | package Facade 2 | 3 | //Kredi kartı ile ilgili işlemlerin yapıldığı sınıf 4 | class CreditCardManager { 5 | fun createCreditCart(customer: Customer) { 6 | // Parametre olarak gelen kullanıcıya ait kredi kartı oluşturma işleminin yapıldığı yer 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /abstract-factory/java/OracleCommand.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | public class OracleCommand extends Command { 4 | @Override 5 | public void executeCommand(String query) { 6 | // Gelen sorgunun çalıştırılması için 7 | // Gerekli operasyonel işlemler... 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /bridge/kotlin/IMessageSender.kt: -------------------------------------------------------------------------------- 1 | package Bridge 2 | 3 | // UML diyagramındaki Implementor (IMessageSender) arayüzünen denk gelmektedir. 4 | // Abstraction (Message) tarafından referansı tutulur ve haberleşme burası ile gerçekleşir. 5 | interface IMessageSender { 6 | fun sendMessage(message: Message) 7 | } 8 | -------------------------------------------------------------------------------- /facade/java/Customer.java: -------------------------------------------------------------------------------- 1 | package Facade; 2 | 3 | public class Customer { 4 | public Customer(String firstName, String lastName) { 5 | this.firstName = firstName; 6 | this.lastName = lastName; 7 | } 8 | 9 | public String firstName; 10 | public String lastName; 11 | } 12 | -------------------------------------------------------------------------------- /singleton/php/index.php: -------------------------------------------------------------------------------- 1 | ) { 4 | val context = Context() 5 | context.formula = "GGML" 6 | 7 | val jobManager = JobManager() 8 | jobManager.runExpression(context) 9 | 10 | println(context.formula + " :> " + context.totalPoint) 11 | // output: GGML :> 18000 12 | } -------------------------------------------------------------------------------- /mediator/kotlin/IChatRoomMediator.kt: -------------------------------------------------------------------------------- 1 | package Mediator 2 | 3 | 4 | // Colleague (User) nesneler arasındaki iletişim arayüzünü tanımlar. 5 | // UML diyagramındaki Mediator arayüzüne denk gelmektedir. 6 | internal interface IChatRoomMediator { 7 | fun sendMessage(message: String, userId: Int) 8 | fun addUserInRoom(user: User) 9 | } 10 | -------------------------------------------------------------------------------- /proxy/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Proxy 2 | 3 | fun main(args: Array) { 4 | val semanur = Person("11111111111", "İstanbul/Sancaktepe xxx-yyy-zzz") 5 | 6 | val orderableMask = AuthenticatableMaskOrderProxy() 7 | 8 | orderableMask.createOrder(semanur) 9 | // output: Order created to İstanbul/Sancaktepe xxx-yyy-zzz 10 | } 11 | -------------------------------------------------------------------------------- /decorator/java/IDataSource.java: -------------------------------------------------------------------------------- 1 | package Decorator; 2 | 3 | // Üst sınıfların uygulayacağı arayüzdür. 4 | // Yapılacak temel işlemler tanımlanmıştır. 5 | // UML diyagramındaki Component arayüzüne denk gelmektedir. 6 | interface IDataSource 7 | { 8 | String getFileName(); 9 | void writeData(Object data); 10 | void readData(); 11 | } 12 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/Connection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | // Soyut sınıfımızdır. 8 | abstract class Connection 9 | { 10 | public abstract bool OpenConnection(); 11 | public abstract bool CloseConnection(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /composite/java/ICatalogComponent.java: -------------------------------------------------------------------------------- 1 | package Composite; 2 | 3 | // Soyut yapımızdır. 4 | // UML diyagramındaki Component kısmına denk gelmektedir. 5 | // Diğer istemci sınıflar bu yapıyı uygular. 6 | // Diğer sınıfların uygulayacağı hiyerarşiyi çizme metotunu içermektedir. 7 | public interface ICatalogComponent { 8 | void drawHierarchy(); 9 | } 10 | -------------------------------------------------------------------------------- /composite/kotlin/Product.kt: -------------------------------------------------------------------------------- 1 | package Composite 2 | 3 | // Somut yapımızdır. 4 | // UML diyagramındaki Leaf kısmına denk gelmektedir. 5 | // Hiyerarşinin en alt tabakasını temsil etmektedir. 6 | internal class Product(private val _name: String) : ICatalogComponent { 7 | 8 | override fun drawHierarchy() { 9 | println(_name) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /chain-of-responsibility/java/Image.java: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility; 2 | 3 | // Uygulama süresince resimlerimizi temsil edecek sınıf. 4 | class Image { 5 | public String name; 6 | public String extension; 7 | 8 | public Image(String name, String extension) { 9 | this.name = name; 10 | this.extension = extension; 11 | } 12 | } -------------------------------------------------------------------------------- /interpreter/c-sharp/Context.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Interpreter 6 | { 7 | // Yorumlanacak olan içeriktir. 8 | // UML diyagramındaki Context sınıfına denk gelir. 9 | class Context 10 | { 11 | public string formula; 12 | public int totalPoint; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /singleton/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package singleton 2 | 3 | fun main() { 4 | val firstInstanceRequest = Database.getInstance() 5 | val secondInstanceRequest = Database.getInstance() 6 | 7 | val isEquals = firstInstanceRequest == secondInstanceRequest 8 | 9 | print("Database referance is equals: $isEquals") //output: Database referance is equals: true 10 | } -------------------------------------------------------------------------------- /visitor/kotlin/Magazine.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | // UML diyagramındaki Element'ten türer. 4 | // Accept metoduna bulunduğu nesne örneği gönderilir. 5 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 6 | internal class Magazine : Book() { 7 | override fun accept(visitor: IBookExportVisitor) { 8 | visitor.exportVisit(this) 9 | } 10 | } -------------------------------------------------------------------------------- /strategy/c-sharp/IPayment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Strategy 6 | { 7 | // UML diyagramındaki Strategy arayüzüne denk gelmektedir. 8 | // Benzer işlemleri yapan sınıflar bu arayüzden türeyecektir. 9 | interface IPayment 10 | { 11 | void Pay(int amount); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /visitor/kotlin/Encyclopedia.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | // UML diyagramındaki Element'ten türer. 4 | // Accept metoduna bulunduğu nesne örneği gönderilir. 5 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 6 | internal class Encyclopedia : Book() { 7 | override fun accept(visitor: IBookExportVisitor) { 8 | visitor.exportVisit(this) 9 | } 10 | } -------------------------------------------------------------------------------- /adapter/c-sharp/IJsonSerializer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Adapter 6 | { 7 | // UML diyagramındaki Target'a denk gelmektedir. 8 | // Sistem bu arayüzü uygulayarak çalışmaktadır. 9 | interface IJsonSerializer 10 | { 11 | public string SerializeObject(object obj); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /adapter/java/App.java: -------------------------------------------------------------------------------- 1 | package Adapter; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | CustomOperation customOperation = new CustomOperation(new CustomSerializerAdapter()); 6 | String serializedObject = customOperation.SerializeObject(new Object()); 7 | 8 | System.out.println(serializedObject); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /visitor/java/IBookExportVisitor.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | // Her ConcreteVisitor örneği için metot temsil eder. 4 | // Parametre olarak Element sınıfından türeyen sınıfların örneğini alır. 5 | // UML diyagramındaki Visitor yapısına denk gelir. 6 | interface IBookExportVisitor { 7 | void exportVisit(Magazine magazine); 8 | void exportVisit(Encyclopedia encyclopedia); 9 | } -------------------------------------------------------------------------------- /adapter/kotlin/CustomOperation.kt: -------------------------------------------------------------------------------- 1 | package Adapter 2 | 3 | class CustomOperation { 4 | private val _jsonSerializer: IJsonSerializer 5 | 6 | constructor(jsonSerializer: IJsonSerializer) { 7 | _jsonSerializer = jsonSerializer 8 | } 9 | 10 | fun SerializeObject(obj: Any): String { 11 | return _jsonSerializer.serializeObject(obj) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /interpreter/c-sharp/IJobExpression.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Interpreter 6 | { 7 | // Yorumlama işleminin tanımlandığı arayüz. 8 | // UML diyagramındaki Expression arayüzüne denk gelmektedir. 9 | interface IJobExpression 10 | { 11 | void Interpret(Context context); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /iterator/java/IEmployeeAggregate.java: -------------------------------------------------------------------------------- 1 | package Iterator; 2 | 3 | // Iterator arayüzünü uygulayan sınıf örneklerini elde etmek için metot içerir. 4 | // Bu sayede çeşitli Iterator arayüzünü uygulayan sınıfların örneklerini elde edebiliriz. 5 | // UML diyagramındaki Aggregate arayüzüne denk gelmektedir. 6 | interface IEmployeeAggregate { 7 | IIterator createIterator(); 8 | } 9 | -------------------------------------------------------------------------------- /visitor/java/Book.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | // Temel sınıftır. 4 | // Yeni davranışları Accept metotu ile alır. 5 | // UML diyagramındaki Element yapısına denk gelmektedir. 6 | abstract class Book 7 | { 8 | public String name; 9 | public String author; 10 | public String categoryName; 11 | 12 | public abstract void accept(IBookExportVisitor visitor); 13 | } -------------------------------------------------------------------------------- /visitor/kotlin/IBookExportVisitor.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | // Her ConcreteVisitor örneği için metot temsil eder. 4 | // Parametre olarak Element sınıfından türeyen sınıfların örneğini alır. 5 | // UML diyagramındaki Visitor yapısına denk gelir. 6 | internal interface IBookExportVisitor { 7 | fun exportVisit(magazine: Magazine) 8 | fun exportVisit(encyclopedia: Encyclopedia) 9 | } -------------------------------------------------------------------------------- /bridge/kotlin/TextMessageSender.kt: -------------------------------------------------------------------------------- 1 | package Bridge 2 | 3 | // UML diyagramındaki ConcreteImplementor (TextMessageSender) kısmına denk gelmektedir. 4 | // Implementor arayüzünü (IMessageSender) uygular. 5 | class TextMessageSender : IMessageSender { 6 | override fun sendMessage(message: Message) { 7 | println("TextMessageSender: Sending text message...") 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /mediator/java/ChatUser.java: -------------------------------------------------------------------------------- 1 | package Mediator; 2 | 3 | // Colleague (User) soyutundan türer. 4 | // Mediator sayesinde diğer sınıf örnekler ile iletişim kurar. 5 | // UML diyagramındaki ConcreteColleague yapısına denk gelmektedir. 6 | class ChatUser extends User { 7 | public ChatUser(IChatRoomMediator chatRoomMediator) { 8 | super(chatRoomMediator); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /visitor/java/Encyclopedia.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | // UML diyagramındaki Element'ten türer. 4 | // Accept metoduna bulunduğu nesne örneği gönderilir. 5 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 6 | class Encyclopedia extends Book { 7 | @Override 8 | public void accept(IBookExportVisitor visitor) { 9 | visitor.exportVisit(this); 10 | } 11 | } -------------------------------------------------------------------------------- /visitor/java/Magazine.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | // UML diyagramındaki Element'ten türer. 4 | // Accept metoduna bulunduğu nesne örneği gönderilir. 5 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 6 | class Magazine extends Book { 7 | @Override 8 | public void accept(IBookExportVisitor visitor) { 9 | visitor.exportVisit(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /bridge/kotlin/EmailMessageSender.kt: -------------------------------------------------------------------------------- 1 | package Bridge 2 | 3 | // UML diyagramındaki ConcreteImplementor (EmailMessageSender) kısmına denk gelmektedir. 4 | // Implementor arayüzünü (IMessageSender) uygular. 5 | class EmailMessageSender : IMessageSender { 6 | override fun sendMessage(message: Message) { 7 | println("EmailMessageSender: Sending email message...") 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /flyweight/java/Box.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | // Nesnenin ortak özelliklerini tutan sınıftır. 4 | // UML diyagramındaki Flyweight yapısına denk gelmektedir. 5 | abstract class Box 6 | { 7 | // Intrinsic değerler. 8 | public int width; 9 | public int height; 10 | public BoxColor boxColor; 11 | 12 | public abstract void draw(int locationX, int locationY); 13 | } 14 | -------------------------------------------------------------------------------- /prototype/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Prototype 2 | 3 | fun main(args: Array) { 4 | val gulizar = Employee("Gülizar", "Yılmaz") 5 | val cloneGulizar = gulizar.cloneObject() 6 | 7 | // Aynı nesne örneklerini farklı referanslarda tutuyor. 8 | // Birbirinin aynısı ve farklı referanslarda olan nesneler elde ettik. 9 | println(gulizar == cloneGulizar) //output: false 10 | } -------------------------------------------------------------------------------- /visitor/kotlin/Book.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | // Temel sınıftır. 4 | // Yeni davranışları Accept metotu ile alır. 5 | // UML diyagramındaki Element yapısına denk gelmektedir. 6 | internal abstract class Book { 7 | var name: String? = null 8 | var author: String? = null 9 | var categoryName: String? = null 10 | 11 | abstract fun accept(visitor: IBookExportVisitor) 12 | } -------------------------------------------------------------------------------- /command/c-sharp/IOrderCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Command 6 | { 7 | // Temel arayüzdür. 8 | // Komutların çalıştırılması için temel metotu içermektedir. 9 | // UML diyagramındaki Command arayüzüne denk gelmektedir. 10 | interface IOrderCommand 11 | { 12 | void Execute(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /flyweight/kotlin/Box.kt: -------------------------------------------------------------------------------- 1 | package Flyweight 2 | 3 | // Nesnenin ortak özelliklerini tutan sınıftır. 4 | // UML diyagramındaki Flyweight yapısına denk gelmektedir. 5 | internal abstract class Box { 6 | // Intrinsic değerler. 7 | var width: Int = 0 8 | var height: Int = 0 9 | var boxColor: BoxColor? = null 10 | 11 | abstract fun draw(locationX: Int, locationY: Int) 12 | } 13 | -------------------------------------------------------------------------------- /iterator/kotlin/IEmployeeAggregate.kt: -------------------------------------------------------------------------------- 1 | package Iterator 2 | 3 | // Iterator arayüzünü uygulayan sınıf örneklerini elde etmek için metot içerir. 4 | // Bu sayede çeşitli Iterator arayüzünü uygulayan sınıfların örneklerini elde edebiliriz. 5 | // UML diyagramındaki Aggregate arayüzüne denk gelmektedir. 6 | internal interface IEmployeeAggregate { 7 | fun createIterator(): IIterator 8 | } 9 | -------------------------------------------------------------------------------- /adapter/java/CustomOperation.java: -------------------------------------------------------------------------------- 1 | package Adapter; 2 | 3 | public class CustomOperation { 4 | private IJsonSerializer _jsonSerializer; 5 | 6 | public CustomOperation(IJsonSerializer jsonSerializer) { 7 | _jsonSerializer = jsonSerializer; 8 | } 9 | 10 | public String SerializeObject(Object obj) { 11 | return _jsonSerializer.serializeObject(obj); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /factory/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Factory 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | NotifyFactory notifyFactory = new NotifyFactory(); 10 | 11 | INotify notify = notifyFactory.CreateNotify("MAIL"); 12 | 13 | notify.SendNotification(new User()); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /proxy/c-sharp/IOrderableMask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Proxy 6 | { 7 | // Sipariş işlemlerini gerçekleştiren sınıflar tarafından uygulanan arayüz. 8 | // UML diyagramındaki Service arayüzüne denk gelmektedir. 9 | interface IOrderableMask 10 | { 11 | void CreateOrder(Person person); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /singleton/php/Database.php: -------------------------------------------------------------------------------- 1 | { 5 | var firstName: String 6 | var lastName: String 7 | 8 | constructor(firstName: String, lastName: String) { 9 | this.firstName = firstName; 10 | this.lastName = lastName; 11 | } 12 | } -------------------------------------------------------------------------------- /iterator/java/Employee.java: -------------------------------------------------------------------------------- 1 | package Iterator; 2 | 3 | // Liste üzerinde gezilecek olan elamnı temsil eden sınıf. 4 | class Employee { 5 | public int id; 6 | public String firstName; 7 | public String lastName; 8 | 9 | public Employee(int id, String firstName, String lastName) { 10 | this.id = id; 11 | this.firstName = firstName; 12 | this.lastName = lastName; 13 | } 14 | } -------------------------------------------------------------------------------- /memento/c-sharp/TextMemento.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Memento 6 | { 7 | // Saklamak istediğimiz değerlerin tanımlandığı yerdir. 8 | // UML diyagramındaki Memento yapısına denk gelir. 9 | class TextMemento 10 | { 11 | public string Text { get; set; } 12 | public int CursorPosition { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/MySQLCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | class MySQLCommand : Command 8 | { 9 | public override void ExecuteCommand(string query) 10 | { 11 | // Gelen sorgunun çalıştırılması için 12 | // Gerekli operasyonel işlemler... 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/OracleCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | class OracleCommand : Command 8 | { 9 | public override void ExecuteCommand(string query) 10 | { 11 | // Gelen sorgunun çalıştırılması için 12 | // Gerekli operasyonel işlemler... 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /observer/java/ObserverUser.java: -------------------------------------------------------------------------------- 1 | package Observer; 2 | 3 | // Observer arayüzünü uygulayan, değişimi takip eden sınıflardır. 4 | // Değişim update metotu ile bildirilir. 5 | // UML diyagramındaki ConcreteObserver yapısına denk gelmektedir. 6 | class ObserverUser implements IObserverUser { 7 | public void sendNotification(ProductUpdateMessage message) { 8 | System.out.println(message.toString()); 9 | } 10 | } -------------------------------------------------------------------------------- /observer/java/ProductUpdateMessage.java: -------------------------------------------------------------------------------- 1 | package Observer; 2 | 3 | // Bildirilecek olan nesnelere paremetre olarak giden mesaj. 4 | // UML diyagramı ile ilgisi yoktur. 5 | class ProductUpdateMessage { 6 | public String productName; 7 | public String message; 8 | 9 | @Override 10 | public String toString() { 11 | return String.format("%s updated. Message:%s", productName, message); 12 | } 13 | } -------------------------------------------------------------------------------- /abstract-factory/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace AbstractFactory 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | CustomOperation customOperation = new CustomOperation(new OracleDatabaseFactory()); 10 | customOperation.RemoveById(1); 11 | 12 | 13 | Console.WriteLine("Hello World!"); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /bridge/java/TextMessageSender.java: -------------------------------------------------------------------------------- 1 | package Bridge; 2 | 3 | // UML diyagramındaki ConcreteImplementor (TextMessageSender) kısmına denk gelmektedir. 4 | // Implementor arayüzünü (IMessageSender) uygular. 5 | public class TextMessageSender implements IMessageSender { 6 | @Override 7 | public void sendMessage(Message message) { 8 | System.out.println("TextMessageSender: Sending text message..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /interpreter/java/DeveloperExpression.java: -------------------------------------------------------------------------------- 1 | package Interpreter; 2 | 3 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 4 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 5 | class DeveloperExpression implements IJobExpression { 6 | public void interpret(Context context) { 7 | if (context.formula.contains("G")) { 8 | context.totalPoint += 4000; 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /observer/kotlin/ProductUpdateMessage.kt: -------------------------------------------------------------------------------- 1 | package Observer 2 | 3 | // Bildirilecek olan nesnelere paremetre olarak giden mesaj. 4 | // UML diyagramı ile ilgisi yoktur. 5 | internal class ProductUpdateMessage { 6 | var productName: String? = null 7 | var message: String? = null 8 | 9 | override fun toString(): String { 10 | return String.format("%s updated. Message:%s", productName, message) 11 | } 12 | } -------------------------------------------------------------------------------- /abstract-factory/java/MySQLDatabaseFactory.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | // MySQL için ilişkili nesneler üretildi. 4 | public class MySQLDatabaseFactory implements IDatabaseFactory { 5 | @Override 6 | public Connection createConnection() { 7 | return new MySQLConnection(); 8 | } 9 | 10 | @Override 11 | public Command createCommand() { 12 | return new MySQLCommand(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /bridge/java/EmailMessageSender.java: -------------------------------------------------------------------------------- 1 | package Bridge; 2 | 3 | // UML diyagramındaki ConcreteImplementor (EmailMessageSender) kısmına denk gelmektedir. 4 | // Implementor arayüzünü (IMessageSender) uygular. 5 | public class EmailMessageSender implements IMessageSender { 6 | @Override 7 | public void sendMessage(Message message) { 8 | System.out.println("EmailMessageSender: Sending email message..."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /interpreter/java/AccountingExpression.java: -------------------------------------------------------------------------------- 1 | package Interpreter; 2 | 3 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 4 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 5 | class AccountingExpression implements IJobExpression { 6 | public void interpret(Context context) { 7 | if (context.formula.contains("M")) { 8 | context.totalPoint += 3000; 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /interpreter/java/TeamLeadExpression.java: -------------------------------------------------------------------------------- 1 | package Interpreter; 2 | 3 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 4 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 5 | class TeamLeadExpression implements IJobExpression { 6 | public void interpret(Context context) { 7 | if (context.formula.contains("L")) { 8 | context.totalPoint += 7000; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /iterator/java/IIterator.java: -------------------------------------------------------------------------------- 1 | package Iterator; 2 | 3 | // Koleksiyon üzerinde dolaşmak için operasyonların tanımlandığı arayüzdür. 4 | // Bir sonraki elemana geçme, bir sonraki elemanın olup olmadığı gibi. 5 | // UML diyagramındaki Iterator arayüzüne denk gelmektedir. 6 | // Generic bir yapı sağlanarak birçok yerde kullanılması sağlanır. 7 | interface IIterator { 8 | Boolean hasNext(); 9 | T getCurrentItem(); 10 | } 11 | -------------------------------------------------------------------------------- /proxy/java/App.java: -------------------------------------------------------------------------------- 1 | package Proxy; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | Person semanur = new Person("11111111111", "İstanbul/Sancaktepe xxx-yyy-zzz"); 6 | 7 | IOrderableMask orderableMask = new AuthenticatableMaskOrderProxy(); 8 | 9 | orderableMask.createOrder(semanur); 10 | // output: Order created to İstanbul/Sancaktepe xxx-yyy-zzz 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory/java/OracleDatabaseFactory.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | // Oracle için ilişkili nesneler üretildi. 4 | public class OracleDatabaseFactory implements IDatabaseFactory { 5 | @Override 6 | public Connection createConnection() { 7 | return new OracleConnection(); 8 | } 9 | 10 | @Override 11 | public Command createCommand() { 12 | return new OracleCommand(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /bridge/c-sharp/IMessageSender.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Bridge 6 | { 7 | // UML diyagramındaki Implementor (IMessageSender) arayüzünen denk gelmektedir. 8 | // Abstraction (Message) tarafından referansı tutulur ve haberleşme burası ile gerçekleşir. 9 | public interface IMessageSender 10 | { 11 | void SendMessage(Message message); 12 | } 13 | } -------------------------------------------------------------------------------- /bridge/java/EmailMessage.java: -------------------------------------------------------------------------------- 1 | package Bridge; 2 | 3 | // UML diyagramındaki RefinedAbstraction kısmına denk gelmektedir. 4 | // Abstraction (Message) sınıfından türer. 5 | public class EmailMessage extends Message { 6 | public EmailMessage(IMessageSender messageSender) { 7 | super(messageSender); 8 | } 9 | 10 | @Override 11 | public void send() { 12 | messageSender.sendMessage(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /template-method/kotlin/XmlDataAnalyzer.kt: -------------------------------------------------------------------------------- 1 | package TemplateMethod 2 | 3 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 4 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 5 | internal class XmlDataAnalyzer : DataAnalyzerBase() { 6 | override fun exportResult(result: Any) { 7 | // Durumun XML'e dönüştürülmesi işlemleri yer alacaktır. 8 | println("XML exported.") 9 | } 10 | } -------------------------------------------------------------------------------- /bridge/java/TextMessage.java: -------------------------------------------------------------------------------- 1 | package Bridge; 2 | 3 | // UML diyagramındaki RefinedAbstraction kısmına denk gelmektedir. 4 | // Abstraction (Message) sınıfından türer. 5 | public class TextMessage extends Message { 6 | 7 | public TextMessage(IMessageSender messageSender) { 8 | super(messageSender); 9 | } 10 | 11 | @Override 12 | public void send() { 13 | messageSender.sendMessage(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /iterator/kotlin/IIterator.kt: -------------------------------------------------------------------------------- 1 | package Iterator 2 | 3 | // Koleksiyon üzerinde dolaşmak için operasyonların tanımlandığı arayüzdür. 4 | // Bir sonraki elemana geçme, bir sonraki elemanın olup olmadığı gibi. 5 | // UML diyagramındaki Iterator arayüzüne denk gelmektedir. 6 | // Generic bir yapı sağlanarak birçok yerde kullanılması sağlanır. 7 | internal interface IIterator { 8 | val currentItem: T 9 | fun hasNext(): Boolean? 10 | } 11 | -------------------------------------------------------------------------------- /adapter/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Adapter 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | CustomOperation customOperation = new CustomOperation(new CustomSerializerAdapter()); 10 | string serializedObject = customOperation.SerializeObject(new object()); 11 | 12 | Console.WriteLine(serializedObject); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /template-method/kotlin/HtmlDataAnalyzer.kt: -------------------------------------------------------------------------------- 1 | package TemplateMethod 2 | 3 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 4 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 5 | internal class HtmlDataAnalyzer : DataAnalyzerBase() { 6 | override fun exportResult(result: Any) { 7 | // Durumun HTML'e dönüştürülmesi işlemleri yer alacaktır. 8 | println("HTML exported.") 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /adapter/java/CustomSerializer.java: -------------------------------------------------------------------------------- 1 | package Adapter; 2 | 3 | // Sisteme daha sonradan dahil olan yapı. 4 | // Sistemin kullandığı arayüzü uygulamamaktadır. 5 | class CustomSerializer { 6 | public String serialize(Object obj) { 7 | // Gelen nesneyi serilize etmek için temel operasyonel işlemler.. 8 | // Daha sonradan da gerekli değerin geri döndürülmesi... 9 | return "serialized with CustomSerializer"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /adapter/kotlin/CustomSerializer.kt: -------------------------------------------------------------------------------- 1 | package Adapter 2 | 3 | // Sisteme daha sonradan dahil olan yapı. 4 | // Sistemin kullandığı arayüzü uygulamamaktadır. 5 | internal class CustomSerializer { 6 | fun serialize(obj: Any): String { 7 | // Gelen nesneyi serilize etmek için temel operasyonel işlemler.. 8 | // Daha sonradan da gerekli değerin geri döndürülmesi... 9 | return "serialized with CustomSerializer" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /composite/java/Product.java: -------------------------------------------------------------------------------- 1 | package Composite; 2 | 3 | // Somut yapımızdır. 4 | // UML diyagramındaki Leaf kısmına denk gelmektedir. 5 | // Hiyerarşinin en alt tabakasını temsil etmektedir. 6 | class Product implements ICatalogComponent { 7 | private String _name; 8 | 9 | public Product(String name) { 10 | _name = name; 11 | } 12 | 13 | public void drawHierarchy() { 14 | System.out.println(_name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /interpreter/java/App.java: -------------------------------------------------------------------------------- 1 | package Interpreter; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | Context context = new Context(); 6 | context.formula = "GGML"; 7 | 8 | JobManager jobManager = new JobManager(); 9 | jobManager.runExpression(context); 10 | 11 | System.out.println(context.formula + " :> " + context.totalPoint); 12 | // output: GGML :> 18000 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /interpreter/kotlin/AccountingExpression.kt: -------------------------------------------------------------------------------- 1 | package Interpreter 2 | 3 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 4 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 5 | internal class AccountingExpression : IJobExpression { 6 | override fun interpret(context: Context) { 7 | if (context.formula!!.contains("M")) { 8 | context.totalPoint = context.totalPoint + 3000 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /interpreter/kotlin/DeveloperExpression.kt: -------------------------------------------------------------------------------- 1 | package Interpreter 2 | 3 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 4 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 5 | internal class DeveloperExpression : IJobExpression { 6 | override fun interpret(context: Context) { 7 | if (context.formula!!.contains("G")) { 8 | context.totalPoint = context.totalPoint + 4000 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /mediator/c-sharp/IChatRoom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Mediator 6 | { 7 | // Colleague (User) nesneler arasındaki iletişim arayüzünü tanımlar. 8 | // UML diyagramındaki Mediator arayüzüne denk gelmektedir. 9 | interface IChatRoomMediator 10 | { 11 | void SendMessage(string message, int userId); 12 | void AddUserInRoom(User user); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /strategy/java/Item.java: -------------------------------------------------------------------------------- 1 | package Strategy; 2 | 3 | // Sepette bulunan ürünleri temsil eden sınıf. 4 | // Ürün kodu ve fiyat bilgileri temel olarak yeterlidir. 5 | class Item { 6 | private String upcCode; 7 | private int price; 8 | 9 | public Item(String upcCode, int price) { 10 | this.upcCode = upcCode; 11 | this.price = price; 12 | } 13 | 14 | public int getPrice() { 15 | return this.price; 16 | } 17 | } -------------------------------------------------------------------------------- /decorator/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Decorator 2 | 3 | fun main(args: Array) { 4 | val dataSource = FileDataSource("data.sql") 5 | 6 | val compressedDataSource = ComporessionDecorator(dataSource) 7 | 8 | compressedDataSource.readData() 9 | compressedDataSource.writeData(Any()) 10 | 11 | // output: 12 | // data.sql readed. 13 | // Data compressed. 14 | // Compressed data was written to data.sql 15 | } 16 | -------------------------------------------------------------------------------- /facade/c-sharp/CreditCardManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Facade 6 | { 7 | //Kredi kartı ile ilgili işlemlerin yapıldığı sınıf 8 | class CreditCardManager 9 | { 10 | public void CreateCreditCart(Customer customer) 11 | { 12 | // Parametre olarak gelen kullanıcıya ait kredi kartı oluşturma işleminin yapıldığı yer 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /interpreter/kotlin/TeamLeadExpression.kt: -------------------------------------------------------------------------------- 1 | package Interpreter 2 | 3 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 4 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 5 | internal class TeamLeadExpression : IJobExpression { 6 | override fun interpret(context: Context) { 7 | if (context.formula!!.contains("L")) { 8 | context.totalPoint = context.totalPoint + 7000 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/IDatabaseFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | // Oluşturulacak ürünlere ait metotları içerir. 8 | // Oracle ve MySQL için bunların geriye döndüreceği 9 | // Nesneler farklı olacaktır. 10 | interface IDatabaseFactory 11 | { 12 | Connection CreateConnection(); 13 | Command CreateCommand(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /proxy/kotlin/MaskOrder.kt: -------------------------------------------------------------------------------- 1 | package Proxy 2 | 3 | // Maske siparişininin oluşturulduğu sınıf. 4 | // İstemcinin direkt erişmesini istemediğimiz alandır. 5 | // UML diyagramındaki ConcreteService sınıfına denk gelmektedir. 6 | internal class MaskOrder : IOrderableMask { 7 | 8 | override fun createOrder(person: Person) { 9 | // Burada siparişin oluşturulma işlemleri yer alacaktır. 10 | println("Order created to " + person.address) 11 | } 12 | } -------------------------------------------------------------------------------- /strategy/kotlin/PaypalPayment.kt: -------------------------------------------------------------------------------- 1 | package Strategy 2 | 3 | // UMl diyagramındaki ConcreteStrategy sınıfına denk gelmektedir. 4 | // UML diyagramındaki Strategy arayüzüne denk gelen arayüzü uyguluyor. 5 | internal class PaypalPayment(private val email: String, private val password: String) : IPayment { 6 | 7 | override fun pay(amount: Int) { 8 | // Kredi kartı ödeme işlemlerinin gerçekleştiği yer. 9 | println("Paid by Paypal.") 10 | } 11 | } -------------------------------------------------------------------------------- /template-method/java/XmlDataAnalyzer.java: -------------------------------------------------------------------------------- 1 | package TemplateMethod; 2 | 3 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 4 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 5 | class XmlDataAnalyzer extends DataAnalyzerBase { 6 | @Override 7 | public void exportResult(Object result) { 8 | // Durumun XML'e dönüştürülmesi işlemleri yer alacaktır. 9 | System.out.println("XML exported."); 10 | } 11 | } -------------------------------------------------------------------------------- /facade/kotlin/CreditCardFacade.kt: -------------------------------------------------------------------------------- 1 | package Facade 2 | 3 | // Banka müşterimizi temsili oluşturan sınıf. 4 | class CreditCardFacade { 5 | fun createCreditCart(customer: Customer) { 6 | val creditCardManager = CreditCardManager() 7 | 8 | val blackListService = BlackListService() 9 | 10 | if (blackListService.checkEmployeeIsTheBlackList(customer)) { 11 | creditCardManager.createCreditCart(customer) 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /bridge/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Bridge 2 | 3 | fun main(args: Array) { 4 | val textMessageSender = TextMessageSender() 5 | val textMessage = TextMessage(textMessageSender) 6 | textMessage.send() // output: TextMessageSender: Sending text message... 7 | 8 | val emailMessageSender = EmailMessageSender() 9 | val emailMessage = TextMessage(emailMessageSender) 10 | emailMessage.send() // output: EmailMessageSender: Sending email message... 11 | } 12 | -------------------------------------------------------------------------------- /decorator/c-sharp/IDataSource.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Decorator 6 | { 7 | // Üst sınıfların uygulayacağı arayüzdür. 8 | // Yapılacak temel işlemler tanımlanmıştır. 9 | // UML diyagramındaki Component arayüzüne denk gelmektedir. 10 | interface IDataSource 11 | { 12 | string GetFileName(); 13 | void WriteData(object data); 14 | void ReadData(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /proxy/java/MaskOrder.java: -------------------------------------------------------------------------------- 1 | package Proxy; 2 | 3 | // Maske siparişininin oluşturulduğu sınıf. 4 | // İstemcinin direkt erişmesini istemediğimiz alandır. 5 | // UML diyagramındaki ConcreteService sınıfına denk gelmektedir. 6 | class MaskOrder implements IOrderableMask { 7 | 8 | public void createOrder(Person person) { 9 | // Burada siparişin oluşturulma işlemleri yer alacaktır. 10 | System.out.println("Order created to " + person.address); 11 | } 12 | } -------------------------------------------------------------------------------- /singleton/java/App.java: -------------------------------------------------------------------------------- 1 | package Singleton; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | Database firstInstanceRequest = Database.getInstance(); 6 | Database secondInstanceRequest = Database.getInstance(); 7 | 8 | Boolean isEquals = firstInstanceRequest == secondInstanceRequest; 9 | 10 | System.out.printf("Database referance is equals: %b", isEquals); //output: Database referance is equals: true 11 | } 12 | } -------------------------------------------------------------------------------- /template-method/java/HtmlDataAnalyzer.java: -------------------------------------------------------------------------------- 1 | package TemplateMethod; 2 | 3 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 4 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 5 | class HtmlDataAnalyzer extends DataAnalyzerBase { 6 | @Override 7 | public void exportResult(Object result) { 8 | // Durumun HTML'e dönüştürülmesi işlemleri yer alacaktır. 9 | System.out.println("HTML exported."); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /prototype/java/IClonablePrototype.java: -------------------------------------------------------------------------------- 1 | package Prototype; 2 | 3 | // Klonlamak istediğimiz sınıflarımıza uygulayacağımız arayüz. 4 | // Farklı sınıflarda da kullanılması için Generic bir yapı oluşturuldu. 5 | // Generic yapı sayesinde dinamik olarak tip dönüşümü sağlanacaktır. 6 | // Bu sayede farklı sınıflara da bu deseni uygulama şansı doğuyor. 7 | interface IClonablePrototype extends Cloneable { 8 | TPrototype clone() throws CloneNotSupportedException; 9 | } 10 | -------------------------------------------------------------------------------- /composite/c-sharp/ICatalogComponent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Composite 6 | { 7 | // Soyut yapımızdır. 8 | // UML diyagramındaki Component kısmına denk gelmektedir. 9 | // Diğer istemci sınıflar bu yapıyı uygular. 10 | // Diğer sınıfların uygulayacağı hiyerarşiyi çizme metotunu içermektedir. 11 | public interface ICatalogComponent 12 | { 13 | void DrawHierarchy(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /proxy/c-sharp/Person.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Proxy 6 | { 7 | // Maske siparişini verecek kullanıcıları temsili sınıf. 8 | class Person 9 | { 10 | public string TC { get; set; } 11 | public string Address { get; set; } 12 | 13 | public Person(string tc, string address) 14 | { 15 | TC = tc; 16 | Address = address; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /decorator/kotlin/FileDataSource.kt: -------------------------------------------------------------------------------- 1 | package Decorator 2 | 3 | // Temel işlemlerin tanımlandığı IDataSource arayüzünü uygulayan sınıftır. 4 | // UML diyagramındaki ConcreteComponent sınıfına denk gelmektedir. 5 | internal class FileDataSource(override val fileName: String) : IDataSource { 6 | 7 | override fun readData() { 8 | println("$fileName readed.") 9 | } 10 | 11 | override fun writeData(data: Any) { 12 | println("data was written to $fileName") 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /prototype/java/App.java: -------------------------------------------------------------------------------- 1 | package Prototype; 2 | 3 | public class App { 4 | public static void main(String[] args) throws CloneNotSupportedException { 5 | Employee gulizar = new Employee("Gülizar", "Yılmaz"); 6 | Employee cloneGulizar = gulizar.clone(); 7 | 8 | // Aynı nesne örneklerini farklı referanslarda tutuyor. 9 | // Birbirinin aynısı ve farklı referanslarda olan nesneler elde ettik. 10 | System.out.println(gulizar == cloneGulizar); //output: false 11 | } 12 | } -------------------------------------------------------------------------------- /strategy/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Strategy 2 | 3 | fun main(args: Array) { 4 | val shoppingCart = ShoppingCart() 5 | shoppingCart.addItem(Item("894651364", 80)) 6 | shoppingCart.addItem(Item("654798243", 20)) 7 | 8 | shoppingCart.setPaymentMethod(PaypalPayment("yusufyilmazfr@gmail.com", "examplepassword")) 9 | shoppingCart.Pay() 10 | 11 | shoppingCart.setPaymentMethod(CreditCartPayment("Julia Rodriguez", "4373093149845972", "199", "12/2024")) 12 | shoppingCart.Pay() 13 | } 14 | -------------------------------------------------------------------------------- /chain-of-responsibility/c-sharp/Image.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChainOfResponsibility 6 | { 7 | // Uygulama süresince resimlerimizi temsil edecek sınıf. 8 | class Image 9 | { 10 | public string name; 11 | public string extension; 12 | 13 | public Image(string name, string extension) 14 | { 15 | this.name = name; 16 | this.extension = extension; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /facade/c-sharp/Customer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Facade 6 | { 7 | // Banka müşterimizi temsili oluşturan sınıf. 8 | class Customer 9 | { 10 | public Customer(string firstName, string lastName) 11 | { 12 | FirstName = firstName; 13 | LastName = lastName; 14 | } 15 | 16 | public string FirstName { get; set; } 17 | public string LastName { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /iterator/c-sharp/IEmployeeAggregate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Iterator 6 | { 7 | // Iterator arayüzünü uygulayan sınıf örneklerini elde etmek için metot içerir. 8 | // Bu sayede çeşitli Iterator arayüzünü uygulayan sınıfların örneklerini elde edebiliriz. 9 | // UML diyagramındaki Aggregate arayüzüne denk gelmektedir. 10 | interface IEmployeeAggregate 11 | { 12 | IIterator CreateIterator(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mediator/c-sharp/ChatUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Mediator 6 | { 7 | // Colleague (User) soyutundan türer. 8 | // Mediator sayesinde diğer sınıf örnekler ile iletişim kurar. 9 | // UML diyagramındaki ConcreteColleague yapısına denk gelmektedir. 10 | class ChatUser : User 11 | { 12 | public ChatUser(IChatRoomMediator chatRoomMediator) : base(chatRoomMediator) 13 | { 14 | 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototype/kotlin/ClonablePrototype.kt: -------------------------------------------------------------------------------- 1 | package Prototype 2 | 3 | // Klonlamak istediğimiz sınıflarımıza uygulayacağımız arayüz. 4 | // Farklı sınıflarda da kullanılması için Generic bir yapı oluşturuldu. 5 | // Generic yapı sayesinde dinamik olarak tip dönüşümü sağlanacaktır. 6 | // Bu sayede farklı sınıflara da bu deseni uygulama şansı doğuyor. 7 | abstract class CloneablePrototype : Cloneable { 8 | public fun cloneObject(): TPrototype { 9 | return super.clone() as TPrototype; 10 | } 11 | } -------------------------------------------------------------------------------- /proxy/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Proxy 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | Person semanur = new Person("11111111111", "İstanbul/Sancaktepe xxx-yyy-zzz"); 10 | 11 | IOrderableMask orderableMask = new AuthenticatableMaskOrderProxy(); 12 | 13 | orderableMask.CreateOrder(semanur); 14 | // output: Order created to İstanbul/Sancaktepe xxx-yyy-zzz. 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /visitor/c-sharp/Magazine.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Visitor 6 | { 7 | // UML diyagramındaki Element'ten türer. 8 | // Accept metoduna bulunduğu nesne örneği gönderilir. 9 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 10 | class Magazine : Book 11 | { 12 | public override void Accept(IBookExportVisitor visitor) 13 | { 14 | visitor.ExportVisit(this); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /command/java/BuyStock.java: -------------------------------------------------------------------------------- 1 | package Command; 2 | 3 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 4 | // Command (IOrderCommand) arayüzünü uygular. 5 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 6 | class BuyStock implements IOrderCommand { 7 | private StockManager _stockManager; 8 | 9 | public BuyStock(StockManager stockManager) { 10 | _stockManager = stockManager; 11 | } 12 | 13 | public void execute() { 14 | _stockManager.buy(); 15 | } 16 | } -------------------------------------------------------------------------------- /command/java/SellStock.java: -------------------------------------------------------------------------------- 1 | package Command; 2 | 3 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 4 | // Command (IOrderCommand) arayüzünü uygular. 5 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 6 | class SellStock implements IOrderCommand { 7 | private StockManager _stockManager; 8 | 9 | public SellStock(StockManager stockManager) { 10 | _stockManager = stockManager; 11 | } 12 | 13 | public void execute() { 14 | _stockManager.sell(); 15 | } 16 | } -------------------------------------------------------------------------------- /state/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | fun main(args: Array) { 4 | val vendingMachine = VendingMachine() 5 | vendingMachine.requestProduct("COVID-19 MASKE", 2.0) 6 | 7 | // output: 8 | // InitializeState: Ön hazırlıklar yapılıyor. 9 | // WaitingState: Otomata herhangi bir aksiyon bekliyor. 10 | // PreparingState: İstenilen ürün hazırlanıyor.Lütfen bekleyiniz 11 | // DeliveryState: Ürün teslim ediliyor. 12 | // WaitingState: Otomata herhangi bir aksiyon bekliyor. 13 | } 14 | -------------------------------------------------------------------------------- /visitor/c-sharp/Encyclopedia.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Visitor 6 | { 7 | // UML diyagramındaki Element'ten türer. 8 | // Accept metoduna bulunduğu nesne örneği gönderilir. 9 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 10 | class Encyclopedia : Book 11 | { 12 | public override void Accept(IBookExportVisitor visitor) 13 | { 14 | visitor.ExportVisit(this); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /visitor/c-sharp/IBookExportVisitor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Visitor 6 | { 7 | // Her ConcreteVisitor örneği için metot temsil eder. 8 | // Parametre olarak Element sınıfından türeyen sınıfların örneğini alır. 9 | // UML diyagramındaki Visitor yapısına denk gelir. 10 | interface IBookExportVisitor 11 | { 12 | void ExportVisit(Magazine magazine); 13 | void ExportVisit(Encyclopedia encyclopedia); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /facade/java/CreditCardFacade.java: -------------------------------------------------------------------------------- 1 | package Facade; 2 | 3 | // Banka müşterimizi temsili oluşturan sınıf. 4 | public class CreditCardFacade { 5 | public void createCreditCart(Customer customer) { 6 | CreditCardManager creditCardManager = new CreditCardManager(); 7 | 8 | BlackListService blackListService = new BlackListService(); 9 | 10 | if (blackListService.checkEmployeeIsTheBlackList(customer)) { 11 | creditCardManager.createCreditCart(customer); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /flyweight/c-sharp/Box.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Flyweight 6 | { 7 | // Nesnenin ortak özelliklerini tutan sınıftır. 8 | // UML diyagramındaki Flyweight yapısına denk gelmektedir. 9 | abstract class Box 10 | { 11 | // Intrinsic değerler. 12 | public int width; 13 | public int height; 14 | public BoxColor boxColor; 15 | 16 | public abstract void Draw(int locationX, int locationY); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /visitor/c-sharp/Book.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Visitor 6 | { 7 | 8 | // Temel sınıftır. 9 | // Yeni davranışları Accept metotu ile alır. 10 | // UML diyagramındaki Element yapısına denk gelmektedir. 11 | abstract class Book 12 | { 13 | public string name; 14 | public string author; 15 | public string categoryName; 16 | 17 | public abstract void Accept(IBookExportVisitor visitor); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chain-of-responsibility/java/BaseHandler.java: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility; 2 | 3 | // Zincirin bir sonraki halkasının tanımlandığı sınıftır. 4 | // İşlemi gerçekleştirecek olan metot tanımı bulunur. 5 | // UML diyagramındaki BaseHandler sınıfına denk gelmektedir. 6 | abstract class BaseHandler { 7 | protected BaseHandler nextHandler; 8 | 9 | public void setNextHandler(BaseHandler nextHandler) { 10 | this.nextHandler = nextHandler; 11 | } 12 | 13 | public abstract void handleRequest(Image image); 14 | } 15 | -------------------------------------------------------------------------------- /observer/kotlin/Samsung.kt: -------------------------------------------------------------------------------- 1 | package Observer 2 | 3 | // Observer sınıfından türer. 4 | // UML diyagramındaki ConcreteObservable yapısına denk gelmektedir. 5 | internal class Samsung : ObservableProduct() { 6 | 7 | // Ürün fiyatı değiştikten sonra Observer örneklerine bildirim gönderilir. 8 | fun changePrice() { 9 | // Ürün fiyatlarının güncellenmesi vs. 10 | 11 | this.message.productName = "Samsung" 12 | this.message.message = "Samsung's price updated." 13 | this.notifyObserver() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/MySQLDatabaseFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | // MySQL için ilişkili nesneler üretildi. 8 | class MySQLDatabaseFactory : IDatabaseFactory 9 | { 10 | public Command CreateCommand() 11 | { 12 | return new MySQLCommand(); 13 | } 14 | 15 | public Connection CreateConnection() 16 | { 17 | return new MySQLConnection(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/OracleDatabaseFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | // Oracle için ilişkili nesneler üretildi. 8 | class OracleDatabaseFactory : IDatabaseFactory 9 | { 10 | public Command CreateCommand() 11 | { 12 | return new OracleCommand(); 13 | } 14 | public Connection CreateConnection() 15 | { 16 | return new OracleConnection(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bridge/c-sharp/TextMessageSender.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Bridge 6 | { 7 | // UML diyagramındaki ConcreteImplementor (TextMessageSender) kısmına denk gelmektedir. 8 | // Implementor arayüzünü (IMessageSender) uygular. 9 | public class TextMessageSender : IMessageSender 10 | { 11 | public void SendMessage(Message message) 12 | { 13 | Console.WriteLine("TextMessageSender: Sending text message..."); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /bridge/c-sharp/EmailMessageSender.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Bridge 6 | { 7 | // UML diyagramındaki ConcreteImplementor (EmailMessageSender) kısmına denk gelmektedir. 8 | // Implementor arayüzünü (IMessageSender) uygular. 9 | public class EmailMessageSender : IMessageSender 10 | { 11 | public void SendMessage(Message message) 12 | { 13 | Console.WriteLine("EmailMessageSender: Sending email message..."); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /observer/java/Samsung.java: -------------------------------------------------------------------------------- 1 | package Observer; 2 | 3 | // Observer sınıfından türer. 4 | // UML diyagramındaki ConcreteObservable yapısına denk gelmektedir. 5 | class Samsung extends ObservableProduct { 6 | 7 | // Ürün fiyatı değiştikten sonra Observer örneklerine bildirim gönderilir. 8 | public void changePrice() { 9 | // Ürün fiyatlarının güncellenmesi vs. 10 | 11 | this.message.productName = "Samsung"; 12 | this.message.message = "Samsung's price updated."; 13 | this.notifyObserver(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory/java/MySQLConnection.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | public class MySQLConnection extends Connection { 4 | @Override 5 | public Boolean openConnection() { 6 | // MySQL veri tabanı bağlantısının açılması için 7 | // Gerekli operasyonel işlemler... 8 | return true; 9 | } 10 | 11 | @Override 12 | public Boolean closeConnection() { 13 | // MySQL veri tabanı bağlantısının kapatılması için 14 | // Gerekli operasyonel işlemler... 15 | return true; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /command/kotlin/StockManager.kt: -------------------------------------------------------------------------------- 1 | package Command 2 | 3 | // Komutları nesneler haline getirelecek olan sınıf. 4 | // UML diyagramındaki Receiver sınıfına denk gelmektedir. 5 | internal class StockManager(private val _name: String, private val _quantity: Int) { 6 | 7 | fun buy() { 8 | val message = String.format("Stock: %s, %s bought!", _name, _quantity) 9 | println(message) 10 | } 11 | 12 | fun sell() { 13 | val message = String.format("Stock: %s, %s sold!", _name, _quantity) 14 | println(message) 15 | } 16 | } -------------------------------------------------------------------------------- /facade/kotlin/BlackListService.kt: -------------------------------------------------------------------------------- 1 | package Facade 2 | 3 | // Kara liste ile ilgili işlemlerin yapıldığı sınıf 4 | class BlackListService { 5 | fun checkEmployeeIsTheBlackList(customer: Customer): Boolean { 6 | // Müşterinin kara listede olup olmadığının kontrolünün yapıldığı yer. 7 | // Kara listede ise false, değilse true dönmekte olduğunu var sayalım. 8 | // Burada veri tabanı kodları ya da harici bir servis ile iletişim sağlanabilir. 9 | // Default olarak true döndürdük. 10 | return true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /observer/c-sharp/ProductUpdateMessage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Observer 6 | { 7 | // Bildirilecek olan nesnelere paremetre olarak giden mesaj. 8 | // UML diyagramı ile ilgisi yoktur. 9 | class ProductUpdateMessage 10 | { 11 | public string productName; 12 | public string message; 13 | 14 | public override string ToString() 15 | { 16 | return $"{productName} updated. Message: {message}"; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /prototype/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Prototype 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | Employee gulizar = new Employee("Gülizar", "Yılmaz"); 10 | Employee cloneGulizar = gulizar.Clone(); 11 | 12 | // Aynı nesne örneklerini farklı referanslarda tutuyor. 13 | // Birbirinin aynısı ve farklı referanslarda olan nesneler elde ettik. 14 | Console.WriteLine(gulizar == cloneGulizar); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /adapter/c-sharp/CustomOperation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Adapter 6 | { 7 | class CustomOperation 8 | { 9 | private IJsonSerializer _jsonSerializer; 10 | 11 | public CustomOperation(IJsonSerializer jsonSerializer) 12 | { 13 | _jsonSerializer = jsonSerializer; 14 | } 15 | 16 | public string SerializeObject(object obj) 17 | { 18 | return _jsonSerializer.SerializeObject(obj); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /singleton/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Singleton 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | Database firstInstanceRequest = Database.GetInstance(); 10 | Database secondInstanceRequest = Database.GetInstance(); 11 | 12 | bool isEquals = firstInstanceRequest == secondInstanceRequest; 13 | 14 | Console.WriteLine($"Database referance is equals: {isEquals}"); //output: Database referance is equals: True 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /iterator/c-sharp/IIterator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Iterator 6 | { 7 | // Koleksiyon üzerinde dolaşmak için operasyonların tanımlandığı arayüzdür. 8 | // Bir sonraki elemana geçme, bir sonraki elemanın olup olmadığı gibi. 9 | // UML diyagramındaki Iterator arayüzüne denk gelmektedir. 10 | // Generic bir yapı sağlanarak birçok yerde kullanılması sağlanır. 11 | interface IIterator 12 | { 13 | bool HasNext(); 14 | T GetCurrentItem(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /observer/c-sharp/ObserverUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Observer 6 | { 7 | // Observer arayüzünü uygulayan, değişimi takip eden sınıflardır. 8 | // Değişim update metotu ile bildirilir. 9 | // UML diyagramındaki ConcreteObserver yapısına denk gelmektedir. 10 | class ObserverUser : IObserverUser 11 | { 12 | public void SendNotification(ProductUpdateMessage message) 13 | { 14 | Console.WriteLine(message.ToString()); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /prototype/c-sharp/IClonablePrototype.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Prototype 6 | { 7 | // Klonlamak istediğimiz sınıflarımıza uygulayacağımız arayüz. 8 | // Farklı sınıflarda da kullanılması için Generic bir yapı oluşturuldu. 9 | // Generic yapı sayesinde dinamik olarak tip dönüşümü sağlanacaktır. 10 | // Bu sayede farklı sınıflara da bu deseni uygulama şansı doğuyor. 11 | interface IClonablePrototype 12 | { 13 | TPrototype Clone(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory/java/OracleConnection.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | public class OracleConnection extends Connection { 4 | @Override 5 | public Boolean openConnection() { 6 | // Oracle veri tabanı bağlantısının açılması için 7 | // Gerekli operasyonel işlemler... 8 | 9 | return true; 10 | } 11 | 12 | @Override 13 | public Boolean closeConnection() { 14 | // Oracle veri tabanı bağlantısının kapatılması için 15 | // Gerekli operasyonel işlemler... 16 | 17 | return true; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /decorator/java/App.java: -------------------------------------------------------------------------------- 1 | package Decorator; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | IDataSource dataSource = new FileDataSource("data.sql"); 6 | 7 | IDataSource compressedDataSource = new ComporessionDecorator(dataSource); 8 | 9 | compressedDataSource.readData(); 10 | compressedDataSource.writeData(new Object()); 11 | 12 | // output: 13 | // data.sql readed. 14 | // Data compressed. 15 | // Compressed data was written to data.sql 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /flyweight/kotlin/BlueBox.kt: -------------------------------------------------------------------------------- 1 | package Flyweight 2 | 3 | // Flyweight (Box) şablonunu uygulayan sınıftır. 4 | // UML diyagramındaki ConcreteFlyweight sınıfına denk gelmektedir. 5 | internal class BlueBox(width: Int, height: Int) : Box() { 6 | init { 7 | this.width = width 8 | this.height = height 9 | this.boxColor = BoxColor.BLUE 10 | } 11 | 12 | override fun draw(locationX: Int, locationY: Int) { 13 | val message = String.format("%s box drawn. %d,%d", boxColor, locationX, locationY) 14 | println(message) 15 | } 16 | } -------------------------------------------------------------------------------- /bridge/c-sharp/EmailMessage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Bridge 6 | { 7 | // UML diyagramındaki RefinedAbstraction kısmına denk gelmektedir. 8 | // Abstraction (Message) sınıfından türer. 9 | public class EmailMessage : Message 10 | { 11 | public EmailMessage(IMessageSender messageSender) : base(messageSender) 12 | { 13 | } 14 | 15 | public override void Send() 16 | { 17 | messageSender.SendMessage(this); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /bridge/c-sharp/TextMessage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Bridge 6 | { 7 | // UML diyagramındaki RefinedAbstraction kısmına denk gelmektedir. 8 | // Abstraction (Message) sınıfından türer. 9 | public class TextMessage : Message 10 | { 11 | public TextMessage(IMessageSender messageSender) : base(messageSender) 12 | { 13 | } 14 | 15 | public override void Send() 16 | { 17 | messageSender.SendMessage(this); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /facade/java/BlackListService.java: -------------------------------------------------------------------------------- 1 | package Facade; 2 | 3 | // Kara liste ile ilgili işlemlerin yapıldığı sınıf 4 | public class BlackListService { 5 | public Boolean checkEmployeeIsTheBlackList(Customer customer) 6 | { 7 | // Müşterinin kara listede olup olmadığının kontrolünün yapıldığı yer. 8 | // Kara listede ise false, değilse true dönmekte olduğunu var sayalım. 9 | // Burada veri tabanı kodları ya da harici bir servis ile iletişim sağlanabilir. 10 | // Default olarak true döndürdük. 11 | return true; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /prototype/java/Employee.java: -------------------------------------------------------------------------------- 1 | package Prototype; 2 | 3 | // Employee sınıfına klonlama yeteneği kazandırmak için tanımladığımız arayüzü uyguladık. 4 | public class Employee implements IClonablePrototype { 5 | String firstName; 6 | String lastName; 7 | 8 | public Employee(String firstName, String lastName) { 9 | this.firstName = firstName; 10 | this.lastName = lastName; 11 | } 12 | 13 | @Override 14 | public Employee clone() throws CloneNotSupportedException { 15 | return (Employee) super.clone(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /strategy/kotlin/CreditCartPayment.kt: -------------------------------------------------------------------------------- 1 | package Strategy 2 | 3 | // UMl diyagramındaki ConcreteStrategy sınıfına denk gelmektedir. 4 | // UML diyagramındaki Strategy arayüzüne denk gelen arayüzü uyguluyor. 5 | internal class CreditCartPayment( 6 | private val name: String, 7 | private val cardNumber: String, 8 | private val cvv: String, 9 | private val dateOfExpiry: String 10 | ) : IPayment { 11 | 12 | override fun pay(amount: Int) { 13 | // Kredi kartı ödeme işlemlerinin gerçekleştiği yer. 14 | println("Paid by credit cart.") 15 | } 16 | } -------------------------------------------------------------------------------- /flyweight/kotlin/BlackBox.kt: -------------------------------------------------------------------------------- 1 | package Flyweight 2 | 3 | // Flyweight (Box) şablonunu uygulayan sınıftır. 4 | // UML diyagramındaki ConcreteFlyweight sınıfına denk gelmektedir. 5 | internal class BlackBox(width: Int, height: Int) : Box() { 6 | init { 7 | this.width = width 8 | this.height = height 9 | this.boxColor = BoxColor.BLACK 10 | } 11 | 12 | override fun draw(locationX: Int, locationY: Int) { 13 | val message = String.format("%s box drawn. %d,%d", boxColor, locationX, locationY) 14 | println(message) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /state/kotlin/InitializeState.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | internal class InitializeState : VendingMachineState() { 7 | // Başlangıç durumu ayarları yapıldıktan sonra WaitingState (hazır) durumuna geçer. 8 | override fun handleState(context: VendingMachine) { 9 | println("InitializeState: Ön hazırlıklar yapılıyor.") 10 | 11 | context.setState(WaitingState()) 12 | } 13 | } -------------------------------------------------------------------------------- /interpreter/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Interpreter 5 | { 6 | class Program 7 | { 8 | 9 | static void Main(string[] args) 10 | { 11 | Context context = new Context(); 12 | context.formula = "GGML"; 13 | 14 | JobManager jobManager = new JobManager(); 15 | jobManager.RunExpression(context); 16 | 17 | Console.WriteLine($"{context.formula} :> {context.totalPoint}"); 18 | // output: GGML :> 18000 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iterator/c-sharp/Employee.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Iterator 6 | { 7 | // Liste üzerinde gezilecek olan elamnı temsil eden sınıf. 8 | class Employee 9 | { 10 | public int id; 11 | public string firstName; 12 | public string lastName; 13 | 14 | public Employee(int id, string firstName, string lastName) 15 | { 16 | this.id = id; 17 | this.firstName = firstName; 18 | this.lastName = lastName; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /state/kotlin/WaitingState.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | internal class WaitingState : VendingMachineState() { 7 | // WaitingState durumunda herhangi bir yeni duruma geçmeye gerek yok. 8 | // Buradan sonraki durum gelen istek ile aksiyon alacaktır. 9 | override fun handleState(context: VendingMachine) { 10 | println("WaitingState: Otomata herhangi bir aksiyon bekliyor.") 11 | } 12 | } -------------------------------------------------------------------------------- /bridge/c-sharp/Message.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Bridge 6 | { 7 | // UML diyagramındaki Abstraction kısmına denk gelmektedir. 8 | // Implementor (IMessageSender) arayüzünün referansını tutmaktadır. 9 | public abstract class Message 10 | { 11 | protected IMessageSender messageSender; 12 | 13 | public Message(IMessageSender messageSender) 14 | { 15 | this.messageSender = messageSender; 16 | } 17 | 18 | public abstract void Send(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /singleton/java/Database.java: -------------------------------------------------------------------------------- 1 | package Singleton; 2 | 3 | public class Database { 4 | private static Database database; 5 | private static Object _synchronizedObject = new Object(); 6 | 7 | private Database() { 8 | 9 | } 10 | 11 | public static Database getInstance() { 12 | if (database == null) { 13 | 14 | synchronized (_synchronizedObject) { 15 | if (database == null) { 16 | database = new Database(); 17 | } 18 | } 19 | } 20 | return database; 21 | } 22 | } -------------------------------------------------------------------------------- /template-method/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package TemplateMethod 2 | 3 | fun main(args: Array) { 4 | var dataAnalyzer: DataAnalyzerBase 5 | 6 | dataAnalyzer = XmlDataAnalyzer() 7 | dataAnalyzer.analyzeDataOfLastWeek() 8 | // output: 9 | // Method worked: GetDataOfLastWeek 10 | // Method worked: AnalyzeData 11 | // XML exported. 12 | 13 | dataAnalyzer = HtmlDataAnalyzer() 14 | dataAnalyzer.analyzeDataOfLastWeek() 15 | // output: 16 | // Method worked: GetDataOfLastWeek 17 | // Method worked: AnalyzeData 18 | // HTML exported. 19 | } 20 | -------------------------------------------------------------------------------- /interpreter/c-sharp/DeveloperExpression.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Interpreter 6 | { 7 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 8 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 9 | class DeveloperExpression : IJobExpression 10 | { 11 | public void Interpret(Context context) 12 | { 13 | if (context.formula.Contains('G')) 14 | { 15 | context.totalPoint += 4000; 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /interpreter/c-sharp/TeamLeadExpression.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Interpreter 6 | { 7 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 8 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 9 | class TeamLeadExpression : IJobExpression 10 | { 11 | public void Interpret(Context context) 12 | { 13 | if (context.formula.Contains('L')) 14 | { 15 | context.totalPoint += 7000; 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bridge/java/App.java: -------------------------------------------------------------------------------- 1 | package Bridge; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | IMessageSender textMessageSender = new TextMessageSender(); 6 | Message textMessage = new TextMessage(textMessageSender); 7 | textMessage.send(); // output: TextMessageSender: Sending text message... 8 | 9 | IMessageSender emailMessageSender = new EmailMessageSender(); 10 | Message emailMessage = new TextMessage(emailMessageSender); 11 | emailMessage.send(); // output: EmailMessageSender: Sending email message... 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chain-of-responsibility/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility 2 | 3 | fun main(args: Array) { 4 | val image = Image("tatil-fotografim", "JPG") 5 | 6 | val jpegHandler = JPEGHandler() 7 | val jpgHandler = JPGHandler() 8 | val customHandler = CustomHandler() 9 | 10 | // Zincirlerin birbirleri ile bağlantısının yapıldığı yerdir. 11 | // JPEG bu işlemi gerçekleştiremezse JPG'e aktarır o da Custom'a aktarır. 12 | jpegHandler.setNextHandler(jpgHandler) 13 | jpgHandler.setNextHandler(customHandler) 14 | 15 | jpegHandler.handleRequest(image) 16 | } 17 | -------------------------------------------------------------------------------- /interpreter/c-sharp/AccountingExpression.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Interpreter 6 | { 7 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 8 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 9 | class AccountingExpression : IJobExpression 10 | { 11 | public void Interpret(Context context) 12 | { 13 | if (context.formula.Contains('M')) 14 | { 15 | context.totalPoint += 3000; 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /adapter/c-sharp/CustomSerializer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Adapter 6 | { 7 | // Sisteme daha sonradan dahil olan yapı. 8 | // Sistemin kullandığı arayüzü uygulamamaktadır. 9 | class CustomSerializer 10 | { 11 | public string Serialize(object obj) 12 | { 13 | // Gelen nesneyi serilize etmek için temel operasyonel işlemler.. 14 | // Daha sonradan da gerekli değerin geri döndürülmesi... 15 | return "serialized with CustomSerializer"; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /template-method/c-sharp/XmlDataAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace TemplateMethod 6 | { 7 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 8 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 9 | class XmlDataAnalyzer : DataAnalyzerBase 10 | { 11 | public override void ExportResult(object result) 12 | { 13 | // Durumun XML'e dönüştürülmesi işlemleri yer alacaktır. 14 | Console.WriteLine("XML exported."); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /flyweight/java/BlueBox.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | // Flyweight (Box) şablonunu uygulayan sınıftır. 4 | // UML diyagramındaki ConcreteFlyweight sınıfına denk gelmektedir. 5 | class BlueBox extends Box { 6 | public BlueBox(int width, int height) { 7 | this.width = width; 8 | this.height = height; 9 | this.boxColor = BoxColor.BLUE; 10 | } 11 | 12 | @Override 13 | public void draw(int locationX, int locationY) { 14 | String message = String.format("%s box drawn. %d,%d", boxColor, locationX, locationY); 15 | System.out.println(message); 16 | } 17 | } -------------------------------------------------------------------------------- /state/java/InitializeState.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | class InitializeState extends VendingMachineState { 7 | // Başlangıç durumu ayarları yapıldıktan sonra WaitingState (hazır) durumuna geçer. 8 | @Override 9 | public void handleState(VendingMachine context) { 10 | System.out.println("InitializeState: Ön hazırlıklar yapılıyor."); 11 | 12 | context.setState(new WaitingState()); 13 | } 14 | } -------------------------------------------------------------------------------- /state/java/WaitingState.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | class WaitingState extends VendingMachineState { 7 | // WaitingState durumunda herhangi bir yeni duruma geçmeye gerek yok. 8 | // Buradan sonraki durum gelen istek ile aksiyon alacaktır. 9 | @Override 10 | public void handleState(VendingMachine context) { 11 | System.out.println("WaitingState: Otomata herhangi bir aksiyon bekliyor."); 12 | } 13 | } -------------------------------------------------------------------------------- /template-method/c-sharp/HtmlDataAnalyzer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace TemplateMethod 6 | { 7 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 8 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 9 | class HtmlDataAnalyzer : DataAnalyzerBase 10 | { 11 | public override void ExportResult(object result) 12 | { 13 | // Durumun HTML'e dönüştürülmesi işlemleri yer alacaktır. 14 | Console.WriteLine("HTML exported."); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /state/java/App.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | VendingMachine vendingMachine = new VendingMachine(); 6 | vendingMachine.requestProduct("COVID-19 MASKE", 2); 7 | 8 | // output: 9 | // InitializeState: Ön hazırlıklar yapılıyor. 10 | // WaitingState: Otomata herhangi bir aksiyon bekliyor. 11 | // PreparingState: İstenilen ürün hazırlanıyor.Lütfen bekleyiniz 12 | // DeliveryState: Ürün teslim ediliyor. 13 | // WaitingState: Otomata herhangi bir aksiyon bekliyor. 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /command/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Command 2 | 3 | fun main(args: Array) { 4 | val stockManager = StockManager("iPhone", 200) 5 | 6 | val buyStock = BuyStock(stockManager) 7 | val sellStock = SellStock(stockManager) 8 | 9 | val stockController = StockController() 10 | 11 | stockController.takeOrder(buyStock) 12 | stockController.takeOrder(sellStock) 13 | stockController.takeOrder(sellStock) 14 | 15 | 16 | stockController.placeOrders() 17 | // output: 18 | // Stock: iPhone, 200 bought! 19 | // Stock: iPhone, 200 sold! 20 | // Stock: iPhone, 200 sold! 21 | } 22 | -------------------------------------------------------------------------------- /composite/c-sharp/Product.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Composite 6 | { 7 | // Somut yapımızdır. 8 | // UML diyagramındaki Leaf kısmına denk gelmektedir. 9 | // Hiyerarşinin en alt tabakasını temsil etmektedir. 10 | class Product : ICatalogComponent 11 | { 12 | private string _name; 13 | 14 | public Product(string name) 15 | { 16 | _name = name; 17 | } 18 | 19 | public void DrawHierarchy() 20 | { 21 | Console.WriteLine(_name); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /flyweight/java/BlackBox.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | // Flyweight (Box) şablonunu uygulayan sınıftır. 4 | // UML diyagramındaki ConcreteFlyweight sınıfına denk gelmektedir. 5 | class BlackBox extends Box { 6 | public BlackBox(int width, int height) { 7 | this.width = width; 8 | this.height = height; 9 | this.boxColor = BoxColor.BLACK; 10 | } 11 | 12 | @Override 13 | public void draw(int locationX, int locationY) { 14 | String message = String.format("%s box drawn. %d,%d", boxColor, locationX, locationY); 15 | System.out.println(message); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /proxy/c-sharp/MaskOrder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Proxy 6 | { 7 | // Maske siparişininin oluşturulduğu sınıf. 8 | // İstemcinin direkt erişmesini istemediğimiz alandır. 9 | // UML diyagramındaki ConcreteService sınıfına denk gelmektedir. 10 | class MaskOrder : IOrderableMask 11 | { 12 | public void CreateOrder(Person person) 13 | { 14 | // Burada siparişin oluşturulma işlemleri yer alacaktır. 15 | Console.WriteLine($"Order created to {person.Address}."); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /strategy/java/App.java: -------------------------------------------------------------------------------- 1 | package Strategy; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | ShoppingCart shoppingCart = new ShoppingCart(); 6 | shoppingCart.addItem(new Item("894651364", 80)); 7 | shoppingCart.addItem(new Item("654798243", 20)); 8 | 9 | shoppingCart.setPaymentMethod(new PaypalPayment("yusufyilmazfr@gmail.com", "examplepassword")); 10 | shoppingCart.Pay(); 11 | 12 | shoppingCart.setPaymentMethod(new CreditCartPayment("Julia Rodriguez", "4373093149845972", "199", "12/2024")); 13 | shoppingCart.Pay(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chain-of-responsibility/kotlin/CustomHandler.kt: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility 2 | 3 | // Herhangi bir tipteki dosyayı dönüştüren sınıf. 4 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 5 | internal class CustomHandler : BaseHandler() { 6 | override fun handleRequest(image: Image) { 7 | if (image.extension === "OtherExtension") { 8 | println("OtherExtension to PNG") 9 | // Herhangi bir tipteki dosyanın işlemine ait dönüştürme kodları işlemleri. 10 | } 11 | // Burada else ifadesi bulunmamaktadır bu da zincirin son halkası olduğu anlamına gelir. 12 | } 13 | } -------------------------------------------------------------------------------- /strategy/c-sharp/Item.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Strategy 6 | { 7 | // Sepette bulunan ürünleri temsil eden sınıf. 8 | // Ürün kodu ve fiyat bilgileri temel olarak yeterlidir. 9 | class Item 10 | { 11 | private string _upcCode; 12 | private int _price; 13 | 14 | public Item(string upcCode, int price) 15 | { 16 | _upcCode = upcCode; 17 | _price = price; 18 | } 19 | 20 | public int GetPrice() 21 | { 22 | return _price; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /strategy/java/PaypalPayment.java: -------------------------------------------------------------------------------- 1 | package Strategy; 2 | 3 | // UMl diyagramındaki ConcreteStrategy sınıfına denk gelmektedir. 4 | // UML diyagramındaki Strategy arayüzüne denk gelen arayüzü uyguluyor. 5 | class PaypalPayment implements IPayment { 6 | private String email; 7 | private String password; 8 | 9 | public PaypalPayment(String email, String password) { 10 | this.email = email; 11 | this.password = password; 12 | } 13 | 14 | public void pay(int amount) { 15 | // Kredi kartı ödeme işlemlerinin gerçekleştiği yer. 16 | System.out.println("Paid by Paypal."); 17 | } 18 | } -------------------------------------------------------------------------------- /chain-of-responsibility/kotlin/BaseHandler.kt: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility 2 | 3 | // Zincirin bir sonraki halkasının tanımlandığı sınıftır. 4 | // İşlemi gerçekleştirecek olan metot tanımı bulunur. 5 | // UML diyagramındaki BaseHandler sınıfına denk gelmektedir. 6 | public abstract class BaseHandler { 7 | private var nextHandler: BaseHandler? = null 8 | 9 | fun setNextHandler(nextHandler: BaseHandler) { 10 | this.nextHandler = nextHandler 11 | } 12 | 13 | fun getNextHandler(): BaseHandler? { 14 | return this.nextHandler 15 | } 16 | 17 | abstract fun handleRequest(image: Image) 18 | } 19 | -------------------------------------------------------------------------------- /facade/c-sharp/CreditCardFacade.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Facade 6 | { 7 | class CreditCardFacade 8 | { 9 | public void CreateCreditCart(Customer customer) 10 | { 11 | CreditCardManager creditCardManager = new CreditCardManager(); ; 12 | BlackListService blackListService = new BlackListService(); 13 | 14 | if (blackListService.CheckEmployeeIsTheBlackList(customer)) 15 | { 16 | creditCardManager.CreateCreditCart(customer); 17 | } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /adapter/kotlin/CustomSerializerAdapter.kt: -------------------------------------------------------------------------------- 1 | package Adapter 2 | 3 | // Daha sonradan dahil edilen yapının sisteme adepte edilmesi işlemi. 4 | // Sistemin kullandığı arayüzü uygular. 5 | // Bu sayede IJsonSerializer'i uygulayan bir sınıf örneği istendiğinde 6 | // bu sınıf örneğini vererek mevcut koda dokunmadan sistemin devam etmesi 7 | // sağlaır. 8 | // UML diyagramındaki Adapter'a denk gelmektedir. 9 | internal class CustomSerializerAdapter : IJsonSerializer { 10 | override fun serializeObject(obj: Any): String { 11 | val customSerializer = CustomSerializer() 12 | return customSerializer.serialize(obj) 13 | } 14 | } -------------------------------------------------------------------------------- /chain-of-responsibility/kotlin/JPGHandler.kt: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility 2 | 3 | 4 | // JPG dosyalarını dönüştüren sınıf. 5 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 6 | public class JPGHandler : BaseHandler() { 7 | 8 | override fun handleRequest(image: Image) { 9 | if (image.extension === "JPG") { 10 | println("JPG to PNG") 11 | // JPG işlemine ait dönüştürme kodları işlemleri. 12 | } else { 13 | // Bu sınıfa ait bir işlem değilse zincirin bir sonraki halkasına aktarılır. 14 | getNextHandler()?.handleRequest(image) 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /chain-of-responsibility/kotlin/JPEGHandler.kt: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility 2 | 3 | // JPEG dosyalarını dönüştüren sınıf. 4 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 5 | internal class JPEGHandler : BaseHandler() { 6 | 7 | override fun handleRequest(image: Image) { 8 | if (image.extension === "JPEG") { 9 | println("JPEG to PNG") 10 | // JPEG işlemine ait dönüştürme kodları işlemleri. 11 | } else { 12 | // Bu sınıfa ait bir işlem değilse zincirin bir sonraki halkasına aktarılır. 13 | getNextHandler()?.handleRequest(image) 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /flyweight/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Flyweight 2 | 3 | fun main(args: Array) { 4 | val boxFactory = BoxFactory() 5 | 6 | val blackBox1 = boxFactory.get(BoxColor.BLACK) 7 | val blackBox2 = boxFactory.get(BoxColor.BLACK) 8 | val blackBox3 = boxFactory.get(BoxColor.BLACK) 9 | val blueBox1 = boxFactory.get(BoxColor.BLUE) 10 | 11 | blackBox1!!.draw(97, 37) 12 | blackBox2!!.draw(34, 78) 13 | blackBox3!!.draw(74, 193) 14 | blueBox1!!.draw(1, 4) 15 | // output: 16 | // Black box drawn. 97,37 17 | // Black box drawn. 34,78 18 | // Black box drawn. 74,193 19 | // Blue box drawn. 1,4 20 | } 21 | -------------------------------------------------------------------------------- /adapter/java/CustomSerializerAdapter.java: -------------------------------------------------------------------------------- 1 | package Adapter; 2 | 3 | // Daha sonradan dahil edilen yapının sisteme adepte edilmesi işlemi. 4 | // Sistemin kullandığı arayüzü uygular. 5 | // Bu sayede IJsonSerializer'i uygulayan bir sınıf örneği istendiğinde 6 | // bu sınıf örneğini vererek mevcut koda dokunmadan sistemin devam etmesi 7 | // sağlaır. 8 | // UML diyagramındaki Adapter'a denk gelmektedir. 9 | class CustomSerializerAdapter implements IJsonSerializer { 10 | public String serializeObject(Object obj) { 11 | CustomSerializer customSerializer = new CustomSerializer(); 12 | return customSerializer.serialize(obj); 13 | } 14 | } -------------------------------------------------------------------------------- /chain-of-responsibility/java/CustomHandler.java: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility; 2 | 3 | // Herhangi bir tipteki dosyayı dönüştüren sınıf. 4 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 5 | class CustomHandler extends BaseHandler { 6 | @Override 7 | public void handleRequest(Image image) { 8 | if (image.extension == "OtherExtension") { 9 | System.out.println("OtherExtension to PNG"); 10 | // Herhangi bir tipteki dosyanın işlemine ait dönüştürme kodları işlemleri. 11 | } 12 | // Burada else ifadesi bulunmamaktadır bu da zincirin son halkası olduğu anlamına gelir. 13 | } 14 | } -------------------------------------------------------------------------------- /state/kotlin/DeliveryState.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | internal class DeliveryState : VendingMachineState() { 7 | // DeliveryState durumunda otomatadan ürünün teslim işlemleri yapılmaktadır. 8 | // Ürün verildikten sonra başlangıç, bekleme durumuna geçmektedir. (WaitingState) 9 | override fun handleState(context: VendingMachine) { 10 | println("DeliveryState: Ürün teslim ediliyor.") 11 | 12 | context.setState(WaitingState()) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /chain-of-responsibility/java/JPGHandler.java: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility; 2 | 3 | 4 | // JPG dosyalarını dönüştüren sınıf. 5 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 6 | class JPGHandler extends BaseHandler { 7 | 8 | @Override 9 | public void handleRequest(Image image) { 10 | if (image.extension == "JPG") { 11 | System.out.println("JPG to PNG"); 12 | // JPG işlemine ait dönüştürme kodları işlemleri. 13 | } else { 14 | // Bu sınıfa ait bir işlem değilse zincirin bir sonraki halkasına aktarılır. 15 | nextHandler.handleRequest(image); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /abstract-factory/java/CustomOperation.java: -------------------------------------------------------------------------------- 1 | package AbstractFactory; 2 | 3 | public class CustomOperation { 4 | IDatabaseFactory databaseFactory; 5 | Connection connection; 6 | Command command; 7 | 8 | public CustomOperation(IDatabaseFactory databaseFactory) { 9 | this.databaseFactory = databaseFactory; 10 | this.command = databaseFactory.createCommand(); 11 | this.connection = databaseFactory.createConnection(); 12 | } 13 | 14 | public void removeById(int id) { 15 | connection.openConnection(); 16 | command.executeCommand("DELETE ..."); 17 | connection.closeConnection(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chain-of-responsibility/java/JPEGHandler.java: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility; 2 | 3 | // JPEG dosyalarını dönüştüren sınıf. 4 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 5 | class JPEGHandler extends BaseHandler { 6 | 7 | @Override 8 | public void handleRequest(Image image) { 9 | if (image.extension == "JPEG") { 10 | System.out.println("JPEG to PNG"); 11 | // JPEG işlemine ait dönüştürme kodları işlemleri. 12 | } else { 13 | // Bu sınıfa ait bir işlem değilse zincirin bir sonraki halkasına aktarılır. 14 | nextHandler.handleRequest(image); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /decorator/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Decorator 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | IDataSource dataSource = new FileDataSource("data.sql"); 10 | 11 | IDataSource compressedDataSource = new ComporessionDecorator(dataSource); 12 | 13 | compressedDataSource.ReadData(); 14 | compressedDataSource.WriteData(new object()); 15 | 16 | // output: 17 | // data.sql readed. 18 | // Data compressed. 19 | // Compressed data was written to data.sql. 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /state/kotlin/PreparingState.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | internal class PreparingState : VendingMachineState() { 7 | // PreparingState durumunda ürün hazırlanması gibi işlemler yapılmaktadır. 8 | // Buradan sonraki durum ise ürünün verilmesi durumudur. (DeliveryState) 9 | override fun handleState(context: VendingMachine) { 10 | println("PreparingState: İstenilen ürün hazırlanıyor. Lütfen bekleyiniz") 11 | 12 | context.setState(DeliveryState()) 13 | } 14 | } -------------------------------------------------------------------------------- /chain-of-responsibility/c-sharp/BaseHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChainOfResponsibility 6 | { 7 | // Zincirin bir sonraki halkasının tanımlandığı sınıftır. 8 | // İşlemi gerçekleştirecek olan metot tanımı bulunur. 9 | // UML diyagramındaki BaseHandler sınıfına denk gelmektedir. 10 | abstract class BaseHandler 11 | { 12 | protected BaseHandler _nextHandler; 13 | public void SetNextHandler(BaseHandler nextHandler) 14 | { 15 | _nextHandler = nextHandler; 16 | } 17 | 18 | public abstract void HandleRequest(Image image); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/MySQLConnection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | class MySQLConnection : Connection 8 | { 9 | public override bool OpenConnection() 10 | { 11 | // MySQL veri tabanı bağlantısının açılması için 12 | // Gerekli operasyonel işlemler... 13 | return true; 14 | } 15 | public override bool CloseConnection() 16 | { 17 | // MySQL veri tabanı bağlantısının kapatılması için 18 | // Gerekli operasyonel işlemler... 19 | return true; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /bridge/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Bridge 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | IMessageSender textMessageSender = new TextMessageSender(); 10 | Message textMessage = new TextMessage(textMessageSender); 11 | textMessage.Send(); // output: TextMessageSender: Sending text message... 12 | 13 | IMessageSender emailMessageSender = new EmailMessageSender(); 14 | Message emailMessage = new TextMessage(emailMessageSender); 15 | emailMessage.Send(); // output: EmailMessageSender: Sending email message... 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /decorator/kotlin/BaseDataSourceDecorator.kt: -------------------------------------------------------------------------------- 1 | package Decorator 2 | 3 | // UML diyagramındaki Component (IDataSource) arayüzünü uygular. 4 | // Constructor sayesinde özellikleri değiştirilmesi istenen nesnenin referansı tutulur. 5 | // Bu sınıftan türeyen sınıfların uygulamasını, değiştirilmesini istediğimiz metotları abstract anahtar kelimesi ile işaretledik. 6 | // UML diyagramındaki BaseDecorator yapısına denk gelmektedir. 7 | internal abstract class BaseDataSourceDecorator(protected var dataSource: IDataSource) : IDataSource { 8 | 9 | abstract override val fileName: String 10 | 11 | abstract override fun readData() 12 | 13 | abstract override fun writeData(data: Any) 14 | } -------------------------------------------------------------------------------- /state/java/DeliveryState.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | class DeliveryState extends VendingMachineState { 7 | // DeliveryState durumunda otomatadan ürünün teslim işlemleri yapılmaktadır. 8 | // Ürün verildikten sonra başlangıç, bekleme durumuna geçmektedir. (WaitingState) 9 | @Override 10 | public void handleState(VendingMachine context) { 11 | System.out.println("DeliveryState: Ürün teslim ediliyor."); 12 | 13 | context.setState(new WaitingState()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory/c-sharp/OracleConnection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | class OracleConnection : Connection 8 | { 9 | public override bool OpenConnection() 10 | { 11 | // Oracle veri tabanı bağlantısının açılması için 12 | // Gerekli operasyonel işlemler... 13 | return true; 14 | } 15 | public override bool CloseConnection() 16 | { 17 | // Oracle veri tabanı bağlantısının kapatılması için 18 | // Gerekli operasyonel işlemler... 19 | return true; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /command/c-sharp/BuyStock.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Command 6 | { 7 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 8 | // Command (IOrderCommand) arayüzünü uygular. 9 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 10 | class BuyStock : IOrderCommand 11 | { 12 | private StockManager _stockManager; 13 | 14 | public BuyStock(StockManager stockManager) 15 | { 16 | _stockManager = stockManager; 17 | } 18 | 19 | public void Execute() 20 | { 21 | _stockManager.Buy(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /command/c-sharp/SellStock.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Command 6 | { 7 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 8 | // Command (IOrderCommand) arayüzünü uygular. 9 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 10 | class SellStock : IOrderCommand 11 | { 12 | private StockManager _stockManager; 13 | 14 | public SellStock(StockManager stockManager) 15 | { 16 | _stockManager = stockManager; 17 | } 18 | 19 | public void Execute() 20 | { 21 | _stockManager.Sell(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /observer/c-sharp/Samsung.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Observer 6 | { 7 | // Observer sınıfından türer. 8 | // UML diyagramındaki ConcreteObservable yapısına denk gelmektedir. 9 | class Samsung : ObservableProduct 10 | { 11 | // Ürün fiyatı değiştikten sonra Observer örneklerine bildirim gönderilir. 12 | public void ChangePrice() 13 | { 14 | // Ürün fiyatlarının güncellenmesi vs. 15 | 16 | this.message.productName = "Samsung"; 17 | this.message.message = "Samsung's price updated."; 18 | this.NotifyObserver(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /prototype/c-sharp/Employee.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Prototype 6 | { 7 | // Employee sınıfına klonlama yeteneği kazandırmak için tanımladığımız arayüzü uyguladık. 8 | class Employee : IClonablePrototype 9 | { 10 | string firstName; 11 | string lastName; 12 | 13 | public Employee(string firstName, string lastName) 14 | { 15 | this.firstName = firstName; 16 | this.lastName = lastName; 17 | } 18 | 19 | public Employee Clone() 20 | { 21 | return base.MemberwiseClone() as Employee; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /state/java/PreparingState.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | // Farklı durumların meydana geldiği sınıf. 4 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 5 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 6 | class PreparingState extends VendingMachineState { 7 | // PreparingState durumunda ürün hazırlanması gibi işlemler yapılmaktadır. 8 | // Buradan sonraki durum ise ürünün verilmesi durumudur. (DeliveryState) 9 | @Override 10 | public void handleState(VendingMachine context) { 11 | System.out.println("PreparingState: İstenilen ürün hazırlanıyor. Lütfen bekleyiniz"); 12 | 13 | context.setState(new DeliveryState()); 14 | } 15 | } -------------------------------------------------------------------------------- /template-method/java/App.java: -------------------------------------------------------------------------------- 1 | package TemplateMethod; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | DataAnalyzerBase dataAnalyzer; 6 | 7 | dataAnalyzer = new XmlDataAnalyzer(); 8 | dataAnalyzer.analyzeDataOfLastWeek(); 9 | // output: 10 | // Method worked: GetDataOfLastWeek 11 | // Method worked: AnalyzeData 12 | // XML exported. 13 | 14 | dataAnalyzer = new HtmlDataAnalyzer(); 15 | dataAnalyzer.analyzeDataOfLastWeek(); 16 | 17 | // output: 18 | // Method worked: GetDataOfLastWeek 19 | // Method worked: AnalyzeData 20 | // HTML exported. 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /facade/c-sharp/BlackListService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Facade 6 | { 7 | // Kara liste ile ilgili işlemlerin yapıldığı sınıf 8 | class BlackListService 9 | { 10 | public bool CheckEmployeeIsTheBlackList(Customer customer) 11 | { 12 | // Müşterinin kara listede olup olmadığının kontrolünün yapıldığı yer. 13 | // Kara listede ise false, değilse true dönmekte olduğunu var sayalım. 14 | // Burada veri tabanı kodları ya da harici bir servis ile iletişim sağlanabilir. 15 | // Default olarak true döndürdük. 16 | return true; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /state/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace State 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | VendingMachine vendingMachine = new VendingMachine(); 10 | vendingMachine.RequestProduct("COVID-19 MASKE", 2); 11 | 12 | // output: 13 | // InitializeState: Ön hazırlıklar yapılıyor. 14 | // WaitingState: Otomata herhangi bir aksiyon bekliyor. 15 | // PreparingState: İstenilen ürün hazırlanıyor.Lütfen bekleyiniz 16 | // DeliveryState: Ürün teslim ediliyor. 17 | // WaitingState: Otomata herhangi bir aksiyon bekliyor. 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /flyweight/c-sharp/BlueBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Flyweight 6 | { 7 | // Flyweight (Box) şablonunu uygulayan sınıftır. 8 | // UML diyagramındaki ConcreteFlyweight sınıfına denk gelmektedir. 9 | class BlueBox : Box 10 | { 11 | public BlueBox(int width, int height) 12 | { 13 | this.width = width; 14 | this.height = height; 15 | this.boxColor = BoxColor.Blue; 16 | } 17 | 18 | public override void Draw(int locationX, int locationY) 19 | { 20 | Console.WriteLine($"{boxColor} box drawn. {locationX},{locationY}"); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /decorator/java/FileDataSource.java: -------------------------------------------------------------------------------- 1 | package Decorator; 2 | 3 | // Temel işlemlerin tanımlandığı IDataSource arayüzünü uygulayan sınıftır. 4 | // UML diyagramındaki ConcreteComponent sınıfına denk gelmektedir. 5 | class FileDataSource implements IDataSource { 6 | private String _fileName; 7 | 8 | public FileDataSource(String fileName) { 9 | _fileName = fileName; 10 | } 11 | 12 | public String getFileName() { 13 | return _fileName; 14 | } 15 | 16 | public void readData() { 17 | System.out.println(_fileName + " readed."); 18 | } 19 | 20 | public void writeData(Object data) { 21 | System.out.println("data was written to " + _fileName); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /flyweight/c-sharp/BlackBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Flyweight 6 | { 7 | // Flyweight (Box) şablonunu uygulayan sınıftır. 8 | // UML diyagramındaki ConcreteFlyweight sınıfına denk gelmektedir. 9 | class BlackBox : Box 10 | { 11 | public BlackBox(int width, int height) 12 | { 13 | this.width = width; 14 | this.height = height; 15 | this.boxColor = BoxColor.Black; 16 | } 17 | 18 | public override void Draw(int locationX, int locationY) 19 | { 20 | Console.WriteLine($"{boxColor} box drawn. {locationX},{locationY}"); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chain-of-responsibility/java/App.java: -------------------------------------------------------------------------------- 1 | package ChainOfResponsibility; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | Image image = new Image("tatil-fotografim", "JPG"); 6 | 7 | JPEGHandler jpegHandler = new JPEGHandler(); 8 | JPGHandler jpgHandler = new JPGHandler(); 9 | CustomHandler customHandler = new CustomHandler(); 10 | 11 | // Zincirlerin birbirleri ile bağlantısının yapıldığı yerdir. 12 | // JPEG bu işlemi gerçekleştiremezse JPG'e aktarır o da Custom'a aktarır. 13 | jpegHandler.setNextHandler(jpgHandler); 14 | jpgHandler.setNextHandler(customHandler); 15 | 16 | jpegHandler.handleRequest(image); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /memento/kotlin/TextUndoCareTaker.kt: -------------------------------------------------------------------------------- 1 | package Memento 2 | 3 | import java.util.Stack 4 | 5 | // Memento'ların referansının tutulduğu yerdir. 6 | // UML diyagramındaki CareTaker yapısına denk gelmektedir. 7 | internal class TextUndoCareTaker { 8 | private val _mementos: Stack 9 | 10 | // Çağrılma işlemi yapıldığında yığının en üstündeki Memento örneği silinir ve geriye döndürülür. 11 | // Ekleme işlemi yapıldığında yığının en üstüne Memento örneği eklenir. 12 | // Klasik Stack. 13 | 14 | var memento: TextMemento 15 | get() = _mementos.pop() 16 | set(memento) { 17 | _mementos.push(memento) 18 | } 19 | 20 | init { 21 | _mementos = Stack() 22 | } 23 | } -------------------------------------------------------------------------------- /command/java/StockManager.java: -------------------------------------------------------------------------------- 1 | package Command; 2 | 3 | // Komutları nesneler haline getirelecek olan sınıf. 4 | // UML diyagramındaki Receiver sınıfına denk gelmektedir. 5 | class StockManager { 6 | private String _name; 7 | private int _quantity; 8 | 9 | public StockManager(String name, int quantity) { 10 | _name = name; 11 | _quantity = quantity; 12 | } 13 | 14 | public void buy() { 15 | String message = String.format("Stock: %s, %s bought!", _name, _quantity); 16 | System.out.println(message); 17 | } 18 | 19 | public void sell() { 20 | String message = String.format("Stock: %s, %s sold!", _name, _quantity); 21 | System.out.println(message); 22 | } 23 | } -------------------------------------------------------------------------------- /command/kotlin/StockController.kt: -------------------------------------------------------------------------------- 1 | package Command 2 | 3 | import java.util.ArrayList 4 | 5 | // Command (IOrderCommand) arayüzünü uygulayan sınıf referansını tutar. 6 | // Metotun ne zaman çağrılacağını belirtir. 7 | // UML diyagramındaki Invoker sınıfına denk gelmektedir. 8 | internal class StockController { 9 | private val _orderCommands: MutableList 10 | 11 | init { 12 | _orderCommands = ArrayList() 13 | } 14 | 15 | fun takeOrder(command: IOrderCommand) { 16 | _orderCommands.add(command) 17 | } 18 | 19 | fun placeOrders() { 20 | for (command in _orderCommands) { 21 | command.execute() 22 | } 23 | 24 | _orderCommands.clear() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /visitor/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | fun main(args: Array) { 4 | val earth = Encyclopedia() 5 | 6 | earth.name = "Big Earth!" 7 | earth.author = "Jose S. Massey" 8 | earth.categoryName = "Encyclopedia" 9 | 10 | val daily = Magazine() 11 | 12 | daily.name = "Daily Magazine" 13 | daily.author = "Wayne D. Eakin" 14 | daily.categoryName = "Magazine" 15 | 16 | 17 | val xmlExportVisitor = XmlExportVisitor() 18 | val jsonExportVisitor = JsonExportVisitor() 19 | 20 | earth.accept(xmlExportVisitor) 21 | daily.accept(jsonExportVisitor) 22 | 23 | // output: 24 | // Big Earth!exported by XmlExportVisitor 25 | // Daily Magazine exported by JsonExportVisitor 26 | } 27 | -------------------------------------------------------------------------------- /state/c-sharp/InitializeState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace State 6 | { 7 | // Farklı durumların meydana geldiği sınıf. 8 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 9 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 10 | class InitializeState : VendingMachineState 11 | { 12 | // Başlangıç durumu ayarları yapıldıktan sonra WaitingState (hazır) durumuna geçer. 13 | public override void HandleState(VendingMachine context) 14 | { 15 | Console.WriteLine("InitializeState: Ön hazırlıklar yapılıyor."); 16 | 17 | context.SetState(new WaitingState()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /factory/java/NotifyFactory.java: -------------------------------------------------------------------------------- 1 | package Factory; 2 | 3 | public class NotifyFactory { 4 | public INotify CreateNotify(String notifyType) { 5 | if (notifyType == "SMS") { 6 | // Buradaki nesne oluşturma süreçleri bize kalmıştır. 7 | // Kullanıcıdan soyutlanmıştır. 8 | // Örnek olarak burası Singleton olarak da ayarlanabilirdi. 9 | return new SmsNotify(); 10 | } else if (notifyType == "MAIL") { 11 | // Buradaki nesne oluşturma süreçleri bize kalmıştır. 12 | // Kullanıcıdan soyutlanmıştır. 13 | // Örnek olarak burası Singleton olarak da ayarlanabilirdi. 14 | return new MailNotify(); 15 | } 16 | return null; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /state/c-sharp/WaitingState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace State 6 | { 7 | // Farklı durumların meydana geldiği sınıf. 8 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 9 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 10 | class WaitingState : VendingMachineState 11 | { 12 | // WaitingState durumunda herhangi bir yeni duruma geçmeye gerek yok. 13 | // Buradan sonraki durum gelen istek ile aksiyon alacaktır. 14 | public override void HandleState(VendingMachine context) 15 | { 16 | Console.WriteLine("WaitingState: Otomata herhangi bir aksiyon bekliyor."); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /strategy/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Strategy 5 | { 6 | class Program 7 | { 8 | static void Main(string[] args) 9 | { 10 | ShoppingCart shoppingCart = new ShoppingCart(); 11 | shoppingCart.AddItem(new Item("894651364", 80)); 12 | shoppingCart.AddItem(new Item("654798243", 20)); 13 | 14 | shoppingCart.SetPaymentMethod(new PaypalPayment("yusufyilmazfr@gmail.com", "examplepassword")); 15 | shoppingCart.Pay(); 16 | 17 | shoppingCart.SetPaymentMethod(new CreditCartPayment("Julia Rodriguez", "4373093149845972", "199", "12/2024")); 18 | shoppingCart.Pay(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /flyweight/java/App.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | BoxFactory boxFactory = new BoxFactory(); 6 | 7 | Box blackBox1 = boxFactory.get(BoxColor.BLACK); 8 | Box blackBox2 = boxFactory.get(BoxColor.BLACK); 9 | Box blackBox3 = boxFactory.get(BoxColor.BLACK); 10 | Box blueBox1 = boxFactory.get(BoxColor.BLUE); 11 | 12 | blackBox1.draw(97, 37); 13 | blackBox2.draw(34, 78); 14 | blackBox3.draw(74, 193); 15 | blueBox1.draw(1, 4); 16 | // output: 17 | // Black box drawn. 97,37 18 | // Black box drawn. 34,78 19 | // Black box drawn. 74,193 20 | // Blue box drawn. 1,4 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /command/java/App.java: -------------------------------------------------------------------------------- 1 | package Command; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | StockManager stockManager = new StockManager("iPhone", 200); 6 | 7 | BuyStock buyStock = new BuyStock(stockManager); 8 | SellStock sellStock = new SellStock(stockManager); 9 | 10 | StockController stockController = new StockController(); 11 | 12 | stockController.takeOrder(buyStock); 13 | stockController.takeOrder(sellStock); 14 | stockController.takeOrder(sellStock); 15 | 16 | 17 | stockController.placeOrders(); 18 | // output: 19 | // Stock: iPhone, 200 bought! 20 | // Stock: iPhone, 200 sold! 21 | // Stock: iPhone, 200 sold! 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /visitor/kotlin/XmlExportVisitor.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | // Visitor arayüzünü ve burada tanımlı olan metotları uygular. 4 | // Sonradan eklenmek istenen işlemler burada yer alır. 5 | // UML diyagramındaki ConcreteVisitor yapısına denk gelir. 6 | internal class XmlExportVisitor : IBookExportVisitor { 7 | 8 | override fun exportVisit(magazine: Magazine) { 9 | // Parametre olarak gelen örneğin XML'e çevrilmesi işlemleri yer alacaktır. 10 | println(magazine.name!! + " exported by XmlExportVisitor") 11 | } 12 | 13 | override fun exportVisit(encyclopedia: Encyclopedia) { 14 | // Parametre olarak gelen örneğin XML'e çevrilmesi işlemleri yer alacaktır. 15 | println(encyclopedia.name!! + " exported by XmlExportVisitor") 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /visitor/kotlin/JsonExportVisitor.kt: -------------------------------------------------------------------------------- 1 | package Visitor 2 | 3 | // Visitor arayüzünü ve burada tanımlı olan metotları uygular. 4 | // Sonradan eklenmek istenen işlemler burada yer alır. 5 | // UML diyagramındaki ConcreteVisitor yapısına denk gelir. 6 | internal class JsonExportVisitor : IBookExportVisitor { 7 | 8 | override fun exportVisit(magazine: Magazine) { 9 | // Parametre olarak gelen örneğin JSON'a çevrilmesi işlemleri yer alacaktır. 10 | println(magazine.name!! + " exported by JsonExportVisitor") 11 | } 12 | 13 | override fun exportVisit(encyclopedia: Encyclopedia) { 14 | // Parametre olarak gelen örneğin JSON'a çevrilmesi işlemleri yer alacaktır. 15 | println(encyclopedia.name!! + " exported by JsonExportVisitor") 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /visitor/java/XmlExportVisitor.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | // Visitor arayüzünü ve burada tanımlı olan metotları uygular. 4 | // Sonradan eklenmek istenen işlemler burada yer alır. 5 | // UML diyagramındaki ConcreteVisitor yapısına denk gelir. 6 | class XmlExportVisitor implements IBookExportVisitor { 7 | 8 | public void exportVisit(Magazine magazine) { 9 | // Parametre olarak gelen örneğin XML'e çevrilmesi işlemleri yer alacaktır. 10 | System.out.println(magazine.name + " exported by XmlExportVisitor"); 11 | } 12 | 13 | public void exportVisit(Encyclopedia encyclopedia) { 14 | // Parametre olarak gelen örneğin XML'e çevrilmesi işlemleri yer alacaktır. 15 | System.out.println(encyclopedia.name + " exported by XmlExportVisitor"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /mediator/kotlin/ChatRoomMediator.kt: -------------------------------------------------------------------------------- 1 | package Mediator 2 | 3 | import java.util.Dictionary 4 | import java.util.Hashtable 5 | 6 | // Mediator (IChatRoomMediator) arayüzünü uygular. 7 | // Colleague (User) nesneleri arasındaki iletişimi koordine eder. 8 | // UML diyagramındaki ConcreteMediator yapısına denk gelmektedir. 9 | internal class ChatRoomMediator : IChatRoomMediator { 10 | private val _userDictionary: Dictionary 11 | 12 | init { 13 | _userDictionary = Hashtable() 14 | } 15 | 16 | override fun addUserInRoom(user: User) { 17 | _userDictionary.put(user.id, user) 18 | } 19 | 20 | override fun sendMessage(message: String, userId: Int) { 21 | val user = _userDictionary.get(userId) 22 | user.receiveMessage(message) 23 | } 24 | } -------------------------------------------------------------------------------- /memento/java/TextUndoCareTaker.java: -------------------------------------------------------------------------------- 1 | package Memento; 2 | 3 | import java.util.Stack; 4 | 5 | // Memento'ların referansının tutulduğu yerdir. 6 | // UML diyagramındaki CareTaker yapısına denk gelmektedir. 7 | class TextUndoCareTaker { 8 | private Stack _mementos; 9 | 10 | public TextUndoCareTaker() { 11 | _mementos = new Stack(); 12 | } 13 | 14 | // Çağrılma işlemi yapıldığında yığının en üstündeki Memento örneği silinir ve geriye döndürülür. 15 | // Ekleme işlemi yapıldığında yığının en üstüne Memento örneği eklenir. 16 | // Klasik Stack. 17 | 18 | public void setMemento(TextMemento memento) { 19 | _mementos.push(memento); 20 | } 21 | 22 | public TextMemento getMemento() { 23 | return _mementos.pop(); 24 | } 25 | } -------------------------------------------------------------------------------- /strategy/c-sharp/PaypalPayment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Strategy 6 | { 7 | // UMl diyagramındaki ConcreteStrategy sınıfına denk gelmektedir. 8 | // UML diyagramındaki Strategy arayüzüne denk gelen arayüzü uyguluyor. 9 | class PaypalPayment : IPayment 10 | { 11 | private string _email; 12 | private string _password; 13 | 14 | public PaypalPayment(string email, string password) 15 | { 16 | _email = email; 17 | _password = password; 18 | } 19 | 20 | public void Pay(int amount) 21 | { 22 | // Kredi kartı ödeme işlemlerinin gerçekleştiği yer. 23 | Console.WriteLine("Paid by Paypal."); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /visitor/java/JsonExportVisitor.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | // Visitor arayüzünü ve burada tanımlı olan metotları uygular. 4 | // Sonradan eklenmek istenen işlemler burada yer alır. 5 | // UML diyagramındaki ConcreteVisitor yapısına denk gelir. 6 | class JsonExportVisitor implements IBookExportVisitor { 7 | 8 | public void exportVisit(Magazine magazine) { 9 | // Parametre olarak gelen örneğin JSON'a çevrilmesi işlemleri yer alacaktır. 10 | System.out.println(magazine.name + " exported by JsonExportVisitor"); 11 | } 12 | 13 | public void exportVisit(Encyclopedia encyclopedia) { 14 | // Parametre olarak gelen örneğin JSON'a çevrilmesi işlemleri yer alacaktır. 15 | System.out.println(encyclopedia.name + " exported by JsonExportVisitor"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /command/java/StockController.java: -------------------------------------------------------------------------------- 1 | package Command; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | // Command (IOrderCommand) arayüzünü uygulayan sınıf referansını tutar. 7 | // Metotun ne zaman çağrılacağını belirtir. 8 | // UML diyagramındaki Invoker sınıfına denk gelmektedir. 9 | class StockController { 10 | private List _orderCommands; 11 | 12 | public StockController() { 13 | _orderCommands = new ArrayList<>(); 14 | } 15 | 16 | public void takeOrder(IOrderCommand command) { 17 | _orderCommands.add(command); 18 | } 19 | 20 | public void placeOrders() { 21 | for (IOrderCommand command : _orderCommands) { 22 | command.execute(); 23 | } 24 | 25 | _orderCommands.clear(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /singleton/c-sharp/Database.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Singleton 6 | { 7 | public class Database 8 | { 9 | private static object lockObject = new Object(); 10 | private static Database database; 11 | 12 | private Database() 13 | { 14 | 15 | } 16 | 17 | public static Database GetInstance() 18 | { 19 | if (database == null) 20 | { 21 | lock (lockObject) 22 | { 23 | if (database == null) 24 | { 25 | database = new Database(); 26 | } 27 | } 28 | } 29 | return database; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /strategy/java/CreditCartPayment.java: -------------------------------------------------------------------------------- 1 | package Strategy; 2 | 3 | // UMl diyagramındaki ConcreteStrategy sınıfına denk gelmektedir. 4 | // UML diyagramındaki Strategy arayüzüne denk gelen arayüzü uyguluyor. 5 | class CreditCartPayment implements IPayment { 6 | private String name; 7 | private String cardNumber; 8 | private String cvv; 9 | private String dateOfExpiry; 10 | 11 | public CreditCartPayment(String name, String ccNum, String cvv, String expiryDate) { 12 | this.name = name; 13 | this.cardNumber = ccNum; 14 | this.cvv = cvv; 15 | this.dateOfExpiry = expiryDate; 16 | } 17 | 18 | public void pay(int amount) { 19 | // Kredi kartı ödeme işlemlerinin gerçekleştiği yer. 20 | System.out.println("Paid by credit cart."); 21 | } 22 | } -------------------------------------------------------------------------------- /adapter/c-sharp/CustomSerializerAdapter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Adapter 6 | { 7 | // Daha sonradan dahil edilen yapının sisteme adepte edilmesi işlemi. 8 | // Sistemin kullandığı arayüzü uygular. 9 | // Bu sayede IJsonSerializer'i uygulayan bir sınıf örneği istendiğinde 10 | // bu sınıf örneğini vererek mevcut koda dokunmadan sistemin devam etmesi 11 | // sağlaır. 12 | // UML diyagramındaki Adapter'a denk gelmektedir. 13 | class CustomSerializerAdapter : IJsonSerializer 14 | { 15 | public string SerializeObject(object obj) 16 | { 17 | CustomSerializer customSerializer = new CustomSerializer(); 18 | return customSerializer.Serialize(obj); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /template-method/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace TemplateMethod 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | DataAnalyzerBase dataAnalyzer; 10 | 11 | dataAnalyzer = new XmlDataAnalyzer(); 12 | dataAnalyzer.AnalyzeDataOfLastWeek(); 13 | // output: 14 | // Method worked: GetDataOfLastWeek 15 | // Method worked: AnalyzeData 16 | // XML exported. 17 | 18 | dataAnalyzer = new HtmlDataAnalyzer(); 19 | dataAnalyzer.AnalyzeDataOfLastWeek(); 20 | 21 | // output: 22 | // Method worked: GetDataOfLastWeek 23 | // Method worked: AnalyzeData 24 | // HTML exported. 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /chain-of-responsibility/c-sharp/CustomHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChainOfResponsibility 6 | { 7 | // Herhangi bir tipteki dosyayı dönüştüren sınıf. 8 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 9 | class CustomHandler : BaseHandler 10 | { 11 | public override void HandleRequest(Image image) 12 | { 13 | if (image.extension == "OtherExtension") 14 | { 15 | Console.WriteLine("OtherExtension to PNG"); 16 | // Herhangi bir tipteki dosyanın işlemine ait dönüştürme kodları işlemleri. 17 | } 18 | // Burada else ifadesi bulunmamaktadır bu da zincirin son halkası olduğu anlamına gelir. 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /decorator/java/BaseDataSourceDecorator.java: -------------------------------------------------------------------------------- 1 | package Decorator; 2 | 3 | // UML diyagramındaki Component (IDataSource) arayüzünü uygular. 4 | // Constructor sayesinde özellikleri değiştirilmesi istenen nesnenin referansı tutulur. 5 | // Bu sınıftan türeyen sınıfların uygulamasını, değiştirilmesini istediğimiz metotları abstract anahtar kelimesi ile işaretledik. 6 | // UML diyagramındaki BaseDecorator yapısına denk gelmektedir. 7 | abstract class BaseDataSourceDecorator implements IDataSource { 8 | protected IDataSource dataSource; 9 | 10 | public BaseDataSourceDecorator(IDataSource dataSource) { 11 | this.dataSource = dataSource; 12 | } 13 | 14 | public abstract String getFileName(); 15 | 16 | public abstract void readData(); 17 | 18 | public abstract void writeData(Object data); 19 | } -------------------------------------------------------------------------------- /iterator/kotlin/EmployeeIterator.kt: -------------------------------------------------------------------------------- 1 | package Iterator 2 | 3 | // Iterator arayüzünü ve koleksiyon üzerinde dolaşmak için gerekli metotları uygular. 4 | // Veriler üzerinde dolanma işlemleri burada gerçekleştirilecektir. 5 | // ConcreteAggregate (EmployeeListAggregate) sınıfı ile birlikte çalışır 6 | internal class EmployeeIterator(private val _employeeListAggregate: EmployeeListAggregate) : IIterator { 7 | private var _currentIndex: Int = 0 8 | 9 | override val currentItem: Employee 10 | get() = _employeeListAggregate.get(_currentIndex++) 11 | 12 | init { 13 | _currentIndex = 0 14 | } 15 | 16 | override fun hasNext(): Boolean? { 17 | return if (_employeeListAggregate.count() > _currentIndex) { 18 | true 19 | } else false 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /composite/kotlin/ProductCatalog.kt: -------------------------------------------------------------------------------- 1 | package Composite 2 | 3 | import java.util.ArrayList 4 | 5 | // Somut yapımızdır. 6 | // UML diyagramındaki Composite kısmına denk gelmektedir. 7 | // Component (ICatalogComponent) listesi tutmaktadır. 8 | class ProductCatalog(private val _name: String) : ICatalogComponent { 9 | 10 | private val _components: ArrayList = ArrayList() 11 | 12 | fun add(catalogComponent: ICatalogComponent) { 13 | _components.add(catalogComponent) 14 | } 15 | 16 | fun remove(catalogComponent: ICatalogComponent) { 17 | _components.remove(catalogComponent) 18 | } 19 | 20 | override fun drawHierarchy() { 21 | println(_name) 22 | for (component in _components) { 23 | component.drawHierarchy() 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /state/kotlin/VendingMachine.kt: -------------------------------------------------------------------------------- 1 | package State 2 | 3 | // Durumu izlenecek olan sınıftır. 4 | // UML diyagramındaki Context yapısına denk gelmektedir. 5 | class VendingMachine { 6 | private var _state: VendingMachineState? = null 7 | 8 | // Otomata örneği oluştuğu zaman başlangıç durumuna geçiyor. 9 | init { 10 | setState(InitializeState()) 11 | } 12 | 13 | fun setState(state: VendingMachineState) { 14 | _state = state 15 | _state!!.handleState(this) 16 | } 17 | 18 | fun requestProduct(productName: String, price: Double) { 19 | // Burada ürünlere ait iş kodları olacaktır. 20 | // Ürün kontrolü, fiyatlandırma gibi kontroller. 21 | // Ürün ve fiyat olarak bir problemin olmadığı var sayılsın. 22 | 23 | setState(PreparingState()) 24 | } 25 | } -------------------------------------------------------------------------------- /chain-of-responsibility/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace ChainOfResponsibility 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | Image image = new Image("tatil-fotografim", "JPG"); 10 | 11 | JPEGHandler jpegHandler = new JPEGHandler(); 12 | JPGHandler jpgHandler = new JPGHandler(); 13 | CustomHandler customHandler = new CustomHandler(); 14 | 15 | // Zincirlerin birbirleri ile bağlantısının yapıldığı yerdir. 16 | // JPEG bu işlemi gerçekleştiremezse JPG'e aktarır o da Custom'a aktarır. 17 | jpegHandler.SetNextHandler(jpgHandler); 18 | jpgHandler.SetNextHandler(customHandler); 19 | 20 | jpegHandler.HandleRequest(image); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mediator/java/ChatRoomMediator.java: -------------------------------------------------------------------------------- 1 | package Mediator; 2 | 3 | import java.util.Dictionary; 4 | import java.util.Hashtable; 5 | 6 | // Mediator (IChatRoomMediator) arayüzünü uygular. 7 | // Colleague (User) nesneleri arasındaki iletişimi koordine eder. 8 | // UML diyagramındaki ConcreteMediator yapısına denk gelmektedir. 9 | class ChatRoomMediator implements IChatRoomMediator { 10 | private Dictionary _userDictionary; 11 | 12 | public ChatRoomMediator() { 13 | _userDictionary = new Hashtable<>(); 14 | } 15 | 16 | public void addUserInRoom(User user) { 17 | _userDictionary.put(user.id, user); 18 | } 19 | 20 | public void sendMessage(String message, int userId) { 21 | User user = _userDictionary.get(userId); 22 | user.receiveMessage(message); 23 | } 24 | } -------------------------------------------------------------------------------- /state/c-sharp/DeliveryState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace State 6 | { 7 | // Farklı durumların meydana geldiği sınıf. 8 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 9 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 10 | class DeliveryState : VendingMachineState 11 | { 12 | // DeliveryState durumunda otomatadan ürünün teslim işlemleri yapılmaktadır. 13 | // Ürün verildikten sonra başlangıç, bekleme durumuna geçmektedir. (WaitingState) 14 | public override void HandleState(VendingMachine context) 15 | { 16 | Console.WriteLine("DeliveryState: Ürün teslim ediliyor."); 17 | 18 | context.SetState(new WaitingState()); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /command/c-sharp/StockManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Command 6 | { 7 | // Komutları nesneler haline getirelecek olan sınıf. 8 | // UML diyagramındaki Receiver sınıfına denk gelmektedir. 9 | class StockManager 10 | { 11 | private string _name; 12 | private int _quantity; 13 | 14 | public StockManager(string name, int quantity) 15 | { 16 | _name = name; 17 | _quantity = quantity; 18 | } 19 | 20 | public void Buy() 21 | { 22 | Console.WriteLine($"Stock: {_name}, {_quantity} bought!"); 23 | } 24 | 25 | public void Sell() 26 | { 27 | Console.WriteLine($"Stock: {_name}, {_quantity} sold!"); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /interpreter/kotlin/JobManager.kt: -------------------------------------------------------------------------------- 1 | package Interpreter 2 | 3 | import java.util.ArrayList 4 | 5 | internal class JobManager { 6 | fun createExpressionTree(formula: String): List { 7 | val tree = ArrayList() 8 | 9 | for (role in formula.toCharArray()) { 10 | when (role) { 11 | 'G' -> tree.add(DeveloperExpression()) 12 | 'M' -> tree.add(AccountingExpression()) 13 | 'L' -> tree.add(TeamLeadExpression()) 14 | else -> Exception("Unexpected role!") 15 | } 16 | } 17 | return tree 18 | } 19 | 20 | fun runExpression(context: Context) { 21 | for (expression in createExpressionTree(context.formula!!)) { 22 | expression.interpret(context) 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /abstract-factory/c-sharp/CustomOperation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace AbstractFactory 6 | { 7 | class CustomOperation 8 | { 9 | IDatabaseFactory _databaseFactory; 10 | Connection _connection; 11 | Command _command; 12 | 13 | public CustomOperation(IDatabaseFactory databaseFactory) 14 | { 15 | _databaseFactory = databaseFactory; 16 | _command = databaseFactory.CreateCommand(); 17 | _connection = databaseFactory.CreateConnection(); 18 | } 19 | 20 | public void RemoveById(int id) 21 | { 22 | _connection.OpenConnection(); 23 | _command.ExecuteCommand("DELETE ..."); 24 | _connection.CloseConnection(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /iterator/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Iterator 2 | 3 | fun main(args: Array) { 4 | val employeeListAggregate = EmployeeListAggregate() 5 | 6 | val yusuf = Employee(1, "Yusuf", "Yılmaz") 7 | val arafat = Employee(2, "Arafat", "Önlük") 8 | val derya = Employee(3, "Derya", "Obi") 9 | 10 | employeeListAggregate.add(yusuf) 11 | employeeListAggregate.add(arafat) 12 | employeeListAggregate.add(derya) 13 | 14 | val iterator = employeeListAggregate.createIterator() 15 | 16 | while (iterator.hasNext()!!) { 17 | val currentEmployee = iterator.currentItem 18 | val message = String.format("%s %s", currentEmployee.firstName, currentEmployee.lastName) 19 | println(message) 20 | } 21 | 22 | // output: 23 | // Yusuf Yılmaz 24 | // Arafat Önlük 25 | // Derya Obi 26 | } 27 | -------------------------------------------------------------------------------- /state/c-sharp/PreparingState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace State 6 | { 7 | // Farklı durumların meydana geldiği sınıf. 8 | // UML diyagramındaki State (VendingMachineState) yapısından türer. 9 | // UML diyagramındaki ConcreteState yapısına denk gelmektedir. 10 | class PreparingState : VendingMachineState 11 | { 12 | // PreparingState durumunda ürün hazırlanması gibi işlemler yapılmaktadır. 13 | // Buradan sonraki durum ise ürünün verilmesi durumudur. (DeliveryState) 14 | public override void HandleState(VendingMachine context) 15 | { 16 | Console.WriteLine("PreparingState: İstenilen ürün hazırlanıyor. Lütfen bekleyiniz"); 17 | 18 | context.SetState(new DeliveryState()); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chain-of-responsibility/c-sharp/JPGHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChainOfResponsibility 6 | { 7 | // JPG dosyalarını dönüştüren sınıf. 8 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 9 | class JPGHandler : BaseHandler 10 | { 11 | public override void HandleRequest(Image image) 12 | { 13 | if (image.extension == "JPG") 14 | { 15 | Console.WriteLine("JPG to PNG"); 16 | // JPG işlemine ait dönüştürme kodları işlemleri. 17 | } 18 | else 19 | { 20 | // Bu sınıfa ait bir işlem değilse zincirin bir sonraki halkasına aktarılır. 21 | _nextHandler.HandleRequest(image); 22 | } 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /state/java/VendingMachine.java: -------------------------------------------------------------------------------- 1 | package State; 2 | 3 | // Durumu izlenecek olan sınıftır. 4 | // UML diyagramındaki Context yapısına denk gelmektedir. 5 | public class VendingMachine { 6 | private VendingMachineState _state; 7 | 8 | // Otomata örneği oluştuğu zaman başlangıç durumuna geçiyor. 9 | public VendingMachine() { 10 | setState(new InitializeState()); 11 | } 12 | 13 | public void setState(VendingMachineState state) { 14 | _state = state; 15 | _state.handleState(this); 16 | } 17 | 18 | public void requestProduct(String productName, double price) { 19 | // Burada ürünlere ait iş kodları olacaktır. 20 | // Ürün kontrolü, fiyatlandırma gibi kontroller. 21 | // Ürün ve fiyat olarak bir problemin olmadığı var sayılsın. 22 | 23 | setState(new PreparingState()); 24 | } 25 | } -------------------------------------------------------------------------------- /chain-of-responsibility/c-sharp/JPEGHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChainOfResponsibility 6 | { 7 | // JPEG dosyalarını dönüştüren sınıf. 8 | // UML diyagramındaki ConcreteHandler sınıfına denk gelmektedir. 9 | class JPEGHandler : BaseHandler 10 | { 11 | public override void HandleRequest(Image image) 12 | { 13 | if (image.extension == "JPEG") 14 | { 15 | Console.WriteLine("JPEG to PNG"); 16 | // JPEG işlemine ait dönüştürme kodları işlemleri. 17 | } 18 | else 19 | { 20 | // Bu sınıfa ait bir işlem değilse zincirin bir sonraki halkasına aktarılır. 21 | _nextHandler.HandleRequest(image); 22 | } 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /mediator/kotlin/User.kt: -------------------------------------------------------------------------------- 1 | package Mediator 2 | 3 | // Haberleşme için ortak bir arayüz sağlar. 4 | // Haberleşme Mediator tarafından gerçekleşeceği için bir örneğini tutar. 5 | // Mesaj alma ve mesaj gönderme özellikleri içermektedir. 6 | // UML diyagramındaki Colleague yapısına denk gelir. 7 | internal abstract class User(private val _chatRoomMediator: IChatRoomMediator) { 8 | var id: Int = 0 9 | var name: String? = null 10 | 11 | fun receiveMessage(message: String) { 12 | val result = String.format("%s received new message. Message: %s", name, message) 13 | println(result) 14 | } 15 | 16 | fun sendMessage(message: String, userId: Int) { 17 | val result = String.format("%s send new message to: %d id user.", name, userId) 18 | println(result) 19 | 20 | _chatRoomMediator.sendMessage(message, userId) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /observer/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | package Observer 2 | 3 | fun main(args: Array) { 4 | // Güncellemeden etkilenecek olan sınıf örnekleri. 5 | val mehmet = ObserverUser() 6 | val derya = ObserverUser() 7 | val sema = ObserverUser() 8 | val aleyna = ObserverUser() 9 | 10 | 11 | // İzlenecek olan sınıf örneği. 12 | val samsung = Samsung() 13 | 14 | // İzlenecek olan sınıfa etkilenecek olan nesnelerin atanması. 15 | samsung.addObserver(mehmet) 16 | samsung.addObserver(derya) 17 | samsung.addObserver(sema) 18 | samsung.addObserver(aleyna) 19 | 20 | samsung.changePrice() 21 | 22 | // output: 23 | // Samsung updated. Message: Samsung's price updated. 24 | // Samsung updated. Message: Samsung's price updated. 25 | // Samsung updated. Message: Samsung's price updated. 26 | // Samsung updated. Message: Samsung's price updated. 27 | } 28 | -------------------------------------------------------------------------------- /observer/kotlin/ObservableProduct.kt: -------------------------------------------------------------------------------- 1 | package Observer 2 | 3 | import java.util.ArrayList 4 | 5 | // Takip edilecek olan yapımızdır. 6 | // İçerisinde Observer (değişimden etkilenecek) nesneleri tutar. 7 | // UML diyagramındaki Observable yapısına denk gelmektedir. 8 | internal abstract class ObservableProduct { 9 | private val _users: MutableList 10 | protected var message: ProductUpdateMessage 11 | 12 | init { 13 | _users = ArrayList() 14 | message = ProductUpdateMessage() 15 | } 16 | 17 | fun addObserver(observerUser: IObserverUser) { 18 | _users.add(observerUser) 19 | } 20 | 21 | fun removeObserver(observerUser: IObserverUser) { 22 | _users.remove(observerUser) 23 | } 24 | 25 | fun notifyObserver() { 26 | for (user in _users) { 27 | user.sendNotification(message) 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /iterator/kotlin/EmployeeListAggregate.kt: -------------------------------------------------------------------------------- 1 | package Iterator 2 | 3 | import java.util.ArrayList 4 | 5 | // Aggregate (IEmployeeAggregate) arayüzünü uygular ve Iterator arayüzünü uygulayan sınıf örneği üretir. 6 | // Değerlerin referansları burada bulunur. 7 | // UML diyagramındaki ConcreteAggregate sınıfına denk gelmektedir. 8 | internal class EmployeeListAggregate : IEmployeeAggregate { 9 | private val _employees: MutableList 10 | 11 | init { 12 | _employees = ArrayList() 13 | } 14 | 15 | fun add(employee: Employee) { 16 | _employees.add(employee) 17 | } 18 | 19 | fun count(): Int { 20 | return _employees.size 21 | } 22 | 23 | operator fun get(index: Int): Employee { 24 | return _employees[index] 25 | } 26 | 27 | override fun createIterator(): IIterator { 28 | return EmployeeIterator(this) 29 | } 30 | } -------------------------------------------------------------------------------- /visitor/java/App.java: -------------------------------------------------------------------------------- 1 | package Visitor; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | Book earth = new Encyclopedia(); 6 | 7 | earth.name = "Big Earth!"; 8 | earth.author = "Jose S. Massey"; 9 | earth.categoryName = "Encyclopedia"; 10 | 11 | Book daily = new Magazine(); 12 | 13 | daily.name = "Daily Magazine"; 14 | daily.author = "Wayne D. Eakin"; 15 | daily.categoryName = "Magazine"; 16 | 17 | 18 | IBookExportVisitor xmlExportVisitor = new XmlExportVisitor(); 19 | IBookExportVisitor jsonExportVisitor = new JsonExportVisitor(); 20 | 21 | earth.accept(xmlExportVisitor); 22 | daily.accept(jsonExportVisitor); 23 | 24 | // output: 25 | // Big Earth!exported by XmlExportVisitor 26 | // Daily Magazine exported by JsonExportVisitor 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /command/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Command 5 | { 6 | class Program 7 | { 8 | static void Main(string[] args) 9 | { 10 | StockManager stockManager = new StockManager("iPhone", 200); 11 | 12 | BuyStock buyStock = new BuyStock(stockManager); 13 | SellStock sellStock = new SellStock(stockManager); 14 | 15 | StockController stockController = new StockController(); 16 | 17 | stockController.TakeOrder(buyStock); 18 | stockController.TakeOrder(sellStock); 19 | stockController.TakeOrder(sellStock); 20 | 21 | 22 | stockController.PlaceOrders(); 23 | // output: 24 | // Stock: iPhone, 200 bought! 25 | // Stock: iPhone, 200 sold! 26 | // Stock: iPhone, 200 sold! 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /flyweight/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Flyweight 5 | { 6 | class Program 7 | { 8 | static void Main(string[] args) 9 | { 10 | BoxFactory boxFactory = new BoxFactory(); 11 | 12 | Box blackBox1 = boxFactory.Get(BoxColor.Black); 13 | Box blackBox2 = boxFactory.Get(BoxColor.Black); 14 | Box blackBox3 = boxFactory.Get(BoxColor.Black); 15 | Box blueBox1 = boxFactory.Get(BoxColor.Blue); 16 | 17 | blackBox1.Draw(97, 37); 18 | blackBox2.Draw(34, 78); 19 | blackBox3.Draw(74, 193); 20 | blueBox1.Draw(1, 4); 21 | // output: 22 | // Black box drawn. 97,37 23 | // Black box drawn. 34,78 24 | // Black box drawn. 74,193 25 | // Blue box drawn. 1,4 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /strategy/kotlin/ShoppingCart.kt: -------------------------------------------------------------------------------- 1 | package Strategy 2 | 3 | import java.util.ArrayList 4 | 5 | // UML diyagramındaki Context sınıfına denk gelmektedir. 6 | // UML diyagramındaki Strategy(IPayment) arayüzüne ait referansı tutmaktadır. 7 | internal class ShoppingCart { 8 | private val items: MutableList 9 | private var payment: IPayment? = null 10 | 11 | init { 12 | items = ArrayList() 13 | } 14 | 15 | fun setPaymentMethod(payment: IPayment) { 16 | this.payment = payment 17 | } 18 | 19 | fun addItem(item: Item) { 20 | this.items.add(item) 21 | } 22 | 23 | fun calculateTotal(): Int { 24 | var sum = 0 25 | for (item in this.items) { 26 | sum += item.price 27 | } 28 | return sum 29 | } 30 | 31 | fun Pay() { 32 | val amount = calculateTotal() 33 | this.payment!!.pay(amount) 34 | } 35 | } -------------------------------------------------------------------------------- /decorator/c-sharp/FileDataSource.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Decorator 6 | { 7 | // Temel işlemlerin tanımlandığı IDataSource arayüzünü uygulayan sınıftır. 8 | // UML diyagramındaki ConcreteComponent sınıfına denk gelmektedir. 9 | class FileDataSource : IDataSource 10 | { 11 | private string _fileName; 12 | 13 | public FileDataSource(string fileName) 14 | { 15 | _fileName = fileName; 16 | } 17 | 18 | public string GetFileName() 19 | { 20 | return _fileName; 21 | } 22 | 23 | public void ReadData() 24 | { 25 | Console.WriteLine($"{_fileName} readed."); 26 | } 27 | 28 | public void WriteData(object data) 29 | { 30 | Console.WriteLine($"data was written to {_fileName}."); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /iterator/java/EmployeeIterator.java: -------------------------------------------------------------------------------- 1 | package Iterator; 2 | 3 | // Iterator arayüzünü ve koleksiyon üzerinde dolaşmak için gerekli metotları uygular. 4 | // Veriler üzerinde dolanma işlemleri burada gerçekleştirilecektir. 5 | // ConcreteAggregate (EmployeeListAggregate) sınıfı ile birlikte çalışır 6 | class EmployeeIterator implements IIterator { 7 | private EmployeeListAggregate _employeeListAggregate; 8 | private int _currentIndex; 9 | 10 | public EmployeeIterator(EmployeeListAggregate employeeListAggregate) { 11 | _employeeListAggregate = employeeListAggregate; 12 | _currentIndex = 0; 13 | } 14 | 15 | public Employee getCurrentItem() { 16 | return _employeeListAggregate.get(_currentIndex++); 17 | } 18 | 19 | public Boolean hasNext() { 20 | if (_employeeListAggregate.count() > _currentIndex) { 21 | return true; 22 | } 23 | return false; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mediator/c-sharp/ChatRoom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Mediator 6 | { 7 | // Mediator (IChatRoomMediator) arayüzünü uygular. 8 | // Colleague (User) nesneleri arasındaki iletişimi koordine eder. 9 | // UML diyagramındaki ConcreteMediator yapısına denk gelmektedir. 10 | class ChatRoomMediator : IChatRoomMediator 11 | { 12 | private Dictionary _userDictionary; 13 | 14 | public ChatRoomMediator() 15 | { 16 | _userDictionary = new Dictionary(); 17 | } 18 | 19 | public void AddUserInRoom(User user) 20 | { 21 | _userDictionary.Add(user.id, user); 22 | } 23 | 24 | public void SendMessage(string message, int userId) 25 | { 26 | User user = _userDictionary[userId]; 27 | user.ReceiveMessage(message); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /visitor/c-sharp/XmlExportVisitor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Visitor 6 | { 7 | // Visitor arayüzünü ve burada tanımlı olan metotları uygular. 8 | // Sonradan eklenmek istenen işlemler burada yer alır. 9 | // UML diyagramındaki ConcreteVisitor yapısına denk gelir. 10 | class XmlExportVisitor : IBookExportVisitor 11 | { 12 | public void ExportVisit(Magazine magazine) 13 | { 14 | // Parametre olarak gelen örneğin XML'e çevrilmesi işlemleri yer alacaktır. 15 | Console.WriteLine($"{magazine.name} exported by XmlExportVisitor"); 16 | } 17 | 18 | public void ExportVisit(Encyclopedia encyclopedia) 19 | { 20 | // Parametre olarak gelen örneğin XML'e çevrilmesi işlemleri yer alacaktır. 21 | Console.WriteLine($"{encyclopedia.name} exported by XmlExportVisitor"); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /iterator/java/EmployeeListAggregate.java: -------------------------------------------------------------------------------- 1 | package Iterator; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | // Aggregate (IEmployeeAggregate) arayüzünü uygular ve Iterator arayüzünü uygulayan sınıf örneği üretir. 7 | // Değerlerin referansları burada bulunur. 8 | // UML diyagramındaki ConcreteAggregate sınıfına denk gelmektedir. 9 | class EmployeeListAggregate implements IEmployeeAggregate { 10 | private List _employees; 11 | 12 | public EmployeeListAggregate() { 13 | _employees = new ArrayList<>(); 14 | } 15 | 16 | public void add(Employee employee) { 17 | _employees.add(employee); 18 | } 19 | 20 | public int count() { 21 | return _employees.size(); 22 | } 23 | 24 | public Employee get(int index) { 25 | return _employees.get(index); 26 | } 27 | 28 | public IIterator createIterator() { 29 | return new EmployeeIterator(this); 30 | } 31 | } -------------------------------------------------------------------------------- /visitor/c-sharp/JsonExportVisitor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Visitor 6 | { 7 | // Visitor arayüzünü ve burada tanımlı olan metotları uygular. 8 | // Sonradan eklenmek istenen işlemler burada yer alır. 9 | // UML diyagramındaki ConcreteVisitor yapısına denk gelir. 10 | class JsonExportVisitor : IBookExportVisitor 11 | { 12 | public void ExportVisit(Magazine magazine) 13 | { 14 | // Parametre olarak gelen örneğin JSON'a çevrilmesi işlemleri yer alacaktır. 15 | Console.WriteLine($"{magazine.name} exported by JsonExportVisitor"); 16 | } 17 | 18 | public void ExportVisit(Encyclopedia encyclopedia) 19 | { 20 | // Parametre olarak gelen örneğin JSON'a çevrilmesi işlemleri yer alacaktır. 21 | Console.WriteLine($"{encyclopedia.name} exported by JsonExportVisitor"); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /decorator/c-sharp/DataSourceDecorator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Decorator 6 | { 7 | // UML diyagramındaki Component (IDataSource) arayüzünü uygular. 8 | // Constructor sayesinde özellikleri değiştirilmesi istenen nesnenin referansı tutulur. 9 | // Bu sınıftan türeyen sınıfların uygulamasını, değiştirilmesini istediğimiz metotları abstract anahtar kelimesi ile işaretledik. 10 | // UML diyagramındaki BaseDecorator yapısına denk gelmektedir. 11 | abstract class BaseDataSourceDecorator : IDataSource 12 | { 13 | protected IDataSource dataSource; 14 | 15 | public BaseDataSourceDecorator(IDataSource dataSource) 16 | { 17 | this.dataSource = dataSource; 18 | } 19 | 20 | public abstract string GetFileName(); 21 | 22 | public abstract void ReadData(); 23 | 24 | public abstract void WriteData(object data); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /factory/c-sharp/NotifyFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Factory 6 | { 7 | class NotifyFactory 8 | { 9 | public INotify CreateNotify(string notifyType) 10 | { 11 | if (notifyType == "SMS") 12 | { 13 | // Buradaki nesne oluşturma süreçleri bize kalmıştır. 14 | // Kullanıcıdan soyutlanmıştır. 15 | // Örnek olarak burası Singleton olarak da ayarlanabilirdi. 16 | return new SmsNotify(); 17 | } 18 | else if (notifyType == "MAIL") 19 | { 20 | // Buradaki nesne oluşturma süreçleri bize kalmıştır. 21 | // Kullanıcıdan soyutlanmıştır. 22 | // Örnek olarak burası Singleton olarak da ayarlanabilirdi. 23 | return new MailNotify(); 24 | } 25 | return null; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /strategy/java/ShoppingCart.java: -------------------------------------------------------------------------------- 1 | package Strategy; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | // UML diyagramındaki Context sınıfına denk gelmektedir. 7 | // UML diyagramındaki Strategy(IPayment) arayüzüne ait referansı tutmaktadır. 8 | class ShoppingCart { 9 | private List items; 10 | private IPayment payment; 11 | 12 | public ShoppingCart() { 13 | items = new ArrayList(); 14 | } 15 | 16 | public void setPaymentMethod(IPayment payment) { 17 | this.payment = payment; 18 | } 19 | 20 | public void addItem(Item item) { 21 | this.items.add(item); 22 | } 23 | 24 | public int calculateTotal() { 25 | int sum = 0; 26 | for (Item item : this.items) { 27 | sum += item.getPrice(); 28 | } 29 | return sum; 30 | } 31 | 32 | public void Pay() { 33 | int amount = calculateTotal(); 34 | this.payment.pay(amount); 35 | } 36 | } -------------------------------------------------------------------------------- /command/c-sharp/StockController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Command 6 | { 7 | // Command (IOrderCommand) arayüzünü uygulayan sınıf referansını tutar. 8 | // Metotun ne zaman çağrılacağını belirtir. 9 | // UML diyagramındaki Invoker sınıfına denk gelmektedir. 10 | class StockController 11 | { 12 | private List _orderCommands; 13 | 14 | public StockController() 15 | { 16 | _orderCommands = new List(); 17 | } 18 | 19 | public void TakeOrder(IOrderCommand command) 20 | { 21 | _orderCommands.Add(command); 22 | } 23 | 24 | public void PlaceOrders() 25 | { 26 | foreach (IOrderCommand command in _orderCommands) 27 | { 28 | command.Execute(); 29 | } 30 | 31 | _orderCommands.Clear(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /flyweight/kotlin/BoxFactory.kt: -------------------------------------------------------------------------------- 1 | package Flyweight 2 | 3 | import java.util.Dictionary 4 | import java.util.Hashtable 5 | 6 | // Flyweight (Box) havuzunu tutacak sınıftır. 7 | // Eğer daha önceden nesne oluşturulmamışsa havuza atılacak. 8 | // Oluşturulmuş ise de havuzdan seçilip verilecektir. 9 | // UML diyagramındaki FlyweightFactory sınıfına denk gelmektedir. 10 | internal class BoxFactory { 11 | private val _boxes: Dictionary 12 | 13 | init { 14 | _boxes = Hashtable() 15 | } 16 | 17 | fun get(boxColor: BoxColor): Box? { 18 | if (_boxes.get(boxColor) != null) { 19 | return _boxes.get(boxColor) 20 | } 21 | 22 | var box: Box? = null 23 | 24 | if (boxColor === BoxColor.BLACK) { 25 | box = BlackBox(20, 20) 26 | } else if (boxColor === BoxColor.BLUE) { 27 | box = BlueBox(20, 20) 28 | } 29 | 30 | _boxes.put(boxColor, box) 31 | return box 32 | } 33 | } -------------------------------------------------------------------------------- /observer/java/ObservableProduct.java: -------------------------------------------------------------------------------- 1 | package Observer; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | // Takip edilecek olan yapımızdır. 7 | // İçerisinde Observer (değişimden etkilenecek) nesneleri tutar. 8 | // UML diyagramındaki Observable yapısına denk gelmektedir. 9 | abstract class ObservableProduct { 10 | private List _users; 11 | protected ProductUpdateMessage message; 12 | 13 | public ObservableProduct() { 14 | _users = new ArrayList(); 15 | message = new ProductUpdateMessage(); 16 | } 17 | 18 | public void addObserver(IObserverUser observerUser) { 19 | _users.add(observerUser); 20 | } 21 | 22 | public void removeObserver(IObserverUser observerUser) { 23 | _users.remove(observerUser); 24 | } 25 | 26 | public void notifyObserver() { 27 | for (IObserverUser user : _users) { 28 | user.sendNotification(message); 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /strategy/c-sharp/CreditCartPayment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Strategy 6 | { 7 | // UMl diyagramındaki ConcreteStrategy sınıfına denk gelmektedir. 8 | // UML diyagramındaki Strategy arayüzüne denk gelen arayüzü uyguluyor. 9 | class CreditCartPayment : IPayment 10 | { 11 | private string _name; 12 | private string _cardNumber; 13 | private string _cvv; 14 | private string _dateOfExpiry; 15 | 16 | public CreditCartPayment(string name, string ccNum, string cvv, string expiryDate) 17 | { 18 | _name = name; 19 | _cardNumber = ccNum; 20 | _cvv = cvv; 21 | _dateOfExpiry = expiryDate; 22 | } 23 | 24 | public void Pay(int amount) 25 | { 26 | // Kredi kartı ödeme işlemlerinin gerçekleştiği yer. 27 | Console.WriteLine("Paid by credit cart."); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /flyweight/java/BoxFactory.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | import java.util.Dictionary; 4 | import java.util.Hashtable; 5 | 6 | // Flyweight (Box) havuzunu tutacak sınıftır. 7 | // Eğer daha önceden nesne oluşturulmamışsa havuza atılacak. 8 | // Oluşturulmuş ise de havuzdan seçilip verilecektir. 9 | // UML diyagramındaki FlyweightFactory sınıfına denk gelmektedir. 10 | class BoxFactory { 11 | private Dictionary _boxes; 12 | 13 | public BoxFactory() { 14 | _boxes = new Hashtable<>(); 15 | } 16 | 17 | public Box get(BoxColor boxColor) { 18 | if (_boxes.get(boxColor) != null) { 19 | return _boxes.get(boxColor); 20 | } 21 | 22 | Box box = null; 23 | 24 | if (boxColor == BoxColor.BLACK) { 25 | box = new BlackBox(20, 20); 26 | } else if (boxColor == BoxColor.BLUE) { 27 | box = new BlueBox(20, 20); 28 | } 29 | 30 | _boxes.put(boxColor, box); 31 | return box; 32 | } 33 | } -------------------------------------------------------------------------------- /memento/c-sharp/TextUndoCareTaker.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Memento 6 | { 7 | // Memento'ların referansının tutulduğu yerdir. 8 | // UML diyagramındaki CareTaker yapısına denk gelmektedir. 9 | class TextUndoCareTaker 10 | { 11 | private Stack _mementos; 12 | 13 | public TextUndoCareTaker() 14 | { 15 | _mementos = new Stack(); 16 | } 17 | 18 | // Çağrılma işlemi yapıldığında yığının en üstündeki Memento örneği silinir ve geriye döndürülür. 19 | // Ekleme işlemi yapıldığında yığının en üstüne Memento örneği eklenir. 20 | // Klasik Stack. 21 | public TextMemento TextMemento 22 | { 23 | get 24 | { 25 | return _mementos.Pop(); 26 | } 27 | set 28 | { 29 | _mementos.Push(value); 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /decorator/kotlin/ComporessionDecorator.kt: -------------------------------------------------------------------------------- 1 | package Decorator 2 | 3 | // Yeni davranışların tanımlandığı sınıftır. 4 | // UML diyagramındaki BaseDecorator (BaseDataSourceDecorator) sınıfından türer. 5 | // UML diyagramındaki ConcreteDecorator sınıfına denk gelmektedir. 6 | 7 | internal class ComporessionDecorator(dataSource: IDataSource) : BaseDataSourceDecorator(dataSource) { 8 | 9 | override val fileName: String 10 | get() = super.dataSource.fileName 11 | 12 | override fun readData() { 13 | // Veriyi okurken referansını tuttuğumuz sınıfın kendi davranışını sergilemesini istiyoruz. 14 | super.dataSource.readData() 15 | } 16 | 17 | override fun writeData(data: Any) { 18 | // Burada gelen veriye ait sıkıştırma işlemleri yapılacaktır. 19 | println("Data compressed.") 20 | 21 | // Sıkıştırma işlemleri yapıldıktan sonra yazma işlemleri gerçekleştirilecektir. 22 | println("Compressed data was written to " + super.dataSource.fileName) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /visitor/c-sharp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Visitor 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | Book earth = new Encyclopedia(); 10 | 11 | earth.name = "Big Earth!"; 12 | earth.author = "Jose S. Massey"; 13 | earth.categoryName = "Encyclopedia"; 14 | 15 | Book daily = new Magazine(); 16 | 17 | daily.name = "Daily Magazine"; 18 | daily.author = "Wayne D. Eakin"; 19 | daily.categoryName = "Magazine"; 20 | 21 | 22 | IBookExportVisitor xmlExportVisitor = new XmlExportVisitor(); 23 | IBookExportVisitor jsonExportVisitor = new JsonExportVisitor(); 24 | 25 | earth.Accept(xmlExportVisitor); 26 | daily.Accept(jsonExportVisitor); 27 | 28 | // output: 29 | // Big Earth!exported by XmlExportVisitor 30 | // Daily Magazine exported by JsonExportVisitor 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /iterator/java/App.java: -------------------------------------------------------------------------------- 1 | package Iterator; 2 | 3 | public class App { 4 | public static void main(String[] args) { 5 | EmployeeListAggregate employeeListAggregate = new EmployeeListAggregate(); 6 | 7 | Employee yusuf = new Employee(1, "Yusuf", "Yılmaz"); 8 | Employee arafat = new Employee(2, "Arafat", "Önlük"); 9 | Employee derya = new Employee(3, "Derya", "Obi"); 10 | 11 | employeeListAggregate.add(yusuf); 12 | employeeListAggregate.add(arafat); 13 | employeeListAggregate.add(derya); 14 | 15 | var iterator = employeeListAggregate.createIterator(); 16 | 17 | while (iterator.hasNext()) { 18 | Employee currentEmployee = iterator.getCurrentItem(); 19 | String message = String.format("%s %s", currentEmployee.firstName, currentEmployee.lastName); 20 | System.out.println(message); 21 | } 22 | 23 | // output: 24 | // Yusuf Yılmaz 25 | // Arafat Önlük 26 | // Derya Obi 27 | } 28 | } 29 | --------------------------------------------------------------------------------