Design Patterns in Dart
This repository is part of the Refactoring.Guru project. It contains Dart examples for all classic GoF design patterns.
Implementation checklist:
- Creation
- Abstract Factory [Conceptual Gui Factory] [ Tool Panel Factory]
- Builder - [Conceptual] [Color Text Format]
- Factory Method [Conceptual Platform Dialog]
- Prototype - [Shapes]
- Singleton - [Conceptual]
- Behavioral
- Chain of Responsibility - [Server Middleware]
- Command - [Conceptual] [Text Editor]
- Interpreter - [Conceptual]
- Iterator - [Word Iterator] [Github Commit]
- Mediator - [Conceptual]
- Memento - [Conceptual] [ Memento Editor]
- Observer - [Open-Close Editor Events] [AppObserver] [ Subscriber Flutter Widget]
- State - [Conceptual] [ State Manipulator]
- Template Method - [Data Miner]
- Visitor - [Conceptual] [Shape XML Exporter]
- Strategy [View Strategy] [Reservation Cargo Spaces]
- Structural
- Adapter - [Text Graphics] [Square Round conflict] [ Flutter Adapter]
- Bridge - [Remote Device Control] [Clock]
- Composite - [Image Editor] [Products and Boxes]
- Decorator - [Data Source Decoder]
- Facade - [Conceptual]
- Flyweight - [Conceptual]
- Proxy - [Conceptual]
Requirements
The examples were written in Dart 2.17. Some complex examples require Flutter 3.0.0.
Contributor's Guide
We appreciate any help, whether it's a simple fix of a typo or a whole new example. Just make a fork, do your change and submit a pull request.
Step-by-step instruction
- Just make a fork.
- Clone the forked repository to your local machine.
- Create a new branch and name it, for example: fix-issue-32.
- Make changes.
- Create commits and push them to your forked Github repository.
- Submit a pull request to the master branch.
- Wait for review.
Style guide
Here's a style guide which might help you to keep your changes consistent with our code:
-
All code should meet the Effective Dart: Style.
-
Use Dart Format or auto format shortcut
Ctrl + Alt + L
in your ide. -
Try to hard wrap the code at 80th's character. It helps to list the code on the website without scrollbars.
-
File names should match following convention:
some_class_name.dart
-
Comments may or may not have language tags in them, such as this:
// EN: All products families have the same varieties (MacOS/Windows). // This is a MacOS variant of a button. // RU: Все семейства продуктов имеют одни и те же вариации (MacOS/Windows). // Это вариант кнопки под MacOS.
Don't be scared and ignore the non-English part of such comments. If you want to change something in a comment like this, then do it. Even if you do it wrong, we'll tell you how to fix it during the Pull Request.
Build Flutter examples
cd root directory
flutter build web -t bin\main.dart
Deploy flutter demos
- Fork this repo:
https://github.com/RefactoringGuru/design-patterns-dart
- Apply your changes.
- Run the script
dart bin\deploy_flutter_demos.dart
. This script will build a web platform flutter app and push the changes to your web-demos branch on github. - You can now make a pull request on the web-demos branch.
- Once approved for the merge, the web app will be available at https://refactoringguru.github.io/design-patterns-dart .
License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.