Bài đăng

Tài Liệu Môn Tâm Lý Học Đại Cương

BỘ CÂU HỎI TRẮC NGHIỆM KHÁCH QUAN CHO MÔN HỌC TÂM LÝ HỌC ĐẠI CƯƠNG: Tải tại đây  Giáo trình Tâm lý học đại cương: Tải tại đây

[Tut 12 - Design Pattern] Builder Pattern

Hình ảnh
Builder Pattern là gì? Builder Pattern xây dựng một đối tượng phức tạp bằng cách sử dụng các đối tượng đơn giản và sử dụng tiếp cận từng bước. Đây là loại design pattern thuộc creational pattern, mô hình này cung cấp một trong những cách tốt nhất để tạo ra một đối tượng. Một lớp Builder xây dựng các đối tượng bước cuối cùng bước. Đối tượng Builder độc lập với các đối tượng khác. Step 1: Create an interface Item representing food item and packing. Item.java public interface Item { public String name(); public Packing packing(); public float price(); } Packing.java public interface Packing { public String pack(); } Step 2: Create concreate classes implementing the Packing interface. Wrapper.java public class Wrapper implements Packing { public class Wrapper implements Packing { @Override public String pack() { return "Wrapper"; } } Bottle.java public class Bottle implements Packing { @Override public String

[Tut 11 - Design Pattern] Object Pool

Hình ảnh
Performance có thể đôi khi cũng là vấn đề lớn trong việc phát triển phần mềm và việc tạo ra object là một step cần phải được cân nhắc. Trong khi prototype pattern giúp cho việc cải thiện performance bằng cách cloning object, Object pool pattern cung cấp một kỹ thuật để tái sử dụng objects thay vì khởi tạo không kiểm soát. Vậy mục đích của object pool pattern là gì? - Tái sử dụng và share objects cần sử dụng thay vì khởi tạo không kiểm soát. Implementation object pool pattern thế nào? Object pool pattern Việc triển khai object pool pattern sẽ bao gồm những object sau: Reusable - là một wraps class limited,sẽ được share bởi một số client với việc giới hạn time. Client - sử dụng instance của (1) ReusablePool - quản lý những object của (1) được sử dụng ở (2), khởi tạo và quản lý một pool của tất cả object. Khi một client yêu cầu sử dụng một Reusable object, ReusablePool sẽ thực hiện những bước bên dưới đây: Tìm kiếm một Reusable có sẵn và nếu nó đã tồn tại thì sẽ đư

[Tut 10 - Design Pattern] Null Object

Hình ảnh
Có một số trường hợp khi hệ thống phải sử dụng một vài chức năng và một vài trường hợp nó không sử dụng. Giả sử bạn phải thực hiện một class mà nó phải ghi log vào môt file hoặc console. Nhưng điều này chỉ là một tính năng bổ sung và các dữ liệu được ghi phụ thuộc vào cách cấu hình ghi log của bạn. Nếu có những trường hợp khi một vài module không cần phải ghi lại log thì bạn phải thực hiện việc kiểm tra xem những module này có cần phải thực hiện log hay không trong một khối IF để kiểm tra trong file cấu hình. Như vậy, việc triển khai này không phải là một giải pháp hay. Và Null Object Design Pattern ra đời từ đây. Null Object Design Pattern là gì? Nó cung cấp một null object để thay thế cho trường hợp một instance bị NULL. Thay vì sử dụng một lệnh IF để check một null value, Null Object sẽ phản ánh một mối liên hệ không phải thực hiện - không làm gì cả. Triển khai Null Object Design Pattern Những class tham gia vào pattern này bao gồm: AbstractClass - định nghĩa một behavior cho một c

[Tut 9 - Design Pattern] Prototype

Hình ảnh
Pattern Prototype là gì? Ngày nay, development quan trọng nhất là chi phí. Tiết kiệm là một vấn đề lớn khi nhắc đến việc sử dụng tài nguyên máy tính, do đó, các lập trình viên đang cố gắng hết sức để tìm ra giải pháp cải thiện hiệu năng của phần mềm. Trong lập trình oop, khi nhắc đến việc khởi tạo object, bạn có thể tìm thấy một cách tốt hơn để tạo ra một object đó là cloning. Ý tưởng này là một design pattern đặc biệt có liên quan đến việc khởi tạo object, thay vì tạo ra object, prototype pattern sử dụng cloning. Nếu việc tạo ra object lớn và tốn nhiều tài nguyên, bạn hãy nên sử dụng prototype pattern này. Prototype pattern nó cho phép một object tạo ra những customized object mà không cần biết class của nó và bất kỳ chi tiết gì làm thế nào để tạo ra chúng. Ở thời điểm hiện tại, sẽ có rất nhiều người đang confuse khái niệm này với Factory Pattern, những giữa chúng thì hoàn toàn khác nhau. Sự khác nhau này, tôi sẽ trình bày vào một bài viết khác, ở đây tôi chỉ tập trung cho prototy

[Tut 8 - Design Pattern] Wrapper

Wrapper Pattern là gì? Wrapper Pattern là một trường hợp đặc biệt của Adapter Pattern . Nếu một Adapter chỉ đơn thuần là "nhúng" (wrap) các lớp với các giao diện không tương thích với nhau để chúng có thể hoạt động cùng nhau thì có thể được gọi bằng tên riêng Wrapper Pattern. Khi đó lớp Adapter còn được gọi là lớp Wrapper. Đây là quan hệ "có một", tức là một giao diện không tương thích có thể được nhúng vào thành một phần của một giao diện khác. Đặc điểm Đối tượng Wrapper mô phỏng tất cả các hành vi (hàm, thủ tục) của giao diện được nhúng bởi các hành vi với tên y hệt. Thí dụ nếu lớp được nhúng A có thủ tục SpecificRequest() thì lớp Wrapper cũng phải có thủ tục SpecificRequest() tham chiếu đến thủ tục cùng tên của A. (Ngoài ra đối tượng Wraper có thể được bổ sung các phương thức khác nếu cần thiết). Đặc điểm này được đưa ra dựa trên nguyên tắc thiết kế "Law of Demeter" nói rằng không nên tham chiếu một đối tượng sâu hơn một lớp. Các phương thức tro

[Tut 7 - Design Pattern] Composite

Composite Pattern là gì ? Composite là một mẫu thiết kế thuộc nhóm cấu trúc, cho phép thực hiện các tương tác với tất cả đối tượng trong mẫu tương tự nhau. Một ví dụ thực tế có thể áp dụng cho mẫu này đó là việc thiết kế một mạch điện. Với một mạch điện đơn giản có thể chứa các thiết bị đơn lẻ, mắc nối tiếp hoặc song song với nhau, và cả những mạch điện phức tạp trong đó là các mạch con được kết hợp với nhau thay vì các thiết bị đơn lẻ. Cho dù mạch này được cấu tạo như thế nào, thì việc tính điện trở của mạch chỉ nằm trong 2 trường hợp: Mắc nối tiếp: R = R1 + R2 + … + Rn. Mắc song song: 1/R = 1/R1 + 1/R2 + … + 1/Rn. (Nếu có thắc mắc về các công thức này bạn có thể tìm hiểu thêm sách vật lý phổ thông). Với công thức này, việc lập trình theo cách suy nghĩ đơn giản nhất có thể sẽ khiến cho việc hiện thực hóa trở nên khó khăn hơn rất nhiều, trong đó chúng ta có một cách tiếp cận khá đơn giản mà phức tạp như: Rnối tiếp = Tính điện trở của tất cả thiết bị đơn () + Tính điện trở