Rahmadnet

ObserverPattern

Mar 27th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.84 KB | None | 0 0
  1. 1. Class Main.java
  2.  
  3. package designpattern.observer;
  4.  
  5. import designpattern.observer.MyModel.Person;
  6.  
  7. public class Main
  8. {
  9.  
  10.     public static void main(String[] args)
  11.     {
  12.         MyModel model = new MyModel();
  13.         MyObserver observer = new MyObserver(model);
  14.         // we change the last name of the person, observer will get notified
  15.         for(Person person : model.getPersons())
  16.         {
  17.             person.setLastName(person.getLastName() + "1");
  18.         }
  19.         // we change the name of the person, observer will get notified
  20.         for(Person person : model.getPersons())
  21.         {
  22.             person.setFirstName(person.getFirstName() + "1");
  23.         }
  24.     }
  25.  
  26. }
  27.  
  28.  
  29. 2. Class MyModel.java
  30.  
  31. package designpattern.observer;
  32.  
  33. import java.beans.PropertyChangeEvent;
  34. import java.beans.PropertyChangeListener;
  35. import java.util.ArrayList;
  36. import java.util.List;
  37.  
  38. public class MyModel
  39. {
  40.     public static final String FIRSTNAME = "firstName";
  41.     public static final String LASTNAME = "lastName";
  42.    
  43.     private List<Person> persons = new ArrayList<Person>();
  44.     private List<PropertyChangeListener> listener= new ArrayList<PropertyChangeListener>();
  45.    
  46.     public class Person
  47.     {
  48.         private String firstName;
  49.         private String lastName;
  50.        
  51.         public Person(String firstName, String lastName)
  52.         {
  53.             this.firstName = firstName;
  54.             this.lastName = lastName;
  55.         }
  56.  
  57.         public String getFirstName()
  58.         {
  59.             return firstName;
  60.         }
  61.  
  62.         public void setFirstName(String firstName)
  63.         {
  64.             notifyListeners(
  65.                     this,FIRSTNAME,
  66.                     this.firstName,
  67.                     this.firstName = firstName);
  68.         }
  69.  
  70.         public String getLastName()
  71.         {
  72.             return lastName;
  73.         }
  74.  
  75.         public void setLastName(String lastName)
  76.         {
  77.             notifyListeners(
  78.                     this,LASTNAME,this.lastName,
  79.                     this.lastName = lastName);
  80.         }
  81.        
  82.     }
  83.    
  84.     public List<Person> getPersons()
  85.     {
  86.         return persons;
  87.     }
  88.    
  89.     public MyModel()
  90.     {
  91.         // just for testing we hard-code the persons here:
  92.         persons.add(new Person("Rahmad", "Nasution"));
  93.         persons.add(new Person("Wandi", "Pratama"));
  94.     }
  95.    
  96.     private void notifyListeners(Object object, String property, String oldValue, String newValue)
  97.     {
  98.         for(PropertyChangeListener name : listener)
  99.         {
  100.             name.propertyChange(new PropertyChangeEvent(this, property, oldValue, newValue));
  101.         }
  102.     }
  103.    
  104.     public void addChangeListener(PropertyChangeListener newListener)
  105.     {
  106.         listener.add(newListener);
  107.     }
  108. }
  109.  
  110. 3.Class MyObserver.java
  111.  
  112. package designpattern.observer;
  113.  
  114. import java.beans.PropertyChangeEvent;
  115. import java.beans.PropertyChangeListener;
  116.  
  117. public class MyObserver implements PropertyChangeListener
  118. {
  119.      public MyObserver(MyModel model)
  120.     {
  121.         model.addChangeListener(this);
  122.     }
  123.     @Override
  124.     public void propertyChange(PropertyChangeEvent event)
  125.     {
  126.         System.out.println("Changed property : " +
  127.                 event.getPropertyName() + " [old -> "
  128.                 + event.getOldValue() + "] | [new -> " +
  129.                 event.getNewValue() + "]");
  130.     }
  131.    
  132. }
Advertisement
Add Comment
Please, Sign In to add comment