Packt.jQuery.Design.Patterns.pdf
In jQuery Design Patterns we will analyze how various Design Patterns are utilized in the implementation of jQuery and how they can be used to improve the
Essential JavaScript & jQuery Design Patterns For Beginners
Know the differences between patterns and design: A design pattern DesignPatterns/. Essential JavaScript & jQuery Design Patterns. Copyright Addy Osmani 2010.
Syllabus
Utilize Jquery design patterns through the design of use cases and develop of web-application dashboards. Page 2. ©2018 Regis University. MSSE 663. Page 2.
Detection of feature interaction in dynamic scripting languages
detect design patterns in feature-oriented SPLs (Software Product. Line). The Osmani Learning JavaScript Design Patterns - a JavaScript and jQuery Devel-.
Using AI to Match Skills Supply to Skills Demand for Industry 4.0
72 Agile Application Development 88 Software Design Patterns. 25 Able to Work 61 SQL Database Design. 77 jQuery. 93. Software Development Life. Cycle. 30.
jQuery Tools Users Guide - Common practices for each of the tools
have to choose one design pattern and stick with it. Here are the advantages and disadvantages of these choices: 1. CSS-based design. This approach depends
San José State University Department of Computer Science Spring
18 мая 2023 г. Introduction to HTML 5 CSS 3
Board Packet May 8 2013 Document - Board of Trustees - Ohlone
8 мая 2013 г. Topics covered include user interface design software design patterns
Programmer Analyst
Angular JQuery and JavaScript. •. Design patterns and OOPS. •. Database performance evaluation and data forensics. •. C# and .net framework. Ability to
Superior Court
Design patterns and OOPS. • Database performance evaluation and data JQuery. An active. Scrum certification and MCSD - Microsoft Software Developer.
Packt.jQuery.Design.Patterns.pdf
In jQuery Design Patterns we will analyze how various Design Patterns are utilized in the implementation of jQuery and how they can be used to improve the
Learning JavaScript Design Patterns
O'Reilly Media Inc. Learning JavaScript Design Patterns
Jquery Cookbook Solutions Examples For Developers Animal Guide
You'll then delve into JavaScript understanding the more complex aspects of the language. Next
Learning JavaScript Design Patterns
1 May 2012 Getting Started With Modules. 133. AMD Modules With Dojo. 137. AMD Module Design Patterns (Dojo). 138. AMD Modules With jQuery.
Jquery Cookbook Solutions Examples For Developers Animal Guide
patterns Learn the author's vision for dom.js a jQuery-inspired DOM Learning JavaScript Design Patterns Addy Osmani 2012-07-08 With.
Online Library Jquery Umentation ? - covid19.gov.gd
code--and the newest innovations from the jQuery UI plug-in. jQuery Design Patterns Thodoris Greasidis 2016-02-26 Learn the best.
Jquery Cookbook Solutions Examples For Developers Animal Guide
jQuery library Learn popular design patterns for writing maintainable jQuery plug-ins "This book should be in every JavaScript developer's hands.
Download Free Jquery Umentation [PDF] - covid19.gov.gd
the newest innovations from the jQuery UI plug-in. today · Match patterns using regular expressions · Understand and use closures ·.
Online Library Designing Web Interfaces Principles And Patterns For
(AMD) and CommonJS Discover design patterns implemented in the jQuery library Learn popular design patterns for writing maintainable. jQuery plug-ins "This
Download Free Opencart Installation Guide Copy - covid19.gov.gd
Discover design patterns implemented in the jQuery library Learn popular design patterns for writing maintainable jQuery plug-ins "This book should be in
[PDF] jQuery Design Patterns
A Refresher on jQuery and the Composite Pattern In jQuery Design Patterns we will analyze how various Design Patterns are utilized in the
Essential JavaScript & jQuery Design Patterns - Addy Osmani
At the beginning of this book I will focusing on a discussion about the importance and history of design patterns in any programming language
[PDF] jQuery Design Patterns by Thodoris Greasidis eBook Perlego
This book addresses these problems and shows you how to make the best of jQuery through the various design patterns available The book starts off with a
Essential JavaScript and JQuery Design Patterns
In this free book we will take a look at a number of popular JavaScript design patterns and explore why certain patterns may be more suitable for your
[PDF] Learning JavaScript Design Patterns
1 mai 2012 · Design patterns are reusable solutions to commonly occurring problems in software design They are both exciting and a fascinating topic to
[PDF] Pro-JavaScript-Design-Patternspdf
Design patterns have been used in programming for years library such as YUI or jQuery we decided to keep our code library-agnostic so that it can be
jQuery Design Patterns [Book] - OReilly
Learn the best practices on writing efficient jQuery applications to maximize performance in large-scale deployments About This Book Learn about the
Essential JavaScript And jQuery Design Patterns - A Free New Book
14 nov 2010 · Today I'm happy to announce the release of a free book I've written called 'Essential JavaScript jQuery Design Patterns For Beginners'
[PDF] Design patterns en JS - CNRS
4 jui 2013 · Problème auquel répond l'utilisation de Design Pattern Premières esquisses de Design Pattern par Design Patterns In jQuery
jQuery Design Patterns - Packt
This book addresses these problems and shows you how to make the best of jQuery through the various design patterns available The book starts off with a
THE EXPERT'S VOICE® IN WEB DEVELOPMENT
ProJavaScript™
Design Patterns
Ross Harmes and Dustin Diaz
The essentials of object-oriented
JavaScript™ programming
www.allitebooks.com www.allitebooks.comPro JavaScript™
Design Patterns
Ross Harmes and Dustin Diazwww.allitebooks.com
Pro JavaScript™Design Patterns
Copyright © 2008 by Ross Harmes and Dustin DiazAll rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.ISBN-13 (pbk): 978-1-59059-908-2
ISBN-10 (pbk): 1-59059-908-X
ISBN-13 (electronic): 978-1-4302-0495-4
ISBN-10 (electronic): 1-4302-0495-8
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrenceof a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner, with no intention of infringement of the trademark.Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems Inc. in the
United States and other countries. Apress Inc. is not affiliated with Sun Microsystems Inc., and this book
was written without endorsement from Sun Microsystems Inc.Lead Editors: Chris Mills, Tom Welsh
Technical Reviewer: Simon Willison
Editorial Board: Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell, Jonathan Gennick, Jason Gilmore, Kevin Goff, Jonathan Hassell, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper, Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom WelshProject Manager: Richard Dal Porto
Copy Editor: Jennifer Whipple
Associate Production Director: Kari Brooks-Copony
Production Editor: Kelly Winquist
Compositor and Artist: Kinetic Publishing Services, LLCProofreader: Dan Shaw
Indexer: Julie Grady
Cover Designer: Kurt Krames
Manufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail orders-ny@springer-sbm.com, or visit http://www.springeronline.com.For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600, Berkeley,
CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail info@apress.com, or visit http://www.apress.com.
The information in this book is distributed on an "as is" basis, without warranty. Although every precaution
has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to
any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly
by the information contained in this work. The source code for this book is available to readers at http://www.apress.com.www.allitebooks.comTo Mom,and those who have listened,thanks
-Dustin DiazTo Alec,Dymphi,and Terry
-Ross Harmeswww.allitebooks.com www.allitebooks.comContents at a GlanceAbout the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
PART 1
? ? ?Object-Oriented JavaScript?CHAPTER 1Expressive JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
?CHAPTER 2Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
?CHAPTER 3Encapsulation and Information Hiding. . . . . . . . . . . . . . . . . . . . . . . . . . 25?CHAPTER 4Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
?CHAPTER 5The Singleton Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
?CHAPTER 6Chaining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
PART 2
? ? ?Design Patterns?CHAPTER 7The Factory Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
?CHAPTER 8The Bridge Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
?CHAPTER 9The Composite Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
?CHAPTER 10The Facade Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
?CHAPTER 11The Adapter Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
?CHAPTER 12The Decorator Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
?CHAPTER 13The Flyweight Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
?CHAPTER 14The Proxy Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
?CHAPTER 15The Observer Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
?CHAPTER 16The Command Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
?CHAPTER 17The Chain of Responsibility Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . 245
?INDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
vwww.allitebooks.com www.allitebooks.comContentsAbout the Authors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
PART 1
? ? ?Object-Oriented JavaScript?CHAPTER 1Expressive JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
The Flexibility of JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
A Loosely Typed Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Functions As First-Class Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
The Mutability of Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Design Patterns in JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
?CHAPTER 2Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
What Is an Interface?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Benefits of Using Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Drawbacks of Using Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 How Other Object-Oriented Languages Handle Interfaces. . . . . . . . . . . . . 12 Emulating an Interface in JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Describing Interfaces with Comments. . . . . . . . . . . . . . . . . . . . . . . . . 14 Emulating Interfaces with Attribute Checking. . . . . . . . . . . . . . . . . . . 16 Emulating Interfaces with Duck Typing. . . . . . . . . . . . . . . . . . . . . . . . 17 The Interface Implementation for This Book. . . . . . . . . . . . . . . . . . . . . . . . . 18The Interface Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
When to Use the Interface Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 How to Use the Interface Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Example: Using the Interface Class. . . . . . . . . . . . . . . . . . . . . . . . . . . 21Patterns That Rely on the Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
viiwww.allitebooks.com ?CHAPTER 3Encapsulation and Information Hiding. . . . . . . . . . . . . . . . . . . . 25The Information Hiding Principle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Encapsulation vs. Information Hiding. . . . . . . . . . . . . . . . . . . . . . . . . . 26 The Role of the Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Basic Patterns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Fully Exposed Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Private Methods Using a Naming Convention. . . . . . . . . . . . . . . . . . . 30 Scope, Nested Functions, and Closures. . . . . . . . . . . . . . . . . . . . . . . . 32 Private Members Through Closures. . . . . . . . . . . . . . . . . . . . . . . . . . . 33More Advanced Patterns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Static Methods and Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Singletons and Object Factories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Benefits of Using Encapsulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Drawbacks to Using Encapsulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
?CHAPTER 4Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Why Do You Need Inheritance?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Classical Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The Prototype Chain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The extend Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Prototypal Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Asymmetrical Reading and Writing of Inherited Members. . . . . . . . 46The clone Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Comparing Classical and Prototypal Inheritance. . . . . . . . . . . . . . . . . . . . . 49Inheritance and Encapsulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Mixin Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Example: Edit-in-Place. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Using Classical Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Using Prototypal Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55Using Mixin Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
When Should Inheritance Be Used?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
?CHAPTER 5The Singleton Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
The Basic Structure of the Singleton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65Namespacing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
?CONTENTSviiiwww.allitebooks.com A Singleton As a Wrapper for Page-Specific Code. . . . . . . . . . . . . . . . . . . . 68 A Singleton with Private Members. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Using the Underscore Notation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Using Closures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Comparing the Two Techniques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Lazy Instantiation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Branching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Example: Creating XHR Objects with Branching. . . . . . . . . . . . . . . . . . . . . 79 When Should the Singleton Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . . 81Benefits of the Singleton Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Drawbacks of the Singleton Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
?CHAPTER 6Chaining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
The Structure of a Chain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Building a Chainable JavaScript Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Using Callbacks to Retrieve Data from Chained Methods. . . . . . . . . . . . . 89Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
PART 2
? ? ?Design Patterns?CHAPTER 7The Factory Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
The Simple Factory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
The Factory Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
When Should the Factory Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . . . . 99 Dynamic Implementations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Combining Setup Costs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Abstracting Many Small Objects into One Large Object. . . . . . . . . . 99Example: XHR Factory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Specialized Connection Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Choosing Connection Objects at Run-Time. . . . . . . . . . . . . . . . . . . . 103Example: RSS Reader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Benefits of the Factory Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Drawbacks of the Factory Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
?CONTENTSix?CHAPTER 8The Bridge Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Example: Event Listeners. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Other Examples of Bridges. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Bridging Multiple Classes Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Example: Building an XHR Connection Queue. . . . . . . . . . . . . . . . . . . . . . 111 Including the Core Utilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Including an Observer System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Developing the Queue Skeleton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Implementing the Queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Where Have Bridges Been Used?. . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 When Should the Bridge Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . . . . 122Benefits of the Bridge Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Drawbacks of the Bridge Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
?CHAPTER 9The Composite Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
The Structure of the Composite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Using the Composite Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Example: Form Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Putting It All Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Adding Operations to FormItem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Adding Classes to the Hierarchy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Adding More Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Example: Image Gallery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Benefits of the Composite Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Drawbacks of the Composite Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
?CHAPTER 10The Facade Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Some Facade Functions You Probably Already Know About. . . . . . . . . . . 141JavaScript Libraries As Facades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Facades As Convenient Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Example: Setting Styles on HTML Elements. . . . . . . . . . . . . . . . . . . . . . . . 144Example: Creating an Event Utility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
General Steps for Implementing the Facade Pattern. . . . . . . . . . . . . . . . . 147 When Should the Facade Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . . . 148Benefits of the Facade Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Drawbacks of the Facade Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
?CONTENTSx?CHAPTER 11The Adapter Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Characteristics of an Adapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Adapting Existing Implementations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Example:Adapting One Library to Another. . . . . . . . . . . . . . . . . . . . . . . . . 150 Example:Adapting an Email API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 Wrapping the Webmail API in an Adapter. . . . . . . . . . . . . . . . . . . . . 157 Migrating from fooMail to dedMail. . . . . . . . . . . . . . . . . . . . . . . . . . . 157 When Should the Adapter Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . . . 158Benefits of the Adapter Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Drawbacks of the Adapter Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
?CHAPTER 12The Decorator Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
The Structure of the Decorator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
The Role of the Interface in the Decorator Pattern. . . . . . . . . . . . . . 163 The Decorator Pattern vs. the Composite Pattern. . . . . . . . . . . . . . 163 In What Ways Can a Decorator Modify Its Component?. . . . . . . . . . . . . . 164 Adding Behavior After a Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Adding Behavior Before a Method. . . . . . . . . . . . . . . . . . . . . . . . . . . 165Replacing a Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Adding New Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167The Role of the Factory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Function Decorators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
When Should the Decorator Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . 173Example: Method Profiler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Benefits of the Decorator Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Drawbacks of the Decorator Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
?CHAPTER 13The Flyweight Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
The Structure of the Flyweight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Example: Car Registrations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Intrinsic and Extrinsic State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Instantiation Using a Factory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Extrinsic State Encapsulated in a Manager. . . . . . . . . . . . . . . . . . . . 182Managing Extrinsic State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Example:Web Calendar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Converting the Day Objects to Flyweights. . . . . . . . . . . . . . . . . . . . . 185 Where Do You Store the Extrinsic Data?. . . . . . . . . . . . . . . . . . . . . . 186 ?CONTENTSxiExample:Tooltip Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
The Unoptimized Tooltip Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187Tooltip As a Flyweight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Storing Instances for Later Reuse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 When Should the Flyweight Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . 192 General Steps for Implementing the Flyweight Pattern. . . . . . . . . . . . . . 193Benefits of the Flyweight Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Drawbacks of the Flyweight Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
?CHAPTER 14The Proxy Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
The Structure of the Proxy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
How Does the Proxy Control Access to Its Real Subject? . . . . . . . 197 Virtual Proxy, Remote Proxy, and Protection Proxy. . . . . . . . . . . . . . 200 The Proxy Pattern vs. the Decorator Pattern. . . . . . . . . . . . . . . . . . . 201 When Should the Proxy Be Used?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201Example: Page Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
General Pattern for Wrapping a Web Service. . . . . . . . . . . . . . . . . . . . . . . 205Example: Directory Lookup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
General Pattern for Creating a Virtual Proxy. . . . . . . . . . . . . . . . . . . . . . . . 210Benefits of the Proxy Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Drawbacks of the Proxy Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
?CHAPTER 15The Observer Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Example: Newspaper Delivery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Push vs. Pull. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Pattern in Practice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Building an Observer API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Delivery Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Subscribe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Unsubscribe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Observers in Real Life. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Example:Animation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Event Listeners Are Also Observers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 When Should the Observer Pattern Be Used?. . . . . . . . . . . . . . . . . . . . . . 223Benefits of the Observer Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Drawbacks of the Observer Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
?CONTENTSxii?CHAPTER 16The Command Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
The Structure of the Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Creating Commands with Closures. . . . . . . . . . . . . . . . . . . . . . . . . . 227 The Client, the Invoker, and the Receiver. . . . . . . . . . . . . . . . . . . . . . 227 Using Interfaces with the Command Pattern. . . . . . . . . . . . . . . . . . . 228Types of Command Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Example: Menu Items. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
The Menu Composites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 The Command Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Putting It All Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Adding More Menu Items Later On. . . . . . . . . . . . . . . . . . . . . . . . . . . 235Example: Undo and Logging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Implementing Undo with Nonreversible Actions By LoggingCommands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Logging Commands for Crash Recovery. . . . . . . . . . . . . . . . . . . . . . 242 When to Use the Command Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Benefits of the Command Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Drawbacks of the Command Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
?CHAPTER 17The Chain of Responsibility Pattern. . . . . . . . . . . . . . . . . . . . . . 245 The Structure of the Chain of Responsibility. . . . . . . . . . . . . . . . . . . . . . . . 245Passing on Requests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Implementing a Chain of Responsibility in an Existing Hierarchy. . . . . . 254Event Delegation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
When Should the Chain of Responsibility Pattern Be Used?. . . . . . . . . . 255Example: Image Gallery Revisited. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Using the Chain of Responsibility to Make CompositesMore Efficient. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Adding Tags to Photos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Benefits of the Chain of Responsibility Pattern. . . . . . . . . . . . . . . . . . . . . 261 Drawbacks of the Chain of Responsibility Pattern. . . . . . . . . . . . . . . . . . . 262Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
?INDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
?CONTENTSxiii f7670b088a34e6aa65a5685727db1ff4About the Authors
?ROSS HARMESis a front-end engineer for Yahoo! in Sunnyvale, California. Educated as an electrical and computer engineer, Ross quickly put down the soldering iron and oscilloscope and focused on the software aspect of his degree. After discovering that debugging memory leaks is not much fun, he dove into the muddy and turbulent waters of web programming. He has been happily swimming there ever since. This is Ross"s first book, but he has been publishing his stray thoughts online for years. These days his technical ramblings can be found at http://techfoolery.com. ?DUSTIN DIAZis a user interface engineer for Google in Mountain View, California. He enjoys writing JavaScript, CSS, and HTML, as well as making interactive and usable interfaces to inspire passionate users. Dustin has written articles for Vitamin and Digital Web Magazine, and posts regularly about web development at his site, http://dustindiaz.com. xvAbout the Technical Reviewer
?SIMON WILLISONis a consultant on client- and server-side web development and a cocreator of the Django web framework. Simon"s interests include OpenID, unobtrusive JavaScript, and rapid application development. Before going freelance, Simon worked on Yahoo!"s Technology Development team, and prior to that at the Lawrence Journal-World, an award- winning local newspaper in Kansas. Simon maintains a popular web development weblog athttp://simonwillison.net/. xvii www.allitebooks.comAcknowledgments
Thanks to our intrepid technical reviewer, Simon Willison, without whom this book would be much less accurate, practical, and interesting. He worked tirelessly to provide amazing feedback for each and every chapter. Thanks to our colleagues and coworkers who took the time to wade through the early drafts and provide notes and corrections. Dave Marr and Ernest Delgado in particular went above and beyond and were instrumental in finding typos, technical errors, and poorly worded sentences. Also, thanks to Lindsey Simon and Robert Otani, each of whom supported us by providing ceaseless JavaScript humor. Thanks to our friends and family, who stood by patiently while we bored them to death with our endless tales of writing and incomprehensible technical minutiae. Your support kept us going. And lastly, we both wish to give our sincerest thanks to the people at Apress who made this book a reality. The patience, understanding, and perseverance of Chris Mills, Tom Welsh, Dominic Shakeshaft, Richard Dal Porto, and Jennifer Whipple deserve special recognition and won"t be forgotten. xixIntroduction
JavaScript is at a turning point. The language and those who program with it have matured. People are starting to realize that it is a complex subject, worthy of further study. Design patterns have been used in programming for years. They were first formally docu- mented in Design Patternsby Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (affectionately known as the Gang of Four) and have been applied to countless object-oriented languages. Part of the appeal of design patterns is that they can be used uniformly over many different languages and syntaxes. The basic structure stays the same; only the details change. It is fairly easy, for instance, to take a pattern implemented in Java and convert it to C++. The same cannot be said of JavaScript. While all of the same capabilities exist, they are often not official parts of the language and must be emulated through obscure tricks and unintuitive techniques. Over the years, people have discovered ways of using the language to accomplish tasks never imagined by its creators. We must do likewise to implement common object-oriented features. This book collects and documents those tricks and techniques. In the first part, we create a base of object-oriented features that we can build upon to implement specific design patterns. The second part deals with specific design patterns and how they can be used in the JavaScript language. We took great pains to make the examples in each chapter as practical as possible. We tried to list some of the most common tasks performed by JavaScript programmers, and then used design patterns to make them more modular, efficient, and easily maintained. When we do venture into more theoretical examples, it is done to illustrate a specific point. We know that at the end of the day, the value of this book will be judged by its relevance to your every- day tasks and projects. We hope you enjoy this book. JavaScript is an incredibly complex and flexible language, and one that is well-suited to experimentation. Play around with any of our code examples. Let us know if you find a novel way of implementing a pattern, or a new use for an old tech- nique. More information and downloadable code examples can be found at the book"s website, http://jsdesignpatterns.com, and at the Apress website, http://www.apress.com.Who This Book Is For
This book is meant primarily for two types of people. The first is web developers or front-end engineers who know some JavaScript and wish to learn more. Specifically, those who want to improve their understanding of the object-oriented capabilities of JavaScript and learn how they can make their code more modular, maintainable, and efficient. This book will teach these readers about the basics of object-oriented programming in JavaScript. It will also teach them about specific design patterns, showing when they can be used and how to implement xxithem. This type of reader will already be familiar with the basic JavaScript syntax and will focusmore on the sections that deal with converting existing code to implement specific patterns,and explanations of when each pattern should or shouldn"t be used.
The second type of readers are programmers who are more involved with server-side languages such as Java and C++ and are relative beginners in JavaScript. They wish to use their knowledge of design patterns and object-oriented programming and put it to use in a client-side language. This book will teach these readers how to implement commonly used object-oriented idioms in JavaScript, such as interfaces, inheritance, and encapsula- tion. These readers will find the code samples particularly useful because they may not be familiar with the differences in syntax between JavaScript and other object-oriented lan- guages. This type of reader may already be familiar with specific design patterns and so may get more out of the JavaScript-specific, object-oriented techniques covered in Part 1. Readers who are unfamiliar with the basics of JavaScript andobject-oriented program- ming may have a tough time following some of the examples. This is not an entry-level text, and it assumes a certain level of programming knowledge. That being said, we do our best to explain each concept as simply and clearly as possible, to make it easy to understand regard- less of your level of expertise.How This Book Is Structured
This book is divided into two parts. Part 1 covers the basics of object-oriented JavaScript. The chapters are intended to be read sequentially. Each chapter builds on the one before it and assumes that you have read all preceding chapters. It is a good idea to read these chapters all the way through because the chapters in Part 2 use the techniques described in Part 1, in some cases without further explanations. Part 2 covers specific design patterns and their practical applications in JavaScript. Each chapter can be read in whatever order you like. Some chapters reference other chapters, either in Part 1 or Part 2, but we always give the chapter number where more information can be found.Part 1
Chapter 1: Expressive JavaScript
We dive into the expressive nature of the JavaScript language. We look at how the language allows you to use different styles to accomplish similar tasks, and how you can take alternative approaches to object-oriented programming by using concepts from functional programming. We discuss why you should use design patterns in the first place, and how adapting them to the JavaScript language will make your code more efficient and easier to work with.quotesdbs_dbs17.pdfusesText_23[PDF] jquery notes pdf
[PDF] jquery pdf
[PDF] jquery step by step tutorial for beginners pdf
[PDF] jquery tutorials point pdf
[PDF] jquery ui tutorial for beginners with examples pdf
[PDF] jre 11 download
[PDF] jri java/r
[PDF] js animation
[PDF] js button events
[PDF] json address example
[PDF] json api tutorial javascript
[PDF] json data validation rules
[PDF] json emoji encoding
[PDF] json example