Skip to main content

Java Crate (design pattern/idiom) example

Another example, based on example explained in the book "Navrhove vzory" (Design patterns) from Rudolf Pecionvsky. I have re-made this example just to somehow get more familiar with this design pattern (or better idiom). The "crate" is used to store the set/list of object in one place, so that the moving (passing) these objects is easier.

The example from the book is very easy, and helps to understand, how this design pattern could be applied to som very usefull application (e.g. day planner)

Code example:
 
package com.sim.crate.common;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 * The Day Plan class demonstrates the usage of crate to create simple day plan, with items that do not collide.
 * @author shimon
 *
 */
public class DayPlan {
 private final List actions = new ArrayList();
 
 /**
  * Tries to add an item to the day plan with entered start, end time and duration. Returns true, if
  * the try was successful, or false if not. The item is added only if no collision with other items in 
  * the day plan appear.
  * @param hour - start hour
  * @param minute - start minute
  * @param duration - duration
  * @param subject - item subject
  * @return - bollean true - if success, else false
  */
 public boolean add(int hour, int minute, int duration, String subject){
  int start = hour * 60 + minute;
  int end = start + duration;
  ListIterator lip = actions.listIterator();
  while(lip.hasNext()){
   Item i = lip.next();
   if (i.end <= start){
    continue;
   }
   if(i.start <= end){
    return false;
   }
  }
  lip.add(new Item(start, end, subject));
  return true;
 }
 
 /**
  * Prints all items available in the dayplan.
  */
 public void print(){
  System.out.println("\nList of actions:");
  for (Item i:actions){
   System.out.printf("%02d:%02d - %02d:%02d %s\n", i.start / 60,i.start % 60,i.end / 60,i.end % 60,i.subject);
  }
  System.out.println("--------------------------------");
 }
 
 /**
  * Inner class used to store the items.
  * @author shimon
  *
  */
 private static class Item{
  int start;
  int end;
  String subject;
  
  Item(int start, int end, String subject){
   this.start = start;
   this.end = end;
   this.subject = subject;
  }
 }
 
 public void testAdd(int h, int m, int d, String txt){
  boolean success;
  System.out.printf("Adding %d minutes from %02d:%02d for %s\n", d, h, m, txt);
  success = add(h, m, d, txt);
  System.out.println("             " + (success?"OK":"FAIL"));
 }
}

Test class:
 
package com.sim.crate.common;


import org.junit.Test;

public class DayPlanTest {

 @Test
 public void test() {
  DayPlan dp = new DayPlan();
  dp.testAdd(8, 0, 30, "Waking up");
  dp.testAdd(10, 30, 90, "Relax");
  dp.testAdd(8, 30, 30, "Breakfast");
  dp.testAdd(9, 30, 90, "Work");
  dp.print();
 }
}


Comments

Popular posts from this blog

proste pohoda

minuly vikend som sa uz po druhykrat zucastnil festivalu pohoda. o najkrajsie zazitky sa teda podelim aj s vami. ako to vsetko prebiehalo? na zaciatku sme si uz pocas cesty stanovili presne pravidla, ako napriklad :"do not talk with french girl on the back seat..." a podobne. hned po prichode na trencianske letisko sme sa co najrychlejsie zorientovali v programe festivalu a coskoro sme uz skumali areal festivalu z bezprostrednej blizkosti. no a nieco k programu. den prvy - piatok: pocas poobedia sme sa zucastnili na lekcii balkanskych tancov (celkom dobre na zahriatie; spolu s dzusom riedenym vodkou:) neskor sme sa isli napapat naspat k nasmu autu a po neuspesnom cakani na nasich kamaratov sme sa vecer vybrali na koncert 'dana bartu' ... , kvoli ktoremu som vlastne na pohodu isiel. no co povedat na jeho vykon, ani sa to neda popisat... treba vidiet. zbytok vecera a noci sme pobehovali medzi stageami a stankami so suvenirmi. pekny zazitok mam aj z koncertu ...

Thajsko 2018 - Ko Lanta (opičky a rybičky)

Aby sme v Thajsku nevynechali čistokrvné dovolenkové rezorty s plážami, vydali sme sa z Krabi (príspevok o Krabi nájdete tu ) na ostrov Lanta, ktorý sa nachádza asi 2 hodiny každý vanom od Krabi smerom na juh. Už cesta samotná bola zaujímavá. Prekvapil nás najmä "systém", akým tu verejná doprava funguje. Van vás väčšinou vyzdvihne u konkrétneho hotelu a pokračuje vyzdvihnúť ďalších spolucestujúcich. Nakoniec sme sa ešte zastavili na miestnej autobusovej stanici, kde šofér od nejakého pána prevzal zásielku pre nejakú pizzeriu po ceste (podľa krabice asi ingrediencie na pizzu). Cestou sme ešte párkrát rôzne zastavili a vyložili nejaký tovar. Takže taxíky tu v podstate fungujú aj ako kuriéri. Nikto žiadne meškanke príliš nerieši, väčšinou zastavia a s úsmevom vám to vysvetlia "Five minute, ok?". Okrem týchto zastávok sa nám cesta predĺžila o čakanie na kompu na Koh Lanta, takže to čo malo trvať asi 2 hodiny, trvalo viac než 3. Až tak nám to zase nevadilo, pretože t...

Fujarový workshop

Po prudkom začiatku týždňa som sa až dnes dostal k písaniu príspevku o mojom predchádzajúcom víkende. Ten bol zvláštny najmä tým, že sme ako kapela boli súčasťou fujarového workshopu v Zázrivej. Ako sme sa k takejto akcii vôbec dostali? Nuž poznáme sa so správnymi ľuďmi. Teda s fujarášmi, ktorí toto podujatie organizujú už po druhý raz. Aj kvôli tomu, že ich poznáme, a že sú to fajn ľudia sme sa rozhodli im s touto akciou trochu pomôcť. Sami sme vlastne nevedeli, čo presne sa od nás ako kapely bude očakávať. Nakoniec to však dopadlo všetko takmer ideálne. Ráno sme zavítali do dedinky Zázrivá a hneď po vystúpení z auta nás na Jánošíkovom dvore vítali z každej strany zvuky cvičiacich fujarášov. Na workshope sa zúčastnilo približne 10 ľudí, ktorý sa buď chcú naučiť na fujare hrať alebo ich vyrábať. Dvor bol však plný okoloidúcich, ktorí sa prišli pozrieť na toto zaujímavé podujatie. Z našej strane išlo najmä o zvučenie a sprievod majstrov fujarášov Jara Slobodu a Dušana Holíka....