qt design patterns
DESCRIPTION
Design Patterns help us solve problems in tried and tested ways. Turns out they also help us understand our framework better, for framework developers also use patterns. In these slides you'll see how Design Patterns are implemented by Qt framework, to better both understand patterns and QtTRANSCRIPT
![Page 2: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/2.jpg)
Good Code Bad Code
Sunday, May 5, 13
![Page 3: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/3.jpg)
When OO Goes Wrong
Sunday, May 5, 13
![Page 4: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/4.jpg)
Java Input Validation
• In the past, Java Swing provided only JTextField for input texts
• JNumericTextField quickly appeared by the community
Sunday, May 5, 13
![Page 5: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/5.jpg)
Java Input Validation
Sunday, May 5, 13
![Page 6: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/6.jpg)
OO Fail
• Too many classes
• Hard to maintain
• Frustrated Developers
Sunday, May 5, 13
![Page 7: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/7.jpg)
Enter Design Patterns
• Reusable and tested solutions
• Sustainable for the long run
Sunday, May 5, 13
![Page 8: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/8.jpg)
Enter Design Patterns
• Started by Christopher Alexander in 1977
• And he was an Architect
Sunday, May 5, 13
![Page 9: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/9.jpg)
Example: Street Caffe“The street cafe provides a unique setting, special to cities: a place where people can sit lazily, legitimately, be on view, and watch the world go by...”
Sunday, May 5, 13
![Page 10: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/10.jpg)
Patterns Are Not
• Not a detailed solution
• Not a guide to help you build it
Sunday, May 5, 13
![Page 11: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/11.jpg)
Patterns Are
• Describing existing and working solutions
• Your job: Apply to your world
Sunday, May 5, 13
![Page 12: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/12.jpg)
Patterns In Software
• Defined by GoF
• Categorized:
• Creational
• Behavioral
• Structural
Sunday, May 5, 13
![Page 13: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/13.jpg)
Using Patterns
• Understand
• Memorize
• Apply Repeatedly
Sunday, May 5, 13
![Page 14: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/14.jpg)
Patterns In Qt
• Plenty !
• We’ll show 2:
• Strategy
• Proxy
Sunday, May 5, 13
![Page 15: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/15.jpg)
Strategy Pattern
Sunday, May 5, 13
![Page 16: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/16.jpg)
The Problem
• An input text provides different validation techniques
• Only one is used at any given time
Sunday, May 5, 13
![Page 17: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/17.jpg)
Approach #1
Sunday, May 5, 13
![Page 18: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/18.jpg)
Why Is It Bad
• Class Explosion
• Hard to reuse validation code
Sunday, May 5, 13
![Page 19: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/19.jpg)
The Better Way
Sunday, May 5, 13
![Page 20: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/20.jpg)
Why Is It Awesome
• Can reuse validators code
• Reduce class explosion
Sunday, May 5, 13
![Page 21: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/21.jpg)
The Pattern
• A validator encapsulates the validation algorithm
• The general pattern is called Strategy
Sunday, May 5, 13
![Page 22: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/22.jpg)
Intent
• Define a family of algorithms, encapsulate each one, and make them interchangeable.
Sunday, May 5, 13
![Page 23: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/23.jpg)
Motivation
• Client code is simpler if the algorithm is external to it
• No need to support an algorithm we don’t use
• We need to make it easy to add new algorithms
Sunday, May 5, 13
![Page 24: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/24.jpg)
Applicability
• Configure a class with one of many behaviors
• Use different variants of an algorithm
• Eliminate Switch blocks
Sunday, May 5, 13
![Page 25: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/25.jpg)
Structure
Sunday, May 5, 13
![Page 26: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/26.jpg)
Participants
• Strategy
• ConcreteStrategy
• Context
Sunday, May 5, 13
![Page 27: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/27.jpg)
Collaborations
• Strategy + Context = Algorithm
• Context forwards requests to Strategy
Sunday, May 5, 13
![Page 28: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/28.jpg)
Consequences• Families of related algorithms
• Eliminate switch blocks
• Allow different implementations
• Strategy and Context interface can get complicated
• Increased number of objects
Sunday, May 5, 13
![Page 29: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/29.jpg)
More Examples
• Layout management
• QAbstractNetworkCache
Sunday, May 5, 13
![Page 30: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/30.jpg)
Keep In Mind
• A Default Strategy will make everyone happy
• Allow clients to create their own strategies and pass as parameters
Sunday, May 5, 13
![Page 31: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/31.jpg)
Demo
Sunday, May 5, 13
![Page 32: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/32.jpg)
Q & A
Sunday, May 5, 13
![Page 33: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/33.jpg)
Proxy Pattern
Sunday, May 5, 13
![Page 34: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/34.jpg)
______________ < Let's do COW > -------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Sunday, May 5, 13
![Page 35: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/35.jpg)
Example Code
QString s1 = getText();QString s2 = getText();QString s3 = s1;
// "Hello World" is kept in memory only once
s1.append(" And now it's copied");
Sunday, May 5, 13
![Page 36: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/36.jpg)
The Proxy Way
• A QString is just a proxy to the data
• Implicitly shared
Sunday, May 5, 13
![Page 37: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/37.jpg)
class MyCow {public:
MyCow &operator=(const MyCow &other) { m_data = other.m_data; } void write() { m_data = new Data( m_data ); m_data.write(); }
private: Data *m_data;};
The Proxy Way
Sunday, May 5, 13
![Page 38: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/38.jpg)
Proxy Types
• Virtual Proxy
• Protection Proxy
• Remote Proxy
Sunday, May 5, 13
![Page 39: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/39.jpg)
Proxy: Pattern Details
Sunday, May 5, 13
![Page 40: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/40.jpg)
Intent
• Provide a surrogate or placeholder for another object
Sunday, May 5, 13
![Page 41: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/41.jpg)
Motivation
• Save time by lazy loading heavy resources
• Easy Cows
Sunday, May 5, 13
![Page 42: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/42.jpg)
Applicability
• Access remote resources
• Create resources on demand
• Enforce per-object access control
Sunday, May 5, 13
![Page 43: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/43.jpg)
Structure
Sunday, May 5, 13
![Page 44: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/44.jpg)
Participants
• Proxy
• Subject
• Real Subject
Sunday, May 5, 13
![Page 45: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/45.jpg)
Collaborations
• Proxy forwards requests to Real Subject
Sunday, May 5, 13
![Page 46: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/46.jpg)
Consequences
• Hide the fact that an object is remote
• Optimize load times (virtual proxy)
• Can use for Copy-On-Write
Sunday, May 5, 13
![Page 47: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/47.jpg)
Qt Cow
• Not really “By The Book”
• QString has a Data struct
• Does all work by itself
Sunday, May 5, 13
![Page 48: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/48.jpg)
Qt Patterns
• Patterns are part of any framework (Qt Included)
• Understanding patterns helps us better understand the framework
Sunday, May 5, 13
![Page 49: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/49.jpg)
Thanks For Listening !
Slides at: http://ynonperek.com
Questions / Comments:[email protected]
Stock Photos from:http://123rf.com
Sunday, May 5, 13
![Page 50: Qt Design Patterns](https://reader034.vdocuments.site/reader034/viewer/2022042505/55579763d8b42ad4278b53c4/html5/thumbnails/50.jpg)
Thanks For Listening
Sunday, May 5, 13