Tải bản đầy đủ (.pdf) (10 trang)

từ biểu đồ thiết kế và bài toán giảng viên đưa ra hãy cài đặt đầy đủ nhất có thể cho bài toán thiết kế này bằng ngôn ngữ lập trình java

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">

<b>TRƯỜNG ĐẠI HỌC XÂY DỰNG HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN</b>

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

Hà Nội, 24.02.2024

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

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">

<b>I. Mẫu Observer design pattern</b>

<b>1. Định nghĩa</b>

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.

<b>2. Mục tiêu</b>

Đị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.

<b>3. Ưu & nhược điểm</b>

 Ư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.

<b>5. Cấu trúc</b>

 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">

<b>II. Vẽ biểu đồ lớp cho thiết kế giảng viên đưa ra</b>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>III. Cài đặt</b>

<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>

×