Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (897.12 KB, 10 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
0093667 Nguyễn Quang Nghĩa
Cài đặt Java 0003167 Hồ Sỹ Chinh
0073367 Đinh Bùi Nam
0162167 Cao Việt Linh Vẽ lại biểu đồ lớp4010067 Trịnh Ngọc Quang Tìm hiểu mẫu Observer
design pattern
Chúng tôi cũng muốn cảm ơn những người bạn đã chia sẻ kiến thức, ý kiếnvà góp ý quý báu, giúp chúng tơi vượt qua những thách thức trong q trìnhnghiên cứu và phát triển phần mềm.
Không thể không kể đến sự hỗ trợ từ gia đình và bạn bè, những người đãhiểu và ủng hộ chúng tơi suốt q trình nghiên cứu. Những lời động viên và sựhỗ trợ tinh thần từ họ đã đóng góp quan trọng vào sự thành công của chúng tôi.
Cuối cùng, chúng tôi xin bày tỏ lòng biết ơn sâu sắc đến tất cả những ngườiđã đồng hành và đóng góp vào hành trình nghiên cứu của chúng tôi.
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">Observer design pattern là một mẫu thiết kế phần mềm mà một đối tượng,gọi là subject, duy trì một danh sách các thành phần phụ thuộc nó, gọilà observer, và thơng báo tới chúng một cách tự động về bất cứ thay đổi nào,thường thì bằng cách gọi 1 hàm của chúng.
Định nghĩa mối phụ thuộc một - nhiều giữa các đối tượng để khi mà một đốitượng có sự thay đổi trạng thái, tất các thành phần phụ thuộc của nó sẽ đượcthơng báo và cập nhật một cách tự động.
Một đối tượng có thể thơng báo đến một số lượng không giới hạn các đốitượng khác.
Ưu điểm:
Đảm bảo nguyên tắc Open/Closed Principle (OCP): Cho phép thayđổi Subject và Observer một cách độc lập. Chúng ta có thể tái sử dụngcác Subject mà không cần tái sử dụng các Observer và ngược lại. Nócho phép thêm Observer mà khơng sửa đổi Subject hoặc Observer khác.
Thiết lập mối quan hệ giữa các objects trong thời gian chạy. Sự thay đổi trạng thái ở 1 đối tượng có thể được thơng báo đến cácđối tượng khác mà không phải giữ chúng liên kết quá chặt chẽ.
Không giới hạn số lượng Observer
Sử dụng Observer Patern khi chúng ta muốn:
<sup>Sự thay đổi trạng thái ở 1 đối tượng cần được thông báo đến các</sup>đối tượng khác mà không phải giữ chúng liên kết quá chặt chẽ.
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"> Cần mở rộng dự án với ít sự thay đổi nhất.
Khi abstraction có 2 khía cạnh, cái này phụ thuộc cái kia. Đóng góicác khía cạnh này trong các đối tượng khác nhau cho phép bạn thay đổivà tái sử dụng chúng độc lập.
Khi thay đổi một đối tượng yêu cầu việc thay đổi đến các đối tượngkhác, và bạn không biết số lượng đối tượng cần thay đổi.
Khi một đối tượng thông báo các đối tượng khác mà không cầnbiết đối tượng đó là gì hay nói cách khác là tránh tightly coupled.
Subject :
o Là đối tượng chứa thông tin hoặc trạng thái cần được theo dõi.o Cung cấp các phương thức để thêm, xóa hoặc thơng báo cho cácobservers khi trạng thái của nó thay đổi.
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7"><small>* Click default.txt to change this license</small>
<small>nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.javato edit this template</small>
<small>package baitaplon;/**</small>
<small>* @author Admin*/</small>
<small>import java util ArrayList..;import java util List..;// Interface ISubjectinterface ISubject {</small>
<small> void attach(Observerobserver); void detach(Observerobserver); void notifyAllObserver();}</small>
<small>// Interface IObserverinterface Observer {</small>
<small> void update(DBvariableEvarDBe); void ConnectDB(DBvariableEvarDBe);}</small>
<small>// Class DBvariableEclass DBvariableE {</small>
<small> StringvarE;</small>
<small> publicDBvariableE(String varE) { this.varE =varE; }</small>
<small>// Class ConnectDB</small>
<small>classConnectDBimplementsISubject {</small>
<small> private final List Observer<> observers= newArrayList<>(); private DBvariableEvarDBe;</small>
<small> @Override</small>
<small> publicvoid attach(Observerobserver) { observers.add(observer);</small>
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><small> } @Override</small>
<small> publicvoid detach(Observerobserver) { observers.remove(observer); }</small>
<small> @Override</small>
<small> publicvoid notifyAllObserver() { for (Observerobserver : observers) { observer.update(varDBe); }</small>
<small> }}}</small>
<small>// Class MySQLDBcon</small>
<small>classMySQLDBconimplementsObserver { @Override</small>
<small> publicvoid ConnectDB(DBvariableEvarDBe) {</small>
<small> System.out.println("Connecting to MySQL database..."); }</small>
<small> @Override</small>
<small> publicvoid update(DBvariableEvarDBe) {</small>
<small> System.out.println("Updating MySQL database..."); }</small>
<small>// Class SQLServerDBcon</small>
<small>classSQLServerDBconimplementsObserver { @Override</small>
<small> publicvoid ConnectDB(DBvariableEvarDBe) {</small>
<small> System.out.println("Connecting to SQL Server database..."); }</small>
<small> </small>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><small> publicvoid update(DBvariableEvarDBe) {</small>
<small> System.out.println("Updating SQL Server database..."); }</small>
<small>// Class MongoDBcon</small>
<small>classMongoDBconimplementsObserver { @Override</small>
<small> publicvoid ConnectDB(DBvariableEvarDBe) {</small>
<small> System.out.println("Connecting to MongoDB database..."); }</small>
<small> @Override</small>
<small> publicvoid update(DBvariableEvarDBe) {</small>
<small> System.out.println("Updating MongoDB database..."); }</small>
<small>public classMain {</small>
<small> public staticvoid main(String[] args) { // Tạo một đố?i tượng ConnectDB ConnectDBconnectDB =new ConnectDB(); // Tạo các đố?i tượng Observer</small>
<small> MySQLDBconmySQLDBcon =new MySQLDBcon(); SQLServerDBconsqlServerDBcon =new SQLServerDBcon(); MongoDBconmongoDBcon =new MongoDBcon(); // Đăng ký các Observer với ConnectDB connectDB.attach(mySQLDBcon); connectDB.attach(sqlServerDBcon); connectDB.attach(mongoDBcon);</small>
<small> // Khi có sự thay đốKi trong mối trường biế?n, kế?t nố?i và cập</small>
<small> StringoldVarE ="oldValue";</small>
<small> (ifconnectDB.checkChangeVariableEnvironment(oldVarE)) { connectDB.connectToDB();</small>
<small> } else {</small>
<small> System.out.println("No change in variable environment. Database connection not required."); }</small>
<small> }}</small>
</div>