Download pdf - Qt Design Patterns

Transcript
Page 1: Qt Design Patterns

C++/Qt Design Patterns

Ynon [email protected]://ynonperek.com

Sunday, May 5, 13

Page 2: Qt Design Patterns

Good Code Bad Code

Sunday, May 5, 13

Page 3: Qt Design Patterns

When OO Goes Wrong

Sunday, May 5, 13

Page 4: Qt Design Patterns

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

Java Input Validation

Sunday, May 5, 13

Page 6: Qt Design Patterns

OO Fail

• Too many classes

• Hard to maintain

• Frustrated Developers

Sunday, May 5, 13

Page 7: Qt Design Patterns

Enter Design Patterns

• Reusable and tested solutions

• Sustainable for the long run

Sunday, May 5, 13

Page 8: Qt Design Patterns

Enter Design Patterns

• Started by Christopher Alexander in 1977

• And he was an Architect

Sunday, May 5, 13

Page 9: Qt Design Patterns

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

Patterns Are Not

• Not a detailed solution

• Not a guide to help you build it

Sunday, May 5, 13

Page 11: Qt Design Patterns

Patterns Are

• Describing existing and working solutions

• Your job: Apply to your world

Sunday, May 5, 13

Page 12: Qt Design Patterns

Patterns In Software

• Defined by GoF

• Categorized:

• Creational

• Behavioral

• Structural

Sunday, May 5, 13

Page 13: Qt Design Patterns

Using Patterns

• Understand

• Memorize

• Apply Repeatedly

Sunday, May 5, 13

Page 14: Qt Design Patterns

Patterns In Qt

• Plenty !

• We’ll show 2:

• Strategy

• Proxy

Sunday, May 5, 13

Page 15: Qt Design Patterns

Strategy Pattern

Sunday, May 5, 13

Page 16: Qt Design Patterns

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

Approach #1

Sunday, May 5, 13

Page 18: Qt Design Patterns

Why Is It Bad

• Class Explosion

• Hard to reuse validation code

Sunday, May 5, 13

Page 19: Qt Design Patterns

The Better Way

Sunday, May 5, 13

Page 20: Qt Design Patterns

Why Is It Awesome

• Can reuse validators code

• Reduce class explosion

Sunday, May 5, 13

Page 21: Qt Design Patterns

The Pattern

• A validator encapsulates the validation algorithm

• The general pattern is called Strategy

Sunday, May 5, 13

Page 22: Qt Design Patterns

Intent

• Define a family of algorithms, encapsulate each one, and make them interchangeable.

Sunday, May 5, 13

Page 23: Qt Design Patterns

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

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

Structure

Sunday, May 5, 13

Page 26: Qt Design Patterns

Participants

• Strategy

• ConcreteStrategy

• Context

Sunday, May 5, 13

Page 27: Qt Design Patterns

Collaborations

• Strategy + Context = Algorithm

• Context forwards requests to Strategy

Sunday, May 5, 13

Page 28: Qt Design Patterns

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

More Examples

• Layout management

• QAbstractNetworkCache

Sunday, May 5, 13

Page 30: Qt Design Patterns

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

Demo

Sunday, May 5, 13

Page 32: Qt Design Patterns

Q & A

Sunday, May 5, 13

Page 33: Qt Design Patterns

Proxy Pattern

Sunday, May 5, 13

Page 34: Qt Design Patterns

______________ < Let's do COW > -------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||

Sunday, May 5, 13

Page 35: Qt Design Patterns

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

The Proxy Way

• A QString is just a proxy to the data

• Implicitly shared

Sunday, May 5, 13

Page 37: Qt Design Patterns

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

Proxy Types

• Virtual Proxy

• Protection Proxy

• Remote Proxy

Sunday, May 5, 13

Page 39: Qt Design Patterns

Proxy: Pattern Details

Sunday, May 5, 13

Page 40: Qt Design Patterns

Intent

• Provide a surrogate or placeholder for another object

Sunday, May 5, 13

Page 41: Qt Design Patterns

Motivation

• Save time by lazy loading heavy resources

• Easy Cows

Sunday, May 5, 13

Page 42: Qt Design Patterns

Applicability

• Access remote resources

• Create resources on demand

• Enforce per-object access control

Sunday, May 5, 13

Page 43: Qt Design Patterns

Structure

Sunday, May 5, 13

Page 44: Qt Design Patterns

Participants

• Proxy

• Subject

• Real Subject

Sunday, May 5, 13

Page 45: Qt Design Patterns

Collaborations

• Proxy forwards requests to Real Subject

Sunday, May 5, 13

Page 46: Qt Design Patterns

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

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

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

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

Thanks For Listening

Sunday, May 5, 13


Recommended