Home Accessibility Courses Diary The Mouth Facebook Resources Site Map About Us Contact
Caching Design Patterns

Bedroom 4 as a doubleWe run a hotel, and sometimes we have a quandry when it comes to room changeover.

Scenario: John Smith checks out of room 4 at 8 a.m. on Thursday, and looking at our booking system, we see that the room's not been booked out again until Saturday evening, as a twin room, for Deborah Williams and Nancy Walker who are coming to Melksham to attend a WRAF reunion that evening at Melksham Assembly hall.

Quandry: Do we remake bedroom 4 into a lettable double room as soon as John checks out (a double is its most common configuration), or do we leave it unmade and prepare it just-in-time for use on Saturday? By making it up straight away, we run the risk of generating needless work for ourselves. But by leaving it, we run the risk of turning away "walk in" business if people show up at the door looking for a room that's immediately available for them.

The same quandry applies when you're programming using objects. When you construct an object, you'll typically store a number of data values (commonly known as properties or attributes) concerning the object, and later on you'll want to extract information / results based on that data. The quandry - Do you calculate the various results / extra information as you store the data, or do you wait until it's required later on?

The initial answer to this quandry is to take a look at the metrics of the likely use of the objects. If you're going to be creating thousands of objects, but only calling back for a few results from a small number of them, you'll want to wait until the answers are required. But on the other hand, if you're likely to create just a few objects, and then keep calling up the same results many times over, you should calculate as the objects are set up if you want to be efficient.

This initial answer is, however, simplistic. In reallity you won't know which way the balance will tip - especially if your class is going to be used by multiple applications - and the initial attribute values may get changed during the lifetime of an object, rendering the results of the calculations out-of-date (i.e. wrong) if you did them early. A good solution to this is a caching deign pattern.

A caching design pattern works like this:

1. As you create (construct) your object, you set a property that we'll call "cached" to 0 or false, and you do NOT do any result calculations.

2. When you call up a result later on through an accessor, you check if the cached value is 0 / false
• if it IS zero, you do the calculations, store the results into further variables in the object and set cached to 1 / true
• if it is 1, you simply return the values that were previously stored.

The caching design pattern has the further advantage that you can simply set the cached value to 0 / false if you change an attribute value during the life of the object, thus forcing a recalculation next time a result is called for. It've very neat and efficient.

Here's an example in PHP ... the constructor:

  function __construct($name,$age,$factor,$breed) {
    $this->name = $name;
    $this->years = $age;
    this->factor = $factor;
    $this->breed = $breed;
    $this->cached = 0;
  }


and an accessor:

  function geteffage() {
    if (! $this->cached) {
      $this->effing = $age * $factor;
      $this->cached = 1;
    }
    return $this->effing;
  }


Full source code of this example: [here]. Picture illustration this article - bedroom 4 at Well House Manor, which is open for public bookings if you fance a weekend away in Wiltshire
(written 2012-08-20, updated 2012-08-25)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
H108 - Objects in PHP
  [4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
  [4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
  [3953] Objects in PHP - Revision - (2012-12-16)
  [3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
  [3840] Autoload in PHP - (2012-08-17)
  [3609] How do classes relate to each other? Associated Classes - (2012-02-12)
  [3608] Design Patterns - what are they? Why use them? - (2012-02-12)
  [3607] Designing your application - using UML techniques - (2012-02-11)
  [3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
  [3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
  [3142] Private and Public - and things between - (2011-01-22)
  [2922] Getting the OO design write - with PHP a example - (2010-08-14)
  [2921] Does copying a variable duplicate the contents? - (2010-08-14)
  [2774] PHP - Object Oriented Design in use - (2010-05-21)
  [2741] What is a factory? - (2010-04-26)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2680] Static class members in PHP - a documented example - (2010-03-16)
  [2641] Object Oriented Programming in PHP - (2010-02-19)
  [2632] Shipping a test harness with your class in PHP - (2010-02-12)
  [2435] Serialization - storing and reloading objects - (2009-10-04)
  [2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
  [2380] Object Oriented programming - a practical design example - (2009-08-27)
  [2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
  [2171] Cleaning up redundant objects - (2009-05-11)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2160] PHP - getclass v instanceof - (2009-05-07)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [1820] Sorting objects in PHP - (2008-10-04)
  [1819] Calling base class constructors - (2008-10-03)
  [1682] Accounts in PHP - an OO demo - (2008-06-19)
  [1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
  [1027] Cue the music, I'm happy. - (2007-01-09)
  [836] Build on what you already have with OO - (2006-08-17)
  [720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
  [421] Don't repeat code - use loops or functions - (2005-08-21)
  [343] Should I use structured or object oriented? - (2005-06-10)
  [205] PHP5 lets you say no - (2005-02-07)
  [124] PHP v Java - (2004-11-20)
  [67] Object Oriented Programming in PHP - (2004-09-29)

Q908 - Object Orientation and General technical topics - Object Orientation: Design Patterns
  [4098] Using object orientation for non-physical objects - (2013-05-22)
  [4096] Perl design patterns example - (2013-05-20)
  [4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
  [3810] Reading files, and using factories to create vectors of objects from the data in C++ - (2012-07-21)
  [3716] Learning C++ - a design pattern for your first class - (2012-05-02)
  [2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
  [2322] Looking for a practical standards course - (2009-08-05)
  [1224] Object Relation Mapping (ORM) - (2007-06-09)


Back to
Relax at Well House Manor - gardens, fountain, hotel
Previous and next
or
Horse's mouth home
Forward to
Rooms ready for guests - each time, every time, thanks to good system design
Some other Articles
The Accidental Hotelier
Signs of Autumn
Good cause giving - getting the charity beggars off the street
Rooms ready for guests - each time, every time, thanks to good system design
Caching Design Patterns
Relax at Well House Manor - gardens, fountain, hotel
Spraying data from one incoming to series of outgoing files in Perl
Guest review - Well House Manor, Melksham
4279 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3843_Cac ... terns.html • PAGE BUILT: Sun Mar 30 15:20:58 2014 • BUILD SYSTEM: WomanWithCat