├── .gitbook.yaml ├── bridge ├── go │ ├── message.go │ ├── go.mod │ ├── message-sender.go │ ├── main.go │ ├── text-message-sender.go │ ├── text-message.go │ ├── email-message-sender.go │ └── email-message.go ├── kotlin │ ├── Message.kt │ ├── IMessageSender.kt │ ├── EmailMessage.kt │ ├── TextMessage.kt │ ├── TextMessageSender.kt │ ├── EmailMessageSender.kt │ └── App.kt ├── python │ ├── text_message.py │ ├── email_message.py │ ├── message_sender.py │ ├── text_message_sender.py │ ├── email_message_sender.py │ ├── message.py │ └── app.py ├── java │ ├── IMessageSender.java │ ├── Message.java │ ├── TextMessageSender.java │ ├── EmailMessageSender.java │ ├── EmailMessage.java │ └── TextMessage.java ├── typescript │ ├── message-sender.interface.ts │ ├── message.ts │ ├── text-message-sender.ts │ ├── email-message-sender.ts │ ├── email-message.ts │ └── text-message.ts └── c-sharp │ ├── IMessageSender.cs │ ├── TextMessageSender.cs │ └── EmailMessageSender.cs ├── .github └── FUNDING.yml ├── interpreter ├── python │ ├── context.py │ ├── job_expression.py │ ├── developer_expression.py │ ├── team_lead_expression.py │ ├── accounting_expression.py │ └── app.py ├── go │ ├── go.mod │ ├── job-expression.go │ ├── context.go │ ├── main.go │ ├── team-lead-expression.go │ ├── developer-expression.go │ └── accounting-expression.go ├── typescript │ ├── context.ts │ ├── job-expression.interface.ts │ ├── main.ts │ ├── developer-expression.ts │ ├── team-lead-expression.ts │ └── accounting-expression.ts ├── 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 └── c-sharp │ ├── Context.cs │ └── IJobExpression.cs ├── flyweight ├── go │ ├── box.go │ ├── go.mod │ ├── box-color.go │ └── main.go ├── java │ ├── BoxColor.java │ └── Box.java ├── typescript │ ├── box-color.ts │ └── box.ts ├── kotlin │ ├── BoxColor.kt │ └── Box.kt ├── c-sharp │ ├── BoxColor.cs │ └── Box.cs └── python │ └── box.py ├── adapter ├── go │ ├── go.mod │ ├── json-serializer.go │ ├── main.go │ └── custom-operation.go ├── kotlin │ ├── IJsonSerializer.kt │ ├── App.kt │ ├── CustomOperation.kt │ └── CustomSerializer.kt ├── java │ ├── IJsonSerializer.java │ ├── App.java │ ├── CustomOperation.java │ └── CustomSerializer.java ├── typescript │ ├── json-serializer.interface.ts │ ├── custom-operation.ts │ ├── main.ts │ └── custom-serializer.ts ├── python │ ├── json_serializer.py │ ├── app.py │ ├── custom_operation.py │ └── custom_serializer.py └── c-sharp │ ├── IJsonSerializer.cs │ └── Program.cs ├── command ├── go │ ├── go.mod │ ├── order-command.go │ ├── buy-stock.go │ ├── sell-stock.go │ └── main.go ├── typescript │ ├── order-command.interface.ts │ ├── buy-stock.ts │ └── sell-stock.ts ├── java │ ├── IOrderCommand.java │ ├── BuyStock.java │ └── SellStock.java ├── kotlin │ ├── IOrderCommand.kt │ ├── BuyStock.kt │ ├── SellStock.kt │ └── StockManager.kt ├── python │ ├── order_command.py │ ├── stock_manager.py │ ├── buy_stock.py │ └── sell_stock.py └── c-sharp │ └── IOrderCommand.cs ├── facade ├── go │ ├── go.mod │ ├── main.go │ ├── customer.go │ ├── credit-card-manager.go │ └── credit-card-facade.go ├── kotlin │ ├── Customer.kt │ ├── App.kt │ ├── CreditCardManager.kt │ ├── CreditCardFacade.kt │ └── BlackListService.kt ├── python │ ├── customer.py │ ├── app.py │ ├── credit_card_manager.py │ └── credit_card_facade.py ├── java │ ├── Customer.java │ ├── CreditCardManager.java │ ├── App.java │ └── CreditCardFacade.java ├── typescript │ ├── customer.ts │ ├── main.ts │ └── credit-card-manager.ts └── c-sharp │ ├── Program.cs │ ├── CreditCardManager.cs │ └── Customer.cs ├── factory ├── go │ ├── go.mod │ ├── notify.go │ ├── user.go │ ├── main.go │ ├── sms-notify.go │ └── mail-notify.go ├── python │ ├── smsnotify.py │ ├── mailnotify.py │ ├── user.py │ ├── app.py │ └── notify.py ├── java │ ├── INotify.java │ ├── User.java │ ├── SmsNotify.java │ ├── MailNotify.java │ └── App.java ├── typescript │ ├── user.ts │ ├── notify.interface.ts │ ├── mail-notify.ts │ ├── sms-notify.ts │ └── main.ts ├── php │ ├── INotify.php │ ├── User.php │ ├── index.php │ ├── SmsNotify.php │ └── MailNotify.php └── c-sharp │ ├── INotify.cs │ ├── User.cs │ ├── MailNotify.cs │ ├── SmsNotify.cs │ └── Program.cs ├── memento ├── go │ ├── go.mod │ └── text-memento.go ├── typescript │ └── text-memento.ts ├── java │ └── TextMemento.java ├── kotlin │ └── TextMemento.kt ├── python │ └── text_memento.py └── c-sharp │ └── TextMemento.cs ├── proxy ├── go │ ├── go.mod │ ├── orderable-mask.go │ ├── main.go │ ├── person.go │ └── mask-order.go ├── kotlin │ ├── Person.kt │ ├── IOrderableMask.kt │ ├── App.kt │ └── MaskOrder.kt ├── java │ ├── IOrderableMask.java │ ├── Person.java │ ├── App.java │ └── MaskOrder.java ├── typescript │ ├── person.ts │ ├── orderable-mask.interface.ts │ ├── main.ts │ └── mask-order.ts ├── python │ ├── app.py │ ├── orderable_mask.py │ └── mask_order.py └── c-sharp │ ├── IOrderableMask.cs │ ├── Person.cs │ └── Program.cs ├── singleton ├── kotlin │ ├── Database.kt │ └── App.kt ├── go │ ├── go.mod │ ├── main.go │ └── database.go ├── python │ ├── app.py │ └── database.py ├── php │ ├── index.php │ └── Database.php ├── typescript │ ├── database.ts │ └── main.ts └── java │ └── App.java ├── state ├── go │ ├── go.mod │ ├── vending-machine-state.go │ └── main.go ├── kotlin │ ├── VendingMachineState.kt │ └── App.kt ├── java │ └── VendingMachineState.java ├── typescript │ ├── vending-machine-state.ts │ └── main.ts ├── c-sharp │ └── VendingMachineState.cs └── python │ └── app.py ├── visitor ├── go │ ├── go.mod │ ├── book.go │ ├── book-export-visitor.go │ └── main.go ├── python │ ├── magazine.py │ ├── encyclopedia.py │ ├── book.py │ └── book_export_visitor.py ├── kotlin │ ├── Magazine.kt │ ├── Encyclopedia.kt │ ├── IBookExportVisitor.kt │ └── Book.kt ├── java │ ├── IBookExportVisitor.java │ ├── Book.java │ ├── Encyclopedia.java │ └── Magazine.java ├── typescript │ ├── book.ts │ ├── magazine.ts │ ├── encyclopedia.ts │ └── book-export-visitor.interface.ts └── c-sharp │ ├── Magazine.cs │ ├── Encyclopedia.cs │ ├── IBookExportVisitor.cs │ └── Book.cs ├── composite ├── go │ ├── go.mod │ ├── catalog-component.go │ └── product.go ├── typescript │ ├── catalog-component.interface.ts │ └── product.ts ├── kotlin │ ├── ICatalogComponent.kt │ └── Product.kt ├── java │ ├── ICatalogComponent.java │ └── Product.java ├── python │ ├── product.py │ └── catalog_component.py └── c-sharp │ └── ICatalogComponent.cs ├── decorator ├── go │ ├── go.mod │ ├── main.go │ └── data-source.go ├── typescript │ ├── data-source.interface.ts │ └── main.ts ├── kotlin │ ├── IDataSource.kt │ ├── App.kt │ └── FileDataSource.kt ├── java │ └── IDataSource.java ├── c-sharp │ └── IDataSource.cs └── python │ └── data_source.py ├── images ├── liskov-1.png ├── liskov-2.png ├── liskov-3.png ├── adapter-uml.png ├── bridge-old.png ├── builder-uml.png ├── command-uml.png ├── decorator-1.png ├── decorator-2.png ├── facade-uml.png ├── human-uml.png ├── memento-uml.png ├── oop-pillars.png ├── open-closed.png ├── proxy-uml.png ├── singleton.png ├── state-uml.png ├── visitor-uml.png ├── composite-uml.png ├── cow-crow-uml.png ├── decorator-uml.png ├── developer-uml.png ├── flyweight-uml.png ├── iterator-uml.png ├── mediator-uml.png ├── observer-uml.png ├── open-closed-2.png ├── organism-uml.png ├── prototype-uml.png ├── stragety-uml.png ├── dependency-inv-2.png ├── dependency-inv.png ├── factory-pattern.png ├── interface-segre.png ├── interpreter-uml.png ├── tree traversal.png ├── uml-aggregation.png ├── uml-association.png ├── uml-composition.png ├── uml-dependency.png ├── uml-inheritance.png ├── uml-realization.png ├── interface-segre-2.png ├── single-res-person.png ├── abstract-factory-uml.png ├── developer-yusuf-halit.png ├── single-res-person-2.png ├── template-method-uml.png ├── chain-of-responsibility.png ├── uml-poly-logger-service.png ├── adapter-uml-left-to-right.png ├── bridge-without-imp-and-abst.png ├── tasarim-desenleri-turkce-kaynak.png └── tasarim-desenleri-turkce-kaynak-2.png ├── iterator ├── go │ ├── go.mod │ ├── iterator.go │ ├── employee-aggreagate.go │ └── employee.go ├── kotlin │ ├── Employee.kt │ ├── IEmployeeAggregate.kt │ └── IIterator.kt ├── python │ ├── employee.py │ └── employee_aggregate.py ├── java │ ├── IEmployeeAggregate.java │ ├── Employee.java │ └── IIterator.java ├── typescript │ ├── employee.ts │ ├── iterator.interface.ts │ └── employee-aggregate.interface.ts └── c-sharp │ └── IEmployeeAggregate.cs ├── mediator ├── go │ ├── go.mod │ ├── chat-room.go │ └── chat-user.go ├── kotlin │ ├── ChatUser.kt │ └── IChatRoomMediator.kt ├── python │ ├── chat_user.py │ └── abstract_chat_room_mediator.py ├── java │ ├── IChatRoomMediator.java │ └── ChatUser.java ├── typescript │ ├── chat-room.interface.ts │ └── chat-user.ts └── c-sharp │ ├── IChatRoom.cs │ └── ChatUser.cs ├── observer ├── go │ ├── go.mod │ ├── observer-user-interface.go │ ├── observer-user.go │ └── product-update-message.go ├── python │ ├── product_update_message.py │ ├── abstract_observer_user.py │ └── observer_user.py ├── java │ ├── IObserverUser.java │ ├── ObserverUser.java │ ├── ProductUpdateMessage.java │ └── Samsung.java ├── kotlin │ ├── IObserverUser.kt │ ├── ObserverUser.kt │ ├── ProductUpdateMessage.kt │ └── Samsung.kt ├── typescript │ ├── observer-user.interface.ts │ ├── product-update-message.ts │ └── observer-user.ts └── c-sharp │ ├── IObserverUser.cs │ └── ProductUpdateMessage.cs ├── prototype ├── go │ ├── go.mod │ ├── cloneable-prototype.go │ ├── employee.go │ └── main.go ├── python │ ├── clonable_prototype.py │ ├── app.py │ └── employee.py ├── kotlin │ ├── App.kt │ ├── Employee.kt │ └── ClonablePrototype.kt ├── typescript │ ├── main.ts │ └── cloneable-prototype.interface.ts └── java │ ├── IClonablePrototype.java │ └── App.java ├── strategy ├── go │ ├── go.mod │ ├── payment.go │ ├── item.go │ └── main.go ├── kotlin │ ├── Item.kt │ ├── IPayment.kt │ ├── PaypalPayment.kt │ └── App.kt ├── typescript │ ├── payment.interface.ts │ └── item.ts ├── java │ ├── IPayment.java │ └── Item.java ├── python │ ├── payment.py │ └── item.py └── c-sharp │ └── IPayment.cs ├── abstract-factory ├── go │ ├── command.go │ ├── go.mod │ ├── connection.go │ ├── main.go │ ├── database-factory.go │ ├── mysql-command.go │ ├── oracle-command.go │ ├── mysql-database-factory.go │ ├── oracle-database-factory.go │ ├── mysql-connection.go │ └── oracle-connection.go ├── typescript │ ├── command.ts │ ├── connection.ts │ ├── database-factory.interface.ts │ ├── mysql-command.ts │ ├── oracle-command.ts │ ├── main.ts │ ├── mysql-connection.ts │ └── oracle-connection.ts ├── python │ ├── mysql_command.py │ ├── oracle_command.py │ ├── command.py │ ├── mysql_connection.py │ ├── oracle_connection.py │ ├── connection.py │ ├── database_factory.py │ ├── mysql_database_factory.py │ ├── oracle_database_factory.py │ └── app.py ├── java │ ├── Command.java │ ├── Connection.java │ ├── App.java │ ├── MySQLCommand.java │ ├── OracleCommand.java │ ├── IDatabaseFactory.java │ ├── MySQLDatabaseFactory.java │ ├── OracleDatabaseFactory.java │ └── MySQLConnection.java ├── php │ ├── Command.php │ ├── index.php │ ├── Connection.php │ ├── MySQLCommand.php │ ├── OracleCommand.php │ └── IDatabaseFactory.php └── c-sharp │ ├── Command.cs │ ├── Connection.cs │ ├── MySQLCommand.cs │ ├── OracleCommand.cs │ ├── Program.cs │ ├── IDatabaseFactory.cs │ ├── MySQLDatabaseFactory.cs │ └── OracleDatabaseFactory.cs ├── template-method ├── go │ └── go.mod ├── kotlin │ ├── XmlDataAnalyzer.kt │ └── HtmlDataAnalyzer.kt ├── java │ ├── XmlDataAnalyzer.java │ └── HtmlDataAnalyzer.java ├── python │ ├── xml_analyzer_base.py │ └── html_analyzer_base.py └── typescript │ ├── xml-data-analyzer.ts │ └── html-data-analyzer.ts ├── TasarimDesenleriTurkceKaynak.pdf ├── chain-of-responsibility ├── go │ ├── go.mod │ ├── base-handler.go │ ├── image.go │ └── main.go ├── python │ ├── image.py │ └── base_handler.py ├── kotlin │ └── Image.kt ├── typescript │ ├── image.ts │ └── base-handler.ts ├── java │ ├── Image.java │ └── BaseHandler.java └── c-sharp │ └── Image.cs └── docs └── tasarim-desenleri ├── structural-tasarim-desenleri └── structural-tasarim-desenleri.md ├── creational-tasarim-desenleri └── creational-tasarim-desenleri.md └── tasarim-deseni-nedir.md /.gitbook.yaml: -------------------------------------------------------------------------------- 1 | root: ./docs/ 2 | 3 | ​structure: 4 | summary: SUMMARY.md​ 5 | -------------------------------------------------------------------------------- /bridge/go/message.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type Message interface { 4 | Send() 5 | } 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: yusufyilmazfr 4 | -------------------------------------------------------------------------------- /interpreter/python/context.py: -------------------------------------------------------------------------------- 1 | class Context: 2 | formula = str() 3 | total_point = int() 4 | -------------------------------------------------------------------------------- /flyweight/go/box.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type Box interface { 4 | Draw(locationX, locationY int) 5 | } 6 | -------------------------------------------------------------------------------- /adapter/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/adapter/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /bridge/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/bridge/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /command/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/command/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /facade/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/facade/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /facade/kotlin/Customer.kt: -------------------------------------------------------------------------------- 1 | package Facade 2 | 3 | class Customer(var firstName: String, var lastName: String) 4 | -------------------------------------------------------------------------------- /factory/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/factory/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /factory/go/notify.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type Notify interface { 4 | sendNotification(user User) 5 | } 6 | -------------------------------------------------------------------------------- /memento/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/memento/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /proxy/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/proxy/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /singleton/kotlin/Database.kt: -------------------------------------------------------------------------------- 1 | package singleton 2 | 3 | object Database { 4 | fun getInstance() = this 5 | } -------------------------------------------------------------------------------- /state/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/state/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /visitor/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/visitor/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /composite/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/composite/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /decorator/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/decorator/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /flyweight/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/flyweight/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /images/liskov-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/liskov-1.png -------------------------------------------------------------------------------- /images/liskov-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/liskov-2.png -------------------------------------------------------------------------------- /images/liskov-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/liskov-3.png -------------------------------------------------------------------------------- /iterator/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/iterator/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /mediator/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/mediator/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /observer/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/observer/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /prototype/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/prototype/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /singleton/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/singleton/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /strategy/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/strategy/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /abstract-factory/go/command.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type Command interface { 4 | executeCommand(query string) 5 | } 6 | -------------------------------------------------------------------------------- /images/adapter-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/adapter-uml.png -------------------------------------------------------------------------------- /images/bridge-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/bridge-old.png -------------------------------------------------------------------------------- /images/builder-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/builder-uml.png -------------------------------------------------------------------------------- /images/command-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/command-uml.png -------------------------------------------------------------------------------- /images/decorator-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/decorator-1.png -------------------------------------------------------------------------------- /images/decorator-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/decorator-2.png -------------------------------------------------------------------------------- /images/facade-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/facade-uml.png -------------------------------------------------------------------------------- /images/human-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/human-uml.png -------------------------------------------------------------------------------- /images/memento-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/memento-uml.png -------------------------------------------------------------------------------- /images/oop-pillars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/oop-pillars.png -------------------------------------------------------------------------------- /images/open-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/open-closed.png -------------------------------------------------------------------------------- /images/proxy-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/proxy-uml.png -------------------------------------------------------------------------------- /images/singleton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/singleton.png -------------------------------------------------------------------------------- /images/state-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/state-uml.png -------------------------------------------------------------------------------- /images/visitor-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/visitor-uml.png -------------------------------------------------------------------------------- /interpreter/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/interpreter/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /bridge/go/message-sender.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type MessageSender interface { 4 | sendMessage(message Message) 5 | } 6 | -------------------------------------------------------------------------------- /factory/python/smsnotify.py: -------------------------------------------------------------------------------- 1 | class SMSNotify: 2 | def send_notify(self): 3 | print("SMS is successfully Sent.") 4 | -------------------------------------------------------------------------------- /images/composite-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/composite-uml.png -------------------------------------------------------------------------------- /images/cow-crow-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/cow-crow-uml.png -------------------------------------------------------------------------------- /images/decorator-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/decorator-uml.png -------------------------------------------------------------------------------- /images/developer-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/developer-uml.png -------------------------------------------------------------------------------- /images/flyweight-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/flyweight-uml.png -------------------------------------------------------------------------------- /images/iterator-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/iterator-uml.png -------------------------------------------------------------------------------- /images/mediator-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/mediator-uml.png -------------------------------------------------------------------------------- /images/observer-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/observer-uml.png -------------------------------------------------------------------------------- /images/open-closed-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/open-closed-2.png -------------------------------------------------------------------------------- /images/organism-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/organism-uml.png -------------------------------------------------------------------------------- /images/prototype-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/prototype-uml.png -------------------------------------------------------------------------------- /images/stragety-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/stragety-uml.png -------------------------------------------------------------------------------- /abstract-factory/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/abstract-factory/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /factory/java/INotify.java: -------------------------------------------------------------------------------- 1 | package Factory; 2 | 3 | public interface INotify { 4 | void sendNotification(User user); 5 | } 6 | -------------------------------------------------------------------------------- /factory/python/mailnotify.py: -------------------------------------------------------------------------------- 1 | class MailNotify: 2 | def send_notify(self): 3 | print("Mail is successfully Sent.") 4 | -------------------------------------------------------------------------------- /flyweight/go/box-color.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Kutuların rengini tutmaktadır. 4 | const ( 5 | BLACK = iota 6 | BLUE 7 | ) 8 | -------------------------------------------------------------------------------- /images/dependency-inv-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/dependency-inv-2.png -------------------------------------------------------------------------------- /images/dependency-inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/dependency-inv.png -------------------------------------------------------------------------------- /images/factory-pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/factory-pattern.png -------------------------------------------------------------------------------- /images/interface-segre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/interface-segre.png -------------------------------------------------------------------------------- /images/interpreter-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/interpreter-uml.png -------------------------------------------------------------------------------- /images/tree traversal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/tree traversal.png -------------------------------------------------------------------------------- /images/uml-aggregation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-aggregation.png -------------------------------------------------------------------------------- /images/uml-association.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-association.png -------------------------------------------------------------------------------- /images/uml-composition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-composition.png -------------------------------------------------------------------------------- /images/uml-dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-dependency.png -------------------------------------------------------------------------------- /images/uml-inheritance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-inheritance.png -------------------------------------------------------------------------------- /images/uml-realization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-realization.png -------------------------------------------------------------------------------- /template-method/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/template-method/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /abstract-factory/typescript/command.ts: -------------------------------------------------------------------------------- 1 | export abstract class Command { 2 | public abstract executeCommand(query: string): void 3 | } 4 | -------------------------------------------------------------------------------- /factory/python/user.py: -------------------------------------------------------------------------------- 1 | class User: 2 | # Burada bildirimin gideceği kullanıcıya 3 | # ait bilgiler bulunacaktır. 4 | pass 5 | -------------------------------------------------------------------------------- /images/interface-segre-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/interface-segre-2.png -------------------------------------------------------------------------------- /images/single-res-person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/single-res-person.png -------------------------------------------------------------------------------- /TasarimDesenleriTurkceKaynak.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/TasarimDesenleriTurkceKaynak.pdf -------------------------------------------------------------------------------- /factory/typescript/user.ts: -------------------------------------------------------------------------------- 1 | export class User { 2 | // Burada bildirimin gideceği kullanıcıya 3 | // ait bilgiler bulunacaktır. 4 | } 5 | -------------------------------------------------------------------------------- /flyweight/java/BoxColor.java: -------------------------------------------------------------------------------- 1 | package Flyweight; 2 | 3 | // Kutuların rengini tutmaktadır. 4 | enum BoxColor { 5 | BLACK, 6 | BLUE 7 | } -------------------------------------------------------------------------------- /images/abstract-factory-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/abstract-factory-uml.png -------------------------------------------------------------------------------- /images/developer-yusuf-halit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/developer-yusuf-halit.png -------------------------------------------------------------------------------- /images/single-res-person-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/single-res-person-2.png -------------------------------------------------------------------------------- /images/template-method-uml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/template-method-uml.png -------------------------------------------------------------------------------- /chain-of-responsibility/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/yusufyilmazfr/tasarim-desenleri-turkce-kaynak/chain-of-responsibility/go 2 | 3 | go 1.18 4 | -------------------------------------------------------------------------------- /flyweight/typescript/box-color.ts: -------------------------------------------------------------------------------- 1 | // Kutuların rengini tutmaktadır. 2 | export enum BoxColor { 3 | BLACK = 'Black', 4 | BLUE = 'Blue', 5 | } 6 | -------------------------------------------------------------------------------- /images/chain-of-responsibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/chain-of-responsibility.png -------------------------------------------------------------------------------- /images/uml-poly-logger-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/uml-poly-logger-service.png -------------------------------------------------------------------------------- /abstract-factory/go/connection.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type Connection interface { 4 | openConnection() error 5 | closeConnection() error 6 | } 7 | -------------------------------------------------------------------------------- /images/adapter-uml-left-to-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/adapter-uml-left-to-right.png -------------------------------------------------------------------------------- /bridge/kotlin/Message.kt: -------------------------------------------------------------------------------- 1 | package Bridge 2 | 3 | abstract class Message(protected var messageSender: IMessageSender) { 4 | abstract fun send() 5 | } 6 | -------------------------------------------------------------------------------- /factory/typescript/notify.interface.ts: -------------------------------------------------------------------------------- 1 | import {User} from "./user"; 2 | 3 | export interface INotify { 4 | sendNotification(user: User): void; 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/bridge-without-imp-and-abst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/bridge-without-imp-and-abst.png -------------------------------------------------------------------------------- /images/tasarim-desenleri-turkce-kaynak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/tasarim-desenleri-turkce-kaynak.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-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hakkisagdic/tasarim-desenleri-turkce-kaynak/HEAD/images/tasarim-desenleri-turkce-kaynak-2.png -------------------------------------------------------------------------------- /chain-of-responsibility/python/image.py: -------------------------------------------------------------------------------- 1 | class Image: 2 | def __init__(self, name, extension): 3 | self.name = name 4 | self.extension = extension 5 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /abstract-factory/python/mysql_command.py: -------------------------------------------------------------------------------- 1 | from command import Command 2 | 3 | 4 | class MysqlCommand(Command): 5 | def execute_command(self, query): 6 | pass 7 | -------------------------------------------------------------------------------- /abstract-factory/python/oracle_command.py: -------------------------------------------------------------------------------- 1 | from command import Command 2 | 3 | 4 | class OracleCommand(Command): 5 | def execute_command(self, query): 6 | pass 7 | -------------------------------------------------------------------------------- /chain-of-responsibility/go/base-handler.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type BaseHandler interface { 4 | SetNextHandler(nextHandler BaseHandler) 5 | HandleRequest(img Image) 6 | } 7 | -------------------------------------------------------------------------------- /bridge/python/text_message.py: -------------------------------------------------------------------------------- 1 | from message import Message 2 | 3 | 4 | class TextMessage(Message): 5 | 6 | def send(self): 7 | self.message_sender.send_message(self) 8 | -------------------------------------------------------------------------------- /abstract-factory/typescript/connection.ts: -------------------------------------------------------------------------------- 1 | export abstract class Connection { 2 | public abstract openConnection(): boolean; 3 | public abstract closeConnection(): boolean; 4 | } 5 | -------------------------------------------------------------------------------- /bridge/python/email_message.py: -------------------------------------------------------------------------------- 1 | from message import Message 2 | 3 | 4 | class EmailMessage(Message): 5 | 6 | def send(self): 7 | self.message_sender.send_message(self) 8 | -------------------------------------------------------------------------------- /factory/php/INotify.php: -------------------------------------------------------------------------------- 1 | Yapısal tasarım desenleri, nesnelerin birbirleriyle yapısal olarak nasıl birleşecekleri üzerine durur. 2 | -------------------------------------------------------------------------------- /facade/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() { 4 | duygu := NewCustomer("Duygu", "Kaya") 5 | 6 | creditCard := NewCreditCardFacade() 7 | creditCard.CreateCreditCard(duygu) 8 | } 9 | -------------------------------------------------------------------------------- /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) -------------------------------------------------------------------------------- /prototype/go/cloneable-prototype.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Klonlamak istediğimiz sınıflarımıza uygulayacağımız arayüz. 4 | type CloneablePrototype interface { 5 | clone() CloneablePrototype 6 | } 7 | -------------------------------------------------------------------------------- /prototype/python/clonable_prototype.py: -------------------------------------------------------------------------------- 1 | from abc import ABC 2 | from copy import deepcopy 3 | 4 | 5 | class ClonablePrototype(ABC): 6 | 7 | def clone(self): 8 | return deepcopy(self) 9 | -------------------------------------------------------------------------------- /factory/python/app.py: -------------------------------------------------------------------------------- 1 | from notify import NotifyFactory 2 | 3 | if __name__ == '__main__': 4 | notify_factory = NotifyFactory() 5 | notify = notify_factory.create_notify('mail') 6 | notify.send_notify() 7 | -------------------------------------------------------------------------------- /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/php/Command.php: -------------------------------------------------------------------------------- 1 | ) { 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 | -------------------------------------------------------------------------------- /interpreter/python/job_expression.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | from context import Context 3 | 4 | 5 | class JobExpression(ABC): 6 | @abstractmethod 7 | def interpret(self, context: Context): 8 | pass 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 | } -------------------------------------------------------------------------------- /bridge/python/text_message_sender.py: -------------------------------------------------------------------------------- 1 | from message_sender import MessageSender 2 | 3 | 4 | class TextMessageCenter(MessageSender): 5 | def send_message(self, message): 6 | print("TextMessageSender: Sending text message...") 7 | -------------------------------------------------------------------------------- /strategy/go/payment.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Payment UML diyagramındaki Strategy arayüzüne denk gelmektedir. 4 | // Benzer işlemleri yapan sınıflar bu arayüzden türeyecektir. 5 | type Payment interface { 6 | Pay(amount float64) 7 | } 8 | -------------------------------------------------------------------------------- /strategy/typescript/payment.interface.ts: -------------------------------------------------------------------------------- 1 | // UML diyagramındaki Strategy arayüzüne denk gelmektedir. 2 | // Benzer işlemleri yapan sınıflar bu arayüzden türeyecektir. 3 | export interface IPayment { 4 | pay(amount: number): void; 5 | } 6 | -------------------------------------------------------------------------------- /abstract-factory/php/index.php: -------------------------------------------------------------------------------- 1 | removeById(1); 8 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /bridge/python/email_message_sender.py: -------------------------------------------------------------------------------- 1 | from message_sender import MessageSender 2 | 3 | 4 | class EmailMessageSender(MessageSender): 5 | def send_message(self, message): 6 | print("EmailMessageSender: Sending email message...") 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 | -------------------------------------------------------------------------------- /factory/php/index.php: -------------------------------------------------------------------------------- 1 | createNotify("MAIL"); 9 | 10 | $notify->sendNotification(new User()); 11 | -------------------------------------------------------------------------------- /interpreter/go/job-expression.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // JobExpression yorumlama işleminin tanımlandığı arayüz. 4 | // UML diyagramındaki Expression arayüzüne denk gelmektedir. 5 | type JobExpression interface { 6 | Interpret(ctx *Context) 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 | -------------------------------------------------------------------------------- /memento/typescript/text-memento.ts: -------------------------------------------------------------------------------- 1 | // Saklamak istediğimiz değerlerin tanımlandığı yerdir. 2 | // UML diyagramındaki Memento yapısına denk gelir. 3 | export class TextMemento { 4 | public text: string; 5 | public cursorPosition: number; 6 | } 7 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /factory/go/user.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type User struct { 4 | // Burada bildirimin gideceği kullanıcıya 5 | // ait bilgiler bulunacaktır. 6 | name string 7 | } 8 | 9 | func newUser(name string) User { 10 | return User{name: name} 11 | } 12 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /abstract-factory/typescript/database-factory.interface.ts: -------------------------------------------------------------------------------- 1 | import {Connection} from "./connection"; 2 | import {Command} from "./command"; 3 | 4 | export interface IDatabaseFactory { 5 | createConnection(): Connection; 6 | createCommand(): Command; 7 | } 8 | -------------------------------------------------------------------------------- /adapter/typescript/json-serializer.interface.ts: -------------------------------------------------------------------------------- 1 | // UML diyagramındaki Target'a denk gelmektedir. 2 | // Sistem bu arayüzü uygulayarak çalışmaktadır. 3 | export interface IJsonSerializer { 4 | serializeObject(obj: T): string; 5 | } 6 | -------------------------------------------------------------------------------- /command/typescript/order-command.interface.ts: -------------------------------------------------------------------------------- 1 | // Temel arayüzdür. 2 | // Komutların çalıştırılması için temel metotu içermektedir. 3 | // UML diyagramındaki Command arayüzüne denk gelmektedir. 4 | export interface IOrderCommand { 5 | execute(): void; 6 | } 7 | -------------------------------------------------------------------------------- /factory/typescript/mail-notify.ts: -------------------------------------------------------------------------------- 1 | import {INotify} from "./notify.interface"; 2 | import {User} from "./user"; 3 | 4 | export class MailNotify implements INotify { 5 | sendNotification(user: User): void { 6 | // Mail gönderme operasyonu. 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /factory/typescript/sms-notify.ts: -------------------------------------------------------------------------------- 1 | import {INotify} from "./notify.interface"; 2 | import {User} from "./user"; 3 | 4 | export class SmsNotify implements INotify { 5 | sendNotification(user: User): void { 6 | // SMS gönderme operasyonu. 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /abstract-factory/python/mysql_connection.py: -------------------------------------------------------------------------------- 1 | from connection import Connection 2 | 3 | 4 | class MysqlConnection(Connection): 5 | def open_connection(self): 6 | return True 7 | 8 | def close_connection(self): 9 | return True 10 | -------------------------------------------------------------------------------- /abstract-factory/python/oracle_connection.py: -------------------------------------------------------------------------------- 1 | from connection import Connection 2 | 3 | 4 | class OracleConnection(Connection): 5 | def open_connection(self): 6 | return True 7 | 8 | def close_connection(self): 9 | return True 10 | -------------------------------------------------------------------------------- /adapter/go/json-serializer.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // JSONSerializer interface UML diyagramındaki Target'a denk gelmektedir. 4 | // Sistem bu arayüzü uygulayarak çalışmaktadır. 5 | type JSONSerializer interface { 6 | serializeObject(object []byte) string 7 | } 8 | -------------------------------------------------------------------------------- /command/go/order-command.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // OrderCommand 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 | type OrderCommand interface { 7 | Execute() 8 | } 9 | -------------------------------------------------------------------------------- /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/go/orderable-mask.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // OrderableMask 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 | type OrderableMask interface { 6 | CreateOrder(p Person) 7 | } 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 | } -------------------------------------------------------------------------------- /state/go/vending-machine-state.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // VendingMachineState Davranışların tanımlandığı arayüzdür. 4 | // UML diyagramındaki State yapısına denk gelmektedir. 5 | type VendingMachineState interface { 6 | HandleState(context *VendingMachine) 7 | } 8 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /abstract-factory/php/Connection.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 | -------------------------------------------------------------------------------- /abstract-factory/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {CustomOperation} from "./custom-operation"; 2 | import {OracleDatabaseFactory} from "./oracle-database-factory"; 3 | 4 | function main() { 5 | const customOperation = new CustomOperation(new OracleDatabaseFactory()); 6 | customOperation.removeById(1); 7 | 8 | console.log('Hello World!'); 9 | } 10 | -------------------------------------------------------------------------------- /bridge/go/text-message-sender.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type TextMessageSender struct{} 6 | 7 | func NewTextMessageSender() *TextMessageSender { 8 | return &TextMessageSender{} 9 | } 10 | 11 | func (s *TextMessageSender) sendMessage(message Message) { 12 | fmt.Println("TextMessageSender: Sending text message...") 13 | } 14 | -------------------------------------------------------------------------------- /bridge/go/text-message.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type TextMessage struct { 4 | messageSender MessageSender 5 | } 6 | 7 | func NewTextMessage(messageSender MessageSender) *TextMessage { 8 | return &TextMessage{ 9 | messageSender: messageSender, 10 | } 11 | } 12 | 13 | func (m *TextMessage) Send() { 14 | m.messageSender.sendMessage(m) 15 | } 16 | -------------------------------------------------------------------------------- /chain-of-responsibility/go/image.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Image uygulama süresince resimlerimizi temsil edecek sınıf. 4 | type Image struct { 5 | Name string 6 | Extension string 7 | } 8 | 9 | func NewImage(name string, extension string) *Image { 10 | return &Image{ 11 | Name: name, 12 | Extension: extension, 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /mediator/typescript/chat-room.interface.ts: -------------------------------------------------------------------------------- 1 | import {User} from "./user"; 2 | 3 | // Colleague (User) nesneler arasındaki iletişim arayüzünü tanımlar. 4 | // UML diyagramındaki Mediator arayüzüne denk gelmektedir. 5 | export interface IChatRoomMediator { 6 | sendMessage(message: string, userId: number): void; 7 | addUserInRoom(user: User): void; 8 | } 9 | -------------------------------------------------------------------------------- /observer/typescript/observer-user.interface.ts: -------------------------------------------------------------------------------- 1 | import {ProductUpdateMessage} from "./product-update-message"; 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 | export interface IObserverUser { 6 | sendNotification(message: ProductUpdateMessage): void; 7 | } 8 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /abstract-factory/php/OracleCommand.php: -------------------------------------------------------------------------------- 1 | %d\n", ctx.Formula, ctx.TotalPoint) 15 | // output: GGML :> 18000 16 | } 17 | -------------------------------------------------------------------------------- /interpreter/python/app.py: -------------------------------------------------------------------------------- 1 | from context import Context 2 | from job_manager import JobManager 3 | 4 | if __name__ == '__main__': 5 | context = Context() 6 | context.formula = "GGML" 7 | 8 | job_manager = JobManager() 9 | job_manager.run_expression(context) 10 | print(f"{context.formula} :> {context.total_point} ") 11 | # output: GGML :> 18000 12 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /visitor/python/encyclopedia.py: -------------------------------------------------------------------------------- 1 | from book import Book 2 | 3 | 4 | class Encyclopedia(Book): 5 | """ 6 | UML diyagramındaki Element'ten türer. 7 | Accept metoduna bulunduğu nesne örneği gönderilir. 8 | UML diyagramındaki ConcreteElement yapısına denk gelir. 9 | """ 10 | 11 | def accept(self, visitor): 12 | visitor.export_visit(self) 13 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /docs/tasarim-desenleri/creational-tasarim-desenleri/creational-tasarim-desenleri.md: -------------------------------------------------------------------------------- 1 | > Oluşturucu tasarım desenleri, bir nesnenin ya da grubun esnek ve tekrar kullanılabilir biçimde nasıl oluşturucağı ile ilgilenir. 2 | 3 | - [Singleton](#-singleton) 4 | - [Factory](#-factory) 5 | - [Abstract Factory](#-abstract-factory) 6 | - [Builder](#%EF%B8%8F-builder) 7 | - [Prototype](#-prototype) -------------------------------------------------------------------------------- /singleton/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | firstInstanceRequest := Database.getInstance() 7 | secondInstanceRequest := Database.getInstance() 8 | 9 | isEquals := firstInstanceRequest == secondInstanceRequest 10 | 11 | fmt.Printf("Database referance is equals: %v", isEquals) //output: Database reference is equals: true 12 | } 13 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /adapter/python/app.py: -------------------------------------------------------------------------------- 1 | from custom_operation import CustomOperation 2 | from custom_serializer_adapter import CustomSerializerAdapter 3 | 4 | if __name__ == '__main__': 5 | custom_operator = CustomOperation(CustomSerializerAdapter()) 6 | serialized_object = custom_operator.serialize_object(object()) 7 | print(serialized_object) # output: serialized with CustomSerializer 8 | -------------------------------------------------------------------------------- /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/go/employee-aggreagate.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // EmployeeAggregate 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 | type EmployeeAggregate interface { 7 | CreateIterator() Iterator 8 | } 9 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /observer/typescript/product-update-message.ts: -------------------------------------------------------------------------------- 1 | // Bildirilecek olan nesnelere paremetre olarak giden mesaj. 2 | // UML diyagramı ile ilgisi yoktur. 3 | export class ProductUpdateMessage { 4 | public productName: string; 5 | public message: string; 6 | 7 | public toString(): string { 8 | return `${this.productName} updated. Message: ${this.message}`; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /adapter/python/custom_operation.py: -------------------------------------------------------------------------------- 1 | from json_serializer import JsonSerializer 2 | 3 | 4 | class CustomOperation: 5 | _json_serializer: JsonSerializer 6 | 7 | def __init__(self, json_serializer: JsonSerializer): 8 | self._json_serializer = json_serializer 9 | 10 | def serialize_object(self, obj): 11 | return self._json_serializer.serialize_object(obj) 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /iterator/typescript/employee.ts: -------------------------------------------------------------------------------- 1 | // Liste üzerinde gezilecek olan elamnı temsil eden sınıf. 2 | export class Employee { 3 | public id: number; 4 | public firstName: string; 5 | public lastName: string; 6 | 7 | constructor(id: number, firstName: string, lastName: string) { 8 | this.id = id; 9 | this.firstName = firstName; 10 | this.lastName = lastName; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /memento/python/text_memento.py: -------------------------------------------------------------------------------- 1 | class TextMemento: 2 | """ 3 | Saklamak istediğimiz değerlerin tanımlandığı yerdir. 4 | UML diyagramındaki Memento yapısına denk gelir. 5 | """ 6 | text: str 7 | cursor_position: int 8 | 9 | def __init__(self, text: str, cursor_position: int): 10 | self.text = text 11 | self.cursor_position = cursor_position 12 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /prototype/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {Employee} from "./employee"; 2 | 3 | function main() { 4 | const gulizar = new Employee("Gülizar", "Yılmaz"); 5 | const cloneGulizar = gulizar.clone(); 6 | 7 | // Aynı nesne örneklerini farklı referanslarda tutuyor. 8 | // Birbirinin aynısı ve farklı referanslarda olan nesneler elde ettik. 9 | console.log(gulizar === cloneGulizar); 10 | } 11 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /abstract-factory/go/mysql-command.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type mysqlCommand struct{} 6 | 7 | func newMySQLCommand() *mysqlCommand { 8 | return &mysqlCommand{} 9 | } 10 | 11 | func (c *mysqlCommand) executeCommand(query string) { 12 | // Gelen sorgunun çalıştırılması için 13 | // Gerekli operasyonel işlemler... 14 | fmt.Println("MySQL Command Executed") 15 | } 16 | -------------------------------------------------------------------------------- /abstract-factory/python/mysql_database_factory.py: -------------------------------------------------------------------------------- 1 | from database_factory import DatabaseFactory 2 | from mysql_connection import MysqlConnection 3 | from mysql_command import MysqlCommand 4 | 5 | 6 | class MysqlDatabaseFactory(DatabaseFactory): 7 | def create_command(self): 8 | return MysqlCommand() 9 | 10 | def create_connection(self): 11 | return MysqlConnection() 12 | -------------------------------------------------------------------------------- /bridge/typescript/message.ts: -------------------------------------------------------------------------------- 1 | import {IMessageSender} from "./message-sender.interface"; 2 | 3 | // UML diyagramındaki Abstraction kısmına denk gelmektedir. 4 | // Implementor (IMessageSender) arayüzünün referansını tutmaktadır. 5 | export abstract class Message { 6 | protected constructor(protected readonly messageSender: IMessageSender) {} 7 | 8 | public abstract send(): void; 9 | } 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /flyweight/typescript/box.ts: -------------------------------------------------------------------------------- 1 | import { BoxColor } from "./box-color"; 2 | 3 | // Nesnenin ortak özelliklerini tutan sınıftır. 4 | // UML diyagramındaki Flyweight yapısına denk gelmektedir. 5 | export abstract class Box { 6 | public width: number; 7 | public height: number; 8 | public boxColor: BoxColor; 9 | 10 | public abstract draw(locationX: number, locationY: number): void; 11 | } 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /abstract-factory/go/oracle-command.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | type oracleCommand struct{} 6 | 7 | func newOracleCommand() *oracleCommand { 8 | return &oracleCommand{} 9 | } 10 | 11 | func (c *oracleCommand) executeCommand(query string) { 12 | // Gelen sorgunun çalıştırılması için 13 | // Gerekli operasyonel işlemler... 14 | fmt.Println("Oracle Command Executed") 15 | } 16 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /adapter/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {CustomOperation} from "./custom-operation"; 2 | import {CustomSerializerAdapter} from "./custom-serializer-adapter"; 3 | 4 | function main(): void { 5 | const customOperation = new CustomOperation(new CustomSerializerAdapter()); 6 | const serializedObject = customOperation.serializeObject({hello: 'World!'}); 7 | 8 | console.log(serializedObject); 9 | } 10 | -------------------------------------------------------------------------------- /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 | ${context.totalPoint}`); 12 | // output: GGML :> 18000 13 | } 14 | -------------------------------------------------------------------------------- /state/c-sharp/VendingMachineState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace State 6 | { 7 | // Davranışların tanımlandığı soyut sınıftır. 8 | // UML diyagramındaki State yapısına denk gelmektedir. 9 | public abstract class VendingMachineState 10 | { 11 | public abstract void HandleState(VendingMachine context); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /command/go/sell-stock.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 4 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 5 | type sellStock struct { 6 | sm *StockManager 7 | } 8 | 9 | func NewSellStock(sm *StockManager) *sellStock { 10 | return &sellStock{ 11 | sm: sm, 12 | } 13 | } 14 | 15 | func (s sellStock) Execute() { 16 | s.sm.Sell() 17 | } 18 | -------------------------------------------------------------------------------- /iterator/go/employee.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Employee Liste uzerinde gezilecek olan elemani temsil eden sinif. 4 | type Employee struct { 5 | ID int 6 | FirstName string 7 | LastName string 8 | } 9 | 10 | func NewEmployee(id int, firstName string, lastName string) *Employee { 11 | return &Employee{ 12 | ID: id, 13 | FirstName: firstName, 14 | LastName: lastName, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /iterator/typescript/iterator.interface.ts: -------------------------------------------------------------------------------- 1 | // Koleksiyon üzerinde dolaşmak için operasyonların tanımlandığı arayüzdür. 2 | // Bir sonraki elemana geçme, bir sonraki elemanın olup olmadığı gibi. 3 | // UML diyagramındaki Iterator arayüzüne denk gelmektedir. 4 | // Generic bir yapı sağlanarak birçok yerde kullanılması sağlanır. 5 | export interface IIterator { 6 | hasNext(): boolean; 7 | getCurrentItem(): T; 8 | } 9 | -------------------------------------------------------------------------------- /observer/c-sharp/IObserverUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Observer 6 | { 7 | // Değişimden etkilenecek, izleyecek olan sınıfların uyguladığı arayüzdür. 8 | // UML diyagramındaki Observer yapısına denk gelmektedir. 9 | interface IObserverUser 10 | { 11 | void SendNotification(ProductUpdateMessage message); 12 | } 13 | } -------------------------------------------------------------------------------- /observer/kotlin/ObserverUser.kt: -------------------------------------------------------------------------------- 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 | internal class ObserverUser : IObserverUser { 7 | override fun sendNotification(message: ProductUpdateMessage) { 8 | println(message.toString()) 9 | } 10 | } -------------------------------------------------------------------------------- /prototype/kotlin/Employee.kt: -------------------------------------------------------------------------------- 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 | class Employee : CloneablePrototype { 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 | } -------------------------------------------------------------------------------- /prototype/typescript/cloneable-prototype.interface.ts: -------------------------------------------------------------------------------- 1 | // Klonlamak istediğimiz sınıflarımıza uygulayacağımız arayüz. 2 | // Farklı sınıflarda da kullanılması için Generic bir yapı oluşturuldu. 3 | // Generic yapı sayesinde dinamik olarak tip dönüşümü sağlanacaktır. 4 | // Bu sayede farklı sınıflara da bu deseni uygulama şansı doğuyor. 5 | export interface ICloneablePrototype { 6 | clone(): TPrototype; 7 | } 8 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /singleton/python/database.py: -------------------------------------------------------------------------------- 1 | class _Singleton(type): 2 | _instances = {} 3 | 4 | def __call__(cls, *args, **kwargs): 5 | print(cls._instances) 6 | if cls not in cls._instances: 7 | instance = super().__call__(*args, **kwargs) 8 | cls._instances[cls] = instance 9 | return cls._instances[cls] 10 | 11 | 12 | class Database(metaclass=_Singleton): 13 | pass 14 | -------------------------------------------------------------------------------- /singleton/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {Database} from "./database"; 2 | 3 | function main() { 4 | const firstInstanceRequest = Database.getInstance(); 5 | const secondInstanceRequest = Database.getInstance(); 6 | 7 | const isEquals = firstInstanceRequest === secondInstanceRequest; 8 | 9 | console.log(`Database reference is equals: ${isEquals}`); 10 | //output: Database reference is equals: True 11 | } 12 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /adapter/typescript/custom-serializer.ts: -------------------------------------------------------------------------------- 1 | // Sisteme daha sonradan dahil olan yapı. 2 | // Sistemin kullandığı arayüzü uygulamamaktadır. 3 | export class CustomSerializer { 4 | public serialize(obj: object): string { 5 | // Gelen nesneyi serilize etmek için temel operasyonel işlemler.. 6 | // Daha sonradan da gerekli değerin geri döndürülmesi... 7 | return "serialized with CustomSerializer"; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /composite/go/product.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | // Somut yapımızdır. 6 | // UML diyagramındaki Leaf kısmına denk gelmektedir. 7 | // Hiyerarşinin en alt tabakasını temsil etmektedir. 8 | type product struct { 9 | name string 10 | } 11 | 12 | func NewProduct(name string) *product { 13 | return &product{name: name} 14 | } 15 | 16 | func (p *product) DrawHierarchy() { 17 | fmt.Println(p.name) 18 | } 19 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /singleton/go/database.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "sync" 5 | ) 6 | 7 | var lock = &sync.Mutex{} 8 | 9 | var Database *database 10 | 11 | type database struct { 12 | } 13 | 14 | func (d *database) getInstance() *database { 15 | if Database == nil { 16 | lock.Lock() 17 | defer lock.Unlock() 18 | if Database == nil { 19 | Database = &database{} 20 | } 21 | } 22 | 23 | return Database 24 | } 25 | -------------------------------------------------------------------------------- /visitor/python/book_export_visitor.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | 4 | class BookExportVisitor(ABC): 5 | """ 6 | Her ConcreteVisitor örneği için metot temsil eder. 7 | Parametre olarak Element sınıfından türeyen sınıfların örneğini alır. 8 | UML diyagramındaki Visitor yapısına denk gelir. 9 | """ 10 | 11 | @abstractmethod 12 | def export_visit(self, item): 13 | pass 14 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /adapter/go/custom-operation.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type customOperation struct { 4 | jsonSerializer JSONSerializer 5 | } 6 | 7 | func NewCustomOperation(jsonSerializer JSONSerializer) *customOperation { 8 | return &customOperation{ 9 | jsonSerializer: jsonSerializer, 10 | } 11 | } 12 | 13 | func (c *customOperation) SerializeObject(object []byte) string { 14 | return c.jsonSerializer.serializeObject(object) 15 | } 16 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /composite/python/product.py: -------------------------------------------------------------------------------- 1 | from catalog_component import CatalogComponent 2 | 3 | 4 | class Product(CatalogComponent): 5 | """ 6 | Somut yapımızdır. 7 | UML diyagramındaki Leaf kısmına denk gelmektedir. 8 | Hiyerarşinin en alt tabakasını temsil etmektedir. 9 | """ 10 | 11 | def __init__(self, name): 12 | self._name = name 13 | 14 | def draw_hierarchy(self): 15 | print(self._name) 16 | -------------------------------------------------------------------------------- /flyweight/python/box.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | from box_color import BoxColor 3 | 4 | 5 | class Box(ABC): 6 | """ 7 | Nesnenin ortak özelliklerini tutan sınıftır. 8 | UML diyagramındaki Flyweight yapısına denk gelmektedir. 9 | """ 10 | width: int 11 | height: int 12 | box_color: BoxColor 13 | 14 | @abstractmethod 15 | def draw(self, location_x, location_y): 16 | pass 17 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /mediator/go/chat-user.go: -------------------------------------------------------------------------------- 1 | package main 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 | type chatUser struct { 7 | User *User 8 | } 9 | 10 | func NewChatUser(mediator ChatRoom, id int, name string) *chatUser { 11 | return &chatUser{ 12 | User: NewUser(mediator, id, name), 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /visitor/typescript/book.ts: -------------------------------------------------------------------------------- 1 | import {IBookExportVisitor} from "./book-export-visitor.interface"; 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 | export abstract class Book { 7 | public name: string; 8 | public author: string; 9 | public categoryName: string; 10 | 11 | public abstract accept(visitor: IBookExportVisitor): void; 12 | } 13 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /composite/python/catalog_component.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | 4 | class CatalogComponent(ABC): 5 | """ 6 | Soyut yapımızdır. 7 | UML diyagramındaki Component kısmına denk gelmektedir. 8 | Diğer istemci sınıflar bu yapıyı uygular. 9 | Diğer sınıfların uygulayacağı hiyerarşiyi çizme metotunu içermektedir. 10 | """ 11 | 12 | @abstractmethod 13 | def draw_hierarchy(self): 14 | pass 15 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /proxy/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {Person} from "./person"; 2 | import {AuthenticatableMaskOrderProxy} from "./authenticatable-mask-order-proxy"; 3 | 4 | function main() { 5 | const semanur = new Person("11111111111", "İstanbul/Sancaktepe xxx-yyy-zzz"); 6 | const orderableMask = new AuthenticatableMaskOrderProxy(); 7 | 8 | orderableMask.createOrder(semanur); 9 | // output: Order created to İstanbul/Sancaktepe xxx-yyy-zzz. 10 | } 11 | -------------------------------------------------------------------------------- /strategy/go/item.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Item Sepette bulunan ürünleri temsil eden sınıf. 4 | // Ürün kodu ve fiyat bilgileri temel olarak yeterlidir. 5 | type Item struct { 6 | upcCode string 7 | price float64 8 | } 9 | 10 | func NewItem(upcCode string, price float64) *Item { 11 | return &Item{ 12 | upcCode: upcCode, 13 | price: price, 14 | } 15 | } 16 | 17 | func (i Item) GetPrice() float64 { 18 | return i.price 19 | } 20 | -------------------------------------------------------------------------------- /abstract-factory/php/IDatabaseFactory.php: -------------------------------------------------------------------------------- 1 | " + 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 | } -------------------------------------------------------------------------------- /visitor/typescript/magazine.ts: -------------------------------------------------------------------------------- 1 | import {Book} from "./book"; 2 | import {IBookExportVisitor} from "./book-export-visitor.interface"; 3 | 4 | // UML diyagramındaki Element'ten türer. 5 | // Accept metoduna bulunduğu nesne örneği gönderilir. 6 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 7 | export class Magazine extends Book { 8 | public accept(visitor: IBookExportVisitor): void { 9 | visitor.exportVisit(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /abstract-factory/python/app.py: -------------------------------------------------------------------------------- 1 | from custom_operation import CustomOperation 2 | from oracle_database_factory import OracleDatabaseFactory 3 | from mysql_database_factory import MysqlDatabaseFactory 4 | 5 | if __name__ == '__main__': 6 | custom_operation = CustomOperation(OracleDatabaseFactory()) 7 | custom_operation.remove_by_id(1) 8 | 9 | custom_operation = CustomOperation(MysqlDatabaseFactory()) 10 | custom_operation.remove_by_id(1) 11 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /prototype/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | func main() { 6 | gulizar := NewEmployee("Gülizar", "Yılmaz") 7 | cloneGulizar := gulizar.clone() 8 | 9 | // Aynı nesne örneklerini farklı referanslarda tutuyor. 10 | // Birbirinin aynısı ve farklı referanslarda olan nesneler elde ettik. 11 | fmt.Printf("Gulizar: %+v\n", gulizar) 12 | fmt.Printf("Clone Gulizar: %+v\n", cloneGulizar) 13 | fmt.Println(gulizar == cloneGulizar) 14 | } 15 | -------------------------------------------------------------------------------- /visitor/typescript/encyclopedia.ts: -------------------------------------------------------------------------------- 1 | import {Book} from "./book"; 2 | import {IBookExportVisitor} from "./book-export-visitor.interface"; 3 | 4 | // UML diyagramındaki Element'ten türer. 5 | // Accept metoduna bulunduğu nesne örneği gönderilir. 6 | // UML diyagramındaki ConcreteElement yapısına denk gelir. 7 | export class Encyclopedia extends Book { 8 | public accept(visitor: IBookExportVisitor): void { 9 | visitor.exportVisit(this); 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 | -------------------------------------------------------------------------------- /mediator/typescript/chat-user.ts: -------------------------------------------------------------------------------- 1 | import {User} from "./user"; 2 | import {IChatRoomMediator} from "./chat-room.interface"; 3 | 4 | // Colleague (User) soyutundan türer. 5 | // Mediator sayesinde diğer sınıf örnekler ile iletişim kurar. 6 | // UML diyagramındaki ConcreteColleague yapısına denk gelmektedir. 7 | export class ChatUser extends User { 8 | constructor(public chatRoomMediator: IChatRoomMediator) { 9 | super(chatRoomMediator); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /observer/python/abstract_observer_user.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | from product_update_message import ProductUpdateMessage 3 | 4 | 5 | class AbstractObserverUser(ABC): 6 | """ 7 | Değişimden etkilenecek, izleyecek olan sınıfların uyguladığı arayüzdür. 8 | UML diyagramındaki Observer yapısına denk gelmektedir. 9 | """ 10 | 11 | @abstractmethod 12 | def send_notification(self, message: ProductUpdateMessage): 13 | pass 14 | -------------------------------------------------------------------------------- /state/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() { 4 | vendingMachine := NewVendingMachine() 5 | vendingMachine.RequestProduct("COVID-19 MASKE", 2) 6 | // output: 7 | // initializeState: Ön hazırlıklar yapılıyor. 8 | // waitingState: Otomata herhangi bir aksiyon bekliyor. 9 | // preparingState: İstenilen ürün hazırlanıyor.Lütfen bekleyiniz 10 | // deliveryState: Ürün teslim ediliyor. 11 | // waitingState: Otomata herhangi bir aksiyon bekliyor. 12 | } 13 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /abstract-factory/go/mysql-database-factory.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // MySQL için ilişkili nesneler üretildi. 4 | type mysqlDatabaseFactory struct{} 5 | 6 | func NewMySQLDatabaseFactory() *mysqlDatabaseFactory { 7 | return &mysqlDatabaseFactory{} 8 | } 9 | 10 | func (f *mysqlDatabaseFactory) createConnection() Connection { 11 | return newMySQLConnection() 12 | } 13 | 14 | func (f *mysqlDatabaseFactory) createCommand() Command { 15 | return newMySQLCommand() 16 | } 17 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /iterator/python/employee_aggregate.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | 4 | class EmployeeAggregate(ABC): 5 | """ 6 | Iterator arayüzünü uygulayan sınıf örneklerini elde etmek için metot içerir. 7 | Bu sayede çeşitli Iterator arayüzünü uygulayan sınıfların örneklerini elde edebiliriz. 8 | UML diyagramındaki Aggregate arayüzüne denk gelmektedir. 9 | """ 10 | 11 | @abstractmethod 12 | def create_iterator(self): 13 | pass 14 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /template-method/python/xml_analyzer_base.py: -------------------------------------------------------------------------------- 1 | from data_analyzer_base import DataAnalyzerBase 2 | 3 | 4 | class XmlDataAnalyzer(DataAnalyzerBase): 5 | """ 6 | UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 7 | UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 8 | """ 9 | 10 | def export_result(self, result: object): 11 | # Durumun XML'e dönüştürülmesi işlemleri yer alacaktır. 12 | print("XML exported.") 13 | -------------------------------------------------------------------------------- /template-method/typescript/xml-data-analyzer.ts: -------------------------------------------------------------------------------- 1 | import {DataAnalyzerBase} from "./data-analyzer-base"; 2 | 3 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 4 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 5 | export class XmlDataAnalyzer extends DataAnalyzerBase { 6 | public exportResult(result: object): void { 7 | // Durumun XML'e dönüştürülmesi işlemleri yer alacaktır. 8 | console.log("XML exported."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /visitor/typescript/book-export-visitor.interface.ts: -------------------------------------------------------------------------------- 1 | import {Encyclopedia} from "./encyclopedia"; 2 | import {Magazine} from "./magazine"; 3 | 4 | // Her ConcreteVisitor örneği için metot temsil eder. 5 | // Parametre olarak Element sınıfından türeyen sınıfların örneğini alır. 6 | // UML diyagramındaki Visitor yapısına denk gelir. 7 | export interface IBookExportVisitor { 8 | exportVisit(encyclopedia: Encyclopedia): void; 9 | exportVisit(magazine: Magazine): void; 10 | } 11 | -------------------------------------------------------------------------------- /abstract-factory/go/oracle-database-factory.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Oracle için ilişkili nesneler üretildi. 4 | type oracleDatabaseFactory struct{} 5 | 6 | func NewOracleDatabaseFactory() *oracleDatabaseFactory { 7 | return &oracleDatabaseFactory{} 8 | } 9 | 10 | func (f *oracleDatabaseFactory) createConnection() Connection { 11 | return newOracleConnection() 12 | } 13 | 14 | func (f *oracleDatabaseFactory) createCommand() Command { 15 | return newOracleCommand() 16 | } 17 | -------------------------------------------------------------------------------- /iterator/typescript/employee-aggregate.interface.ts: -------------------------------------------------------------------------------- 1 | import {IIterator} from "./iterator.interface"; 2 | import {Employee} from "./employee"; 3 | 4 | // Iterator arayüzünü uygulayan sınıf örneklerini elde etmek için metot içerir. 5 | // Bu sayede çeşitli Iterator arayüzünü uygulayan sınıfların örneklerini elde edebiliriz. 6 | // UML diyagramındaki Aggregate arayüzüne denk gelmektedir. 7 | export interface IEmployeeAggregate { 8 | createIterator(): IIterator; 9 | } 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /template-method/python/html_analyzer_base.py: -------------------------------------------------------------------------------- 1 | from data_analyzer_base import DataAnalyzerBase 2 | 3 | 4 | class HtmlDataAnalyzer(DataAnalyzerBase): 5 | """ 6 | UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 7 | UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 8 | """ 9 | 10 | def export_result(self, result: object): 11 | # Durumun HTML'e dönüştürülmesi işlemleri yer alacaktır. 12 | print("HTML exported.") 13 | -------------------------------------------------------------------------------- /template-method/typescript/html-data-analyzer.ts: -------------------------------------------------------------------------------- 1 | import {DataAnalyzerBase} from "./data-analyzer-base"; 2 | 3 | // UML diyagramındaki AbstractClass (DataAnalyzerBase) sınıfından türer. 4 | // UML diyagramındaki ConcreteClass yapısına denk gelmektedir. 5 | export class HtmlDataAnalyzer extends DataAnalyzerBase { 6 | public exportResult(result: object): void { 7 | // Durumun HTML'e dönüştürülmesi işlemleri yer alacaktır. 8 | console.log("HTML exported."); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bridge/typescript/text-message-sender.ts: -------------------------------------------------------------------------------- 1 | import {IMessageSender} from "./message-sender.interface"; 2 | import {Message} from "./message"; 3 | 4 | // UML diyagramındaki ConcreteImplementor (TextMessageSender) kısmına denk gelmektedir. 5 | // Implementor arayüzünü (IMessageSender) uygular. 6 | export class TextMessageSender implements IMessageSender { 7 | public sendMessage(message: Message): void { 8 | console.log('TextMessageSender: Sending text message...'); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /observer/go/observer-user.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | // Observer arayüzünü uygulayan, değişimi takip eden sınıflardır. 6 | // Değişim update metotu ile bildirilir. 7 | // UML diyagramındaki ConcreteObserver yapısına denk gelmektedir. 8 | type observerUser struct{} 9 | 10 | func NewObserverUser() *observerUser { 11 | return &observerUser{} 12 | } 13 | 14 | func (u observerUser) SendNotification(msg ProductUpdateMessage) { 15 | fmt.Println(msg.ToString()) 16 | } 17 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /bridge/typescript/email-message-sender.ts: -------------------------------------------------------------------------------- 1 | import {IMessageSender} from "./message-sender.interface"; 2 | import {Message} from "./message"; 3 | 4 | // UML diyagramındaki ConcreteImplementor (EmailMessageSender) kısmına denk gelmektedir. 5 | // Implementor arayüzünü (IMessageSender) uygular. 6 | export class EmailMessageSender implements IMessageSender { 7 | public sendMessage(message: Message): void { 8 | console.log('EmailMessageSender: Sending email message...'); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /visitor/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() { 4 | earth := NewEncyclopedia("Big Earth!", "Jose S. Massey", "Encyclopedia") 5 | daily := NewMagazine("Daily Magazine", "Wayne D. Eaking", "Magazine") 6 | 7 | xmlExport := NewXMLExportVisitor() 8 | jsonExport := NewJSONExportVisitor() 9 | 10 | earth.Accept(xmlExport) 11 | daily.Accept(jsonExport) 12 | 13 | // output: 14 | // Big Earth!exported by XmlExportVisitor 15 | // Daily Magazine exported by JsonExportVisitor 16 | } 17 | -------------------------------------------------------------------------------- /mediator/python/abstract_chat_room_mediator.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | 4 | class AbstractChatRoomMediator(ABC): 5 | """ 6 | Colleague (User) nesneler arasındaki iletişim arayüzünü tanımlar. 7 | UML diyagramındaki Mediator arayüzüne denk gelmektedir. 8 | """ 9 | 10 | @abstractmethod 11 | def send_message(self, message: str, user_id: int): 12 | pass 13 | 14 | @abstractmethod 15 | def add_user_in_room(self, user): 16 | pass 17 | -------------------------------------------------------------------------------- /chain-of-responsibility/python/base_handler.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from abc import ABC, abstractmethod 4 | from image import Image 5 | 6 | 7 | class BaseHandler(ABC): 8 | """ 9 | SYB: Abstract handlerin sahip olması gereken yapiyi tanımlıyor. 10 | """ 11 | 12 | @abstractmethod 13 | def set_next_handler(self, next_handler: BaseHandler): 14 | pass 15 | 16 | @abstractmethod 17 | def handle_request(self, image: Image): 18 | pass 19 | -------------------------------------------------------------------------------- /composite/typescript/product.ts: -------------------------------------------------------------------------------- 1 | import {ICatalogComponent} from "./catalog-component.interface"; 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 | export class Product implements ICatalogComponent { 7 | private readonly name: string; 8 | 9 | constructor(name: string) { 10 | this.name = name; 11 | } 12 | 13 | public drawHierarchy(): void { 14 | console.log(this.name); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /abstract-factory/typescript/mysql-connection.ts: -------------------------------------------------------------------------------- 1 | import {Connection} from "./connection"; 2 | 3 | export class MysqlConnection extends Connection { 4 | public closeConnection(): boolean { 5 | // MySQL veri tabanı bağlantısının açılması için 6 | // Gerekli operasyonel işlemler... 7 | return true; 8 | } 9 | 10 | public openConnection(): boolean { 11 | // MySQL veri tabanı bağlantısının kapatılması için 12 | // Gerekli operasyonel işlemler... 13 | return true; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /bridge/typescript/email-message.ts: -------------------------------------------------------------------------------- 1 | import {Message} from "./message"; 2 | import {IMessageSender} from "./message-sender.interface"; 3 | 4 | // UML diyagramındaki RefinedAbstraction kısmına denk gelmektedir. 5 | // Abstraction (Message) sınıfından türer. 6 | export class EmailMessage extends Message { 7 | constructor(protected readonly messageSender: IMessageSender) { 8 | super(messageSender); 9 | } 10 | 11 | public send(): void { 12 | this.messageSender.sendMessage(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /bridge/typescript/text-message.ts: -------------------------------------------------------------------------------- 1 | import {Message} from "./message"; 2 | import {IMessageSender} from "./message-sender.interface"; 3 | 4 | // UML diyagramındaki RefinedAbstraction kısmına denk gelmektedir. 5 | // Abstraction (Message) sınıfından türer. 6 | export class TextMessage extends Message { 7 | constructor(protected readonly messageSender: IMessageSender) { 8 | super(messageSender); 9 | } 10 | 11 | public send(): void { 12 | this.messageSender.sendMessage(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /interpreter/typescript/developer-expression.ts: -------------------------------------------------------------------------------- 1 | import {IJobExpression} from "./job-expression.interface"; 2 | import {Context} from "./context"; 3 | 4 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 5 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 6 | export class DeveloperExpression implements IJobExpression { 7 | public interpret(context: Context): void { 8 | if(context.formula.includes('G')) { 9 | context.totalPoint += 4000; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /interpreter/typescript/team-lead-expression.ts: -------------------------------------------------------------------------------- 1 | import {IJobExpression} from "./job-expression.interface"; 2 | import {Context} from "./context"; 3 | 4 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 5 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 6 | export class TeamLeadExpression implements IJobExpression { 7 | public interpret(context: Context): void { 8 | if(context.formula.includes('L')) { 9 | context.totalPoint += 7000; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory/typescript/oracle-connection.ts: -------------------------------------------------------------------------------- 1 | import {Connection} from "./connection"; 2 | 3 | export class OracleConnection extends Connection { 4 | public closeConnection(): boolean { 5 | // Oracle veri tabanı bağlantısının açılması için 6 | // Gerekli operasyonel işlemler... 7 | return true; 8 | } 9 | 10 | public openConnection(): boolean { 11 | // Oracle veri tabanı bağlantısının kapatılması için 12 | // Gerekli operasyonel işlemler... 13 | return true; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /adapter/python/custom_serializer.py: -------------------------------------------------------------------------------- 1 | class CustomSerializer: 2 | """ 3 | Sisteme daha sonradan dahil olan yapı. 4 | Sistemin kullandığı arayüzü uygulamamaktadır. 5 | UML diyagramındaki Adaptee'ye denk gelmektedir. 6 | """ 7 | 8 | def serialize(self, obj): 9 | """ 10 | Gelen nesneyi serilize etmek için temel operasyonel işlemler.. 11 | Daha sonradan da gerekli değerin geri döndürülmesi... 12 | """ 13 | return "serialized with CustomSerializer" 14 | -------------------------------------------------------------------------------- /flyweight/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() { 4 | boxFact := NewBoxFactory() 5 | 6 | blackBox1 := boxFact.Get(BLACK) 7 | blackBox2 := boxFact.Get(BLACK) 8 | blackBox3 := boxFact.Get(BLACK) 9 | blueBox1 := boxFact.Get(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 | -------------------------------------------------------------------------------- /interpreter/go/team-lead-expression.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "strings" 4 | 5 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 6 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 7 | type teamLeadExpression struct{} 8 | 9 | func NewTeamLeadExpression() *teamLeadExpression { 10 | return &teamLeadExpression{} 11 | } 12 | 13 | func (e *teamLeadExpression) Interpret(ctx *Context) { 14 | if strings.Contains(ctx.Formula, "L") { 15 | ctx.TotalPoint += 7000 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /interpreter/typescript/accounting-expression.ts: -------------------------------------------------------------------------------- 1 | import {IJobExpression} from "./job-expression.interface"; 2 | import {Context} from "./context"; 3 | 4 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 5 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 6 | export class AccountingExpression implements IJobExpression { 7 | public interpret(context: Context): void { 8 | if(context.formula.includes('M')) { 9 | context.totalPoint += 3000; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /interpreter/go/developer-expression.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "strings" 4 | 5 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 6 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 7 | type developerExpression struct{} 8 | 9 | func NewDeveloperExpression() *developerExpression { 10 | return &developerExpression{} 11 | } 12 | 13 | func (e *developerExpression) Interpret(ctx *Context) { 14 | if strings.Contains(ctx.Formula, "G") { 15 | ctx.TotalPoint += 4000 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /proxy/go/mask-order.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | // Maske siparişininin oluşturulduğu sınıf. 6 | // İstemcinin direkt erişmesini istemediğimiz alandır. 7 | // UML diyagramındaki ConcreteService sınıfına denk gelmektedir. 8 | type maskOrder struct{} 9 | 10 | func NewMaskOrder() *maskOrder { 11 | return &maskOrder{} 12 | } 13 | 14 | func (o maskOrder) CreateOrder(p Person) { 15 | // Burada siparişin oluşturulma işlemleri yer alacaktır. 16 | fmt.Println("Order created to " + p.address) 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 | } -------------------------------------------------------------------------------- /command/python/stock_manager.py: -------------------------------------------------------------------------------- 1 | class StockManager: 2 | """ 3 | Komutları nesneler haline getirelecek olan sınıf. 4 | UML diyagramındaki Receiver sınıfına denk gelmektedir. 5 | """ 6 | 7 | def __init__(self, name: str, quantity: int): 8 | self._name = name 9 | self._quantity = quantity 10 | 11 | def buy(self): 12 | print(f"Stock: {self._name}, {self._quantity} bought!") 13 | 14 | def sell(self): 15 | print(f"Stock: {self._name}, {self._quantity} sold!") 16 | -------------------------------------------------------------------------------- /facade/python/credit_card_facade.py: -------------------------------------------------------------------------------- 1 | from customer import Customer 2 | from credit_card_manager import CreditCardManager 3 | from blacklist_service import BlackListService 4 | 5 | 6 | class CreditCardFacade: 7 | def create_credit_card(self, customer: Customer): 8 | credit_card_manager = CreditCardManager() 9 | black_list_service = BlackListService() 10 | if not black_list_service.check_employee_is_the_blacklist(customer): 11 | credit_card_manager.create_credit_card(customer) 12 | -------------------------------------------------------------------------------- /interpreter/go/accounting-expression.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "strings" 4 | 5 | // Dil bilgisindeki terminal ifadeler üzerinde işlem yapar. 6 | // UML diyagramındaki TerminalExpression sınıfına denk gelmektedir. 7 | type accountingExpression struct{} 8 | 9 | func NewAccountingExpression() *accountingExpression { 10 | return &accountingExpression{} 11 | } 12 | 13 | func (e accountingExpression) Interpret(ctx *Context) { 14 | if strings.Contains(ctx.Formula, "M") { 15 | ctx.TotalPoint += 3000 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /bridge/python/app.py: -------------------------------------------------------------------------------- 1 | from text_message import TextMessage 2 | from text_message_sender import TextMessageCenter 3 | from email_message_sender import EmailMessageSender 4 | from email_message import EmailMessage 5 | 6 | if __name__ == '__main__': 7 | text_message_sender = TextMessageCenter() 8 | text_message = TextMessage(text_message_sender) 9 | text_message.send() 10 | 11 | email_message_sender = EmailMessageSender() 12 | email_message = EmailMessage(email_message_sender) 13 | email_message.send() 14 | -------------------------------------------------------------------------------- /facade/go/credit-card-facade.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // Banka müşterimizi temsili oluşturan sınıf. 4 | type creditCardFacade struct { 5 | } 6 | 7 | func NewCreditCardFacade() *creditCardFacade { 8 | return &creditCardFacade{} 9 | } 10 | 11 | func (f *creditCardFacade) CreateCreditCard(c Customer) { 12 | creditCardManager := NewCreditCardManager() 13 | 14 | blackListService := NewBlackListService() 15 | if !blackListService.CheckEmployeeIsTheBlackList(c) { 16 | creditCardManager.CreateCreditCard(c) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /observer/typescript/observer-user.ts: -------------------------------------------------------------------------------- 1 | import {IObserverUser} from "./observer-user.interface"; 2 | import {ProductUpdateMessage} from "./product-update-message"; 3 | 4 | // Observer arayüzünü uygulayan, değişimi takip eden sınıflardır. 5 | // Değişim update metotu ile bildirilir. 6 | // UML diyagramındaki ConcreteObserver yapısına denk gelmektedir. 7 | export class ObserverUser implements IObserverUser { 8 | sendNotification(message: ProductUpdateMessage): void { 9 | console.log(message.toString()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /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/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() { 4 | img := NewImage("tatil-fotografim", "JPG") 5 | 6 | handlerJPEG := NewJPEGHandler() 7 | handlerJPG := NewJPGHandler() 8 | handlerCustom := NewCustomHandler() 9 | 10 | handlerJPEG.SetNextHandler(handlerJPG) 11 | handlerJPG.SetNextHandler(handlerCustom) 12 | 13 | // Zincirlerin birbirleri ile bağlantısının yapıldığı yerdir. 14 | // JPEG bu işlemi gerçekleştiremezse JPG'e aktarır o da Custom'a aktarır. 15 | handlerJPEG.HandleRequest(*img) 16 | } 17 | -------------------------------------------------------------------------------- /command/typescript/buy-stock.ts: -------------------------------------------------------------------------------- 1 | import {IOrderCommand} from "./order-command.interface"; 2 | import {StockManager} from "./stock-manager"; 3 | 4 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 5 | // Command (IOrderCommand) arayüzünü uygular. 6 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 7 | export class BuyStock implements IOrderCommand{ 8 | constructor(private readonly stockManager: StockManager) {} 9 | 10 | public execute(): void { 11 | this.stockManager.buy(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/tasarim-desenleri/tasarim-deseni-nedir.md: -------------------------------------------------------------------------------- 1 | Tasarım desenleri; yazılım tasarımında, problemlerde karşımıza sıkça çıkan ortak sorunları çözmek için oluşturulmuş desenlerdir. Tasarım desenleri, yazılım sürecinde uygulanan çözümlerin esnekliği ve tekrar kullanılabilirliği ile de ilgilenmektedir. 2 | 3 | *Her desen, çevremizde tekrar tekrar ortaya çıkan bir sorunu açıklar ve daha sonra bu soruna çözümün uygulanmasını, bu çözümü iki kez aynı şekilde yapmadan milyonlarca kez kullanabileceğiniz şekilde tanımlar.* 4 | 5 | —Christopher Alexander -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /command/typescript/sell-stock.ts: -------------------------------------------------------------------------------- 1 | import {IOrderCommand} from "./order-command.interface"; 2 | import {StockManager} from "./stock-manager"; 3 | 4 | // Nesnelere dönüştürdüğümüz her bir isteğe denk gelmektedir. 5 | // Command (IOrderCommand) arayüzünü uygular. 6 | // UML diyagramındaki ConcreteCommand sınıfına denk gelmektedir. 7 | export class SellStock implements IOrderCommand{ 8 | constructor(private readonly stockManager: StockManager) {} 9 | 10 | public execute(): void { 11 | this.stockManager.sell(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /decorator/python/data_source.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | 4 | class DataSource(ABC): 5 | """ 6 | Üst sınıfların uygulayacağı arayüzdür. 7 | Yapılacak temel işlemler tanımlanmıştır. 8 | UML diyagramındaki Component arayüzüne denk gelmektedir. 9 | """ 10 | 11 | @abstractmethod 12 | def get_file_name(self): 13 | pass 14 | 15 | @abstractmethod 16 | def write_data(self, data): 17 | pass 18 | 19 | @abstractmethod 20 | def read_data(self): 21 | pass 22 | -------------------------------------------------------------------------------- /observer/python/observer_user.py: -------------------------------------------------------------------------------- 1 | from abstract_observer_user import AbstractObserverUser 2 | from observer.python.product_update_message import ProductUpdateMessage 3 | 4 | 5 | class ObserverUser(AbstractObserverUser): 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 | """ 11 | 12 | def send_notification(self, message: ProductUpdateMessage): 13 | print(message) 14 | -------------------------------------------------------------------------------- /chain-of-responsibility/typescript/base-handler.ts: -------------------------------------------------------------------------------- 1 | import {Image} from "./image"; 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 | export abstract class BaseHandler { 7 | protected nextHandler: BaseHandler; 8 | 9 | public setNextHandler(nextHandler: BaseHandler): void { 10 | this.nextHandler = nextHandler; 11 | } 12 | 13 | public abstract handleRequest(image: Image): void; 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 | -------------------------------------------------------------------------------- /proxy/python/mask_order.py: -------------------------------------------------------------------------------- 1 | from orderable_mask import OrderableMask 2 | from proxy.python.person import Person 3 | 4 | 5 | class MaskOrder(OrderableMask): 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 | """ 11 | 12 | def create_order(self, person: Person): 13 | # Burada siparişin oluşturulma işlemleri yer alacaktır. 14 | print(f"Order created to {person.address}.") 15 | -------------------------------------------------------------------------------- /state/python/app.py: -------------------------------------------------------------------------------- 1 | from vending_machine import VendingMachine 2 | 3 | if __name__ == '__main__': 4 | vending_machine = VendingMachine() 5 | vending_machine.request_product("COVID-19 Maske", 2) 6 | 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 | -------------------------------------------------------------------------------- /state/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {VendingMachine} from "./vending-machine"; 2 | 3 | function main() { 4 | const vendingMachine = new VendingMachine(); 5 | vendingMachine.requestProduct('COVID-19 MASKE', 2); 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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /abstract-factory/go/mysql-connection.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type mysqlConnection struct{} 4 | 5 | func newMySQLConnection() *mysqlConnection { 6 | return &mysqlConnection{} 7 | } 8 | 9 | func (c *mysqlConnection) openConnection() error { 10 | // MySQL veri tabanı bağlantısının açılması için 11 | // Gerekli operasyonel işlemler... 12 | return nil 13 | } 14 | 15 | func (c *mysqlConnection) closeConnection() error { 16 | // MySQL veri tabanı bağlantısının kapatılması için 17 | // Gerekli operasyonel işlemler... 18 | return nil 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 | -------------------------------------------------------------------------------- /decorator/typescript/main.ts: -------------------------------------------------------------------------------- 1 | import {FileDataSource} from "./file-data-source"; 2 | import {CompressionDecorator} from "./compression-decorator"; 3 | 4 | function main() { 5 | const dataSource = new FileDataSource('data.sql'); 6 | 7 | const compressedDataSource = new CompressionDecorator(dataSource); 8 | 9 | compressedDataSource.readData(); 10 | compressedDataSource.writeData({}); 11 | 12 | // output: 13 | // data.sql readed. 14 | // Data compressed. 15 | // Compressed data was written to data.sql. 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 | -------------------------------------------------------------------------------- /command/python/buy_stock.py: -------------------------------------------------------------------------------- 1 | from order_command import OrderCommand 2 | from stock_manager import StockManager 3 | 4 | 5 | class BuyStock(OrderCommand): 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 | """ 11 | 12 | def __init__(self, stock_manager: StockManager): 13 | self._stock_manager = stock_manager 14 | 15 | def execute(self): 16 | self._stock_manager.buy() 17 | -------------------------------------------------------------------------------- /observer/go/product-update-message.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | // ProductUpdateMessage Bildirilecek olan nesnelere paremetre olarak giden mesaj. 6 | // UML diyagramı ile ilgisi yoktur. 7 | type ProductUpdateMessage struct { 8 | ProductName string 9 | Message string 10 | } 11 | 12 | func NewProductUpdateMessage() ProductUpdateMessage { 13 | return ProductUpdateMessage{} 14 | } 15 | 16 | func (m ProductUpdateMessage) ToString() string { 17 | return fmt.Sprintf("%s updated. Message: %s.", m.ProductName, m.Message) 18 | } 19 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /proxy/typescript/mask-order.ts: -------------------------------------------------------------------------------- 1 | import {IOrderableMask} from "./orderable-mask.interface"; 2 | import {Person} from "./person"; 3 | 4 | // Maske siparişininin oluşturulduğu sınıf. 5 | // İstemcinin direkt erişmesini istemediğimiz alandır. 6 | // UML diyagramındaki ConcreteService sınıfına denk gelmektedir. 7 | export class MaskOrder implements IOrderableMask{ 8 | public createOrder(person: Person): void { 9 | // Burada siparişin oluşturulma işlemleri yer alacaktır. 10 | console.log(`Order created to ${person.address}`); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /abstract-factory/go/oracle-connection.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type oracleConnection struct{} 4 | 5 | func newOracleConnection() *oracleConnection { 6 | return &oracleConnection{} 7 | } 8 | 9 | func (c *oracleConnection) openConnection() error { 10 | // Oracle veri tabanı bağlantısının açılması için 11 | // Gerekli operasyonel işlemler... 12 | return nil 13 | } 14 | 15 | func (c *oracleConnection) closeConnection() error { 16 | // Oracle veri tabanı bağlantısının kapatılması için 17 | // Gerekli operasyonel işlemler... 18 | return nil 19 | } 20 | -------------------------------------------------------------------------------- /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/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | func main() { 4 | stockManager := NewStockManager("iPhone", 200) 5 | 6 | buyStock := NewBuyStock(stockManager) 7 | sellStock := NewSellStock(stockManager) 8 | 9 | stockController := NewStockController() 10 | 11 | stockController.TakeOrder(buyStock) 12 | stockController.TakeOrder(sellStock) 13 | stockController.TakeOrder(sellStock) 14 | 15 | stockController.PlaceOrders() 16 | // output: 17 | // Stock: iPhone, 201 bought! 18 | // Stock: iPhone, 200 sold! 19 | // Stock: iPhone, 199 sold! 20 | } 21 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /command/python/sell_stock.py: -------------------------------------------------------------------------------- 1 | from order_command import OrderCommand 2 | from stock_manager import StockManager 3 | 4 | 5 | class SellStock(OrderCommand): 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 | """ 11 | 12 | def __init__(self, stock_manager: StockManager): 13 | self._stock_manager = stock_manager 14 | 15 | def execute(self): 16 | self._stock_manager.sell() 17 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------