SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
Class report




  CLASS ASSIGNMENT- 2
SHARE PRICE NOTIFICATION
  (OBSERVER PATTERN)




           Submitted by:

 Md.Mahedi Mahfuj             -BIT 0207



           Submitted to:

          Maeenul Islam

           Lecturer,IIT



        Date of submission:

         25th January,2012




Institute of Information Technology

                                          Page 1 of 10
Class report

                       University of Dhaka




         SHARE PRICE NOTIFICATION:



Introduction:
At first, we have to see what happens in this sort of share price notification
system, i.e. what features we have to focus on.

Now,let’s see the criteria that we have to maintain in our program. When a
user or client is registering ,he/she has to be added to the userlist. At the same
time, the preservation of the very information comes in mind.

But,if we think deeply, we can see that it’s not the responsibility of the user to
keep the registration information always in mind.Rather, the company is fully
responsible in respect of holding its users’ information.Now, the question
comes where will I keep the subscription info?So, let,s go through the whole
problem in brief.



There must be a Company class.Let’s, see what may be there…..



Company:
Company name:

Supportive information:

                                                                        Page 2 of 10
Class report

Userlist;

Shareprice:

So, some methods may be present like;

Registration();

ChangeShare();

NotifyUsers();



Again, there must be a User class.The features may be ….



User:
Name:

Description:

Functions like;

ReceiveNotification();

                         -may be present.



Another class named Share may be present. But, it’s not mandatory to take it
as a class .Rather, we can easily include it in the Company class.

Actually, what functions will play the key role can easily be detected.As,



Company                                            User

NotifyUser();                                      ReceiveNotification();


                                                                       Page 3 of 10
Class report



However;

           let’s focus, how we will troubleshoot the problem.

Company Class:
At first , we have to create a registration method in Company class in order to
maintain the generic registration issues.As for example;

Registration(User us){

Userlist.add(us);

}



Now, we have to maintain a suitable connection with the users who are added
to the userlist. If there is any change found in the share price then the
company has to notify the users about the possible change. As,

ChangeShare(double price){

If (shareprice !=price){

Shareprice=price;

NotifyUser();

}

}

NotifyUser(){

For all users in userlist{

//loop;

User.ReceiveNotification(shareprice,company name);


                                                                     Page 4 of 10
Class report

}}



User Class:
Now, after being called by NotifyUser() method, the ReceiveNotification()
method becomes active. So, it somehow sends the message that it has been
notifed. As,

ReceiveNotification(double price,company name){

Print(“I have been notified”);

}



So, what we clearly see here is that ,

                           Company notifies user.

                           User observe notification.

                           Hence, company – user observation process.

That’s why, this way of solving a problem is termed as “Observer Pattern”.

Now,

We have described the criteria in respect to one company only until now. If
we have to do the same thing in respect to many companies, then we just have
to add an abstract class namely AddCompany with some common features
extending the companies seperately with the extra features.




                                                                   Page 5 of 10
Class report




Likewise,




                           AddCompany



   Company1                  Company2                    ...............




Similarly,

We can use the same concept in case of multiple users,likewise;




                              AddUser



       User1                    User2                      .........

                                                                           Page 6 of 10
Class report



The main code to solve the problem is shown below:



Main Code:


User Class:


public class User {

      public static void main(String[ ] args) {

              Company cmp1 = new Company("Yahoo", 5000000);
              Company cmp2 = new Company("Apple", 4000000);

              ShareHolder sh1 = new ShareHolder("Mahedi", cmp1);
              cmp1.addShareHolder(sh1);
              ShareHolder sh2 = new ShareHolder("Mahfuj", cmp1);
              cmp1.addShareHolder(sh2);
              ShareHolder sh3 = new ShareHolder("Anik", cmp2);
              cmp2.addShareHolder(sh3);

              cmp1.changePrice(7000000);
              cmp2.changePrice(6000000);

      }
}




                                                                   Page 7 of 10
Class report




Company Class:

import java.util.ArrayList;

public class Company {

      private double sharePrice;
      private ArrayList<ShareHolder> sh;
      private String companyName;

      public Company(String cn,double sPrice){
            companyName = cn;
            sharePrice = sPrice;
            sh = new ArrayList<ShareHolder>();
      }

      public void addShareHolder(ShareHolder sh){
            this.sh.add(sh);
      }

      public void changePrice(double sPrice){
            if(this.sharePrice != sPrice){
                   java.util.Iterator<ShareHolder> itr = sh.iterator();
                   while(itr.hasNext()){

      itr.next().receiveNotification(getCompanyName(),sPrice);
                   }
             }
      }

      public String getCompanyName() {
            return companyName;
      }

      }

                                                                          Page 8 of 10
Class report




Shareholder Class:
//This class is not mandatory.We can add the shareholder information in the
company class even.//

import java.util.ArrayList;

public class ShareHolder {

      private String holderName;
      private ArrayList<Company> regCom;

      public ShareHolder(String hn,Company cm){
            holderName = hn;
            regCom = new ArrayList<Company>();
      }

      public void registerTo(Company cm){
            this.regCom.add(cm);
      }

      public void receiveNotification(String cName,double sPrice){
            System.out.println(this.holderName + " is notified as sharePrice of
            " + cName + " is changed to " + sPrice);
      }

      }




……………………………………………………………………………..X…………………………………………………………………………………



                                                                     Page 9 of 10
Class report




               Page 10 of 10

Mais conteúdo relacionado

Semelhante a Observer pattern

Diving into VS 2015 Day5
Diving into VS 2015 Day5Diving into VS 2015 Day5
Diving into VS 2015 Day5Akhil Mittal
 
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docxLab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docxsmile790243
 
Multi-company configuration with OpenERP 6
Multi-company configuration with OpenERP 6Multi-company configuration with OpenERP 6
Multi-company configuration with OpenERP 6Pexego
 
Google Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification GoogleGoogle Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification GoogleMathias Seguy
 
Previous weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docxPrevious weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docxkeilenettie
 
srcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docx
srcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docxsrcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docx
srcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docxrafbolet0
 
Diving into VS 2015 Day3
Diving into VS 2015 Day3Diving into VS 2015 Day3
Diving into VS 2015 Day3Akhil Mittal
 
Create an other activity lesson 3
Create an other activity lesson 3Create an other activity lesson 3
Create an other activity lesson 3Kalluri Vinay Reddy
 
Creating EPiServer Usage Reports
Creating EPiServer Usage ReportsCreating EPiServer Usage Reports
Creating EPiServer Usage ReportsPaul Graham
 
J developer 11g components ppt
J developer 11g components pptJ developer 11g components ppt
J developer 11g components pptTUSHAR VARSHNEY
 
Open microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutletOpen microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutletMitchinson
 
Writing Requirements Right
Writing Requirements RightWriting Requirements Right
Writing Requirements RightHani Massoud
 

Semelhante a Observer pattern (20)

Observer pattern
Observer patternObserver pattern
Observer pattern
 
Create New Android Activity
Create New Android ActivityCreate New Android Activity
Create New Android Activity
 
Diving into VS 2015 Day5
Diving into VS 2015 Day5Diving into VS 2015 Day5
Diving into VS 2015 Day5
 
Eclipse Tricks
Eclipse TricksEclipse Tricks
Eclipse Tricks
 
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docxLab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
 
Multi-company configuration with OpenERP 6
Multi-company configuration with OpenERP 6Multi-company configuration with OpenERP 6
Multi-company configuration with OpenERP 6
 
Google Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification GoogleGoogle Plus SignIn : l'Authentification Google
Google Plus SignIn : l'Authentification Google
 
Lecture 9
Lecture 9Lecture 9
Lecture 9
 
ax2012
 ax2012 ax2012
ax2012
 
Previous weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docxPrevious weeks work has been uploaded as well as any other pieces ne.docx
Previous weeks work has been uploaded as well as any other pieces ne.docx
 
srcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docx
srcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docxsrcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docx
srcCommissionCalculation.javasrcCommissionCalculation.javaimpo.docx
 
Diving into VS 2015 Day3
Diving into VS 2015 Day3Diving into VS 2015 Day3
Diving into VS 2015 Day3
 
Learning Robotic Process Automation-81-167
Learning Robotic Process Automation-81-167Learning Robotic Process Automation-81-167
Learning Robotic Process Automation-81-167
 
Create an other activity lesson 3
Create an other activity lesson 3Create an other activity lesson 3
Create an other activity lesson 3
 
Creating EPiServer Usage Reports
Creating EPiServer Usage ReportsCreating EPiServer Usage Reports
Creating EPiServer Usage Reports
 
J developer 11g components ppt
J developer 11g components pptJ developer 11g components ppt
J developer 11g components ppt
 
Open microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutletOpen microsoft visual studio/tutorialoutlet
Open microsoft visual studio/tutorialoutlet
 
CPP Homework Help
CPP Homework HelpCPP Homework Help
CPP Homework Help
 
Clean code
Clean codeClean code
Clean code
 
Writing Requirements Right
Writing Requirements RightWriting Requirements Right
Writing Requirements Right
 

Mais de Md. Mahedi Mahfuj (20)

Bengali optical character recognition system
Bengali optical character recognition systemBengali optical character recognition system
Bengali optical character recognition system
 
Parallel computing chapter 3
Parallel computing chapter 3Parallel computing chapter 3
Parallel computing chapter 3
 
Parallel computing chapter 2
Parallel computing chapter 2Parallel computing chapter 2
Parallel computing chapter 2
 
Parallel computing(2)
Parallel computing(2)Parallel computing(2)
Parallel computing(2)
 
Parallel computing(1)
Parallel computing(1)Parallel computing(1)
Parallel computing(1)
 
Message passing interface
Message passing interfaceMessage passing interface
Message passing interface
 
Advanced computer architecture
Advanced computer architectureAdvanced computer architecture
Advanced computer architecture
 
Parallel searching
Parallel searchingParallel searching
Parallel searching
 
Clustering manual
Clustering manualClustering manual
Clustering manual
 
Matrix multiplication graph
Matrix multiplication graphMatrix multiplication graph
Matrix multiplication graph
 
Mediator pattern
Mediator patternMediator pattern
Mediator pattern
 
Database management system chapter12
Database management system chapter12Database management system chapter12
Database management system chapter12
 
Strategies in job search process
Strategies in job search processStrategies in job search process
Strategies in job search process
 
Report writing(short)
Report writing(short)Report writing(short)
Report writing(short)
 
Report writing(long)
Report writing(long)Report writing(long)
Report writing(long)
 
Job search_resume
Job search_resumeJob search_resume
Job search_resume
 
Job search_interview
Job search_interviewJob search_interview
Job search_interview
 
Apache hadoop & map reduce
Apache hadoop & map reduceApache hadoop & map reduce
Apache hadoop & map reduce
 
Map reduce
Map reduceMap reduce
Map reduce
 
R with excel
R with excelR with excel
R with excel
 

Último

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Último (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Observer pattern

  • 1. Class report CLASS ASSIGNMENT- 2 SHARE PRICE NOTIFICATION (OBSERVER PATTERN) Submitted by: Md.Mahedi Mahfuj -BIT 0207 Submitted to: Maeenul Islam Lecturer,IIT Date of submission: 25th January,2012 Institute of Information Technology Page 1 of 10
  • 2. Class report University of Dhaka SHARE PRICE NOTIFICATION: Introduction: At first, we have to see what happens in this sort of share price notification system, i.e. what features we have to focus on. Now,let’s see the criteria that we have to maintain in our program. When a user or client is registering ,he/she has to be added to the userlist. At the same time, the preservation of the very information comes in mind. But,if we think deeply, we can see that it’s not the responsibility of the user to keep the registration information always in mind.Rather, the company is fully responsible in respect of holding its users’ information.Now, the question comes where will I keep the subscription info?So, let,s go through the whole problem in brief. There must be a Company class.Let’s, see what may be there….. Company: Company name: Supportive information: Page 2 of 10
  • 3. Class report Userlist; Shareprice: So, some methods may be present like; Registration(); ChangeShare(); NotifyUsers(); Again, there must be a User class.The features may be …. User: Name: Description: Functions like; ReceiveNotification(); -may be present. Another class named Share may be present. But, it’s not mandatory to take it as a class .Rather, we can easily include it in the Company class. Actually, what functions will play the key role can easily be detected.As, Company User NotifyUser(); ReceiveNotification(); Page 3 of 10
  • 4. Class report However; let’s focus, how we will troubleshoot the problem. Company Class: At first , we have to create a registration method in Company class in order to maintain the generic registration issues.As for example; Registration(User us){ Userlist.add(us); } Now, we have to maintain a suitable connection with the users who are added to the userlist. If there is any change found in the share price then the company has to notify the users about the possible change. As, ChangeShare(double price){ If (shareprice !=price){ Shareprice=price; NotifyUser(); } } NotifyUser(){ For all users in userlist{ //loop; User.ReceiveNotification(shareprice,company name); Page 4 of 10
  • 5. Class report }} User Class: Now, after being called by NotifyUser() method, the ReceiveNotification() method becomes active. So, it somehow sends the message that it has been notifed. As, ReceiveNotification(double price,company name){ Print(“I have been notified”); } So, what we clearly see here is that , Company notifies user. User observe notification. Hence, company – user observation process. That’s why, this way of solving a problem is termed as “Observer Pattern”. Now, We have described the criteria in respect to one company only until now. If we have to do the same thing in respect to many companies, then we just have to add an abstract class namely AddCompany with some common features extending the companies seperately with the extra features. Page 5 of 10
  • 6. Class report Likewise, AddCompany Company1 Company2 ............... Similarly, We can use the same concept in case of multiple users,likewise; AddUser User1 User2 ......... Page 6 of 10
  • 7. Class report The main code to solve the problem is shown below: Main Code: User Class: public class User { public static void main(String[ ] args) { Company cmp1 = new Company("Yahoo", 5000000); Company cmp2 = new Company("Apple", 4000000); ShareHolder sh1 = new ShareHolder("Mahedi", cmp1); cmp1.addShareHolder(sh1); ShareHolder sh2 = new ShareHolder("Mahfuj", cmp1); cmp1.addShareHolder(sh2); ShareHolder sh3 = new ShareHolder("Anik", cmp2); cmp2.addShareHolder(sh3); cmp1.changePrice(7000000); cmp2.changePrice(6000000); } } Page 7 of 10
  • 8. Class report Company Class: import java.util.ArrayList; public class Company { private double sharePrice; private ArrayList<ShareHolder> sh; private String companyName; public Company(String cn,double sPrice){ companyName = cn; sharePrice = sPrice; sh = new ArrayList<ShareHolder>(); } public void addShareHolder(ShareHolder sh){ this.sh.add(sh); } public void changePrice(double sPrice){ if(this.sharePrice != sPrice){ java.util.Iterator<ShareHolder> itr = sh.iterator(); while(itr.hasNext()){ itr.next().receiveNotification(getCompanyName(),sPrice); } } } public String getCompanyName() { return companyName; } } Page 8 of 10
  • 9. Class report Shareholder Class: //This class is not mandatory.We can add the shareholder information in the company class even.// import java.util.ArrayList; public class ShareHolder { private String holderName; private ArrayList<Company> regCom; public ShareHolder(String hn,Company cm){ holderName = hn; regCom = new ArrayList<Company>(); } public void registerTo(Company cm){ this.regCom.add(cm); } public void receiveNotification(String cName,double sPrice){ System.out.println(this.holderName + " is notified as sharePrice of " + cName + " is changed to " + sPrice); } } ……………………………………………………………………………..X………………………………………………………………………………… Page 9 of 10
  • 10. Class report Page 10 of 10