Bài đăng

Đang hiển thị bài đăng từ Tháng 11, 2016

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

[Tut 6 - Design Pattern] Factory

Hình ảnh
Factory Pattern là gì? Factory Method là một mẫu khác thuộc nhóm các mẫu thiết kế phục vụ mục đích khởi tạo (kỳ trước chúng ta có mẫu Abstract Factory cũng nằm trong nhóm này). Điểm khác biệt cơ bản của 2 mẫu này đó là Abstract Factory dược dùng để tạo ra nhiều loại đối tượng thuộc cùng một nhóm, còn Factory Method nhằm mục đích thay đổi việc khởi tạo đổi tượng một cách linh hoạt. Mình có một ví dụ đơn giản cho trường hợp này: Nhà bạn chỉ có một con thú cưng (giống cái nhé), và nó đang mang bầu, tới khi nó đẻ con, bạn chạy sang nhà hàng xóm khoe, nhưng người hàng xóm này chỉ mới chuyển tới thôi, và họ không biết con thú cưng của bạn là thuộc loài nào, nên họ chỉ có thể biết được ngay lúc bạn giới thiệu rằng: “Con thú cưng nhà nó đã đẻ con rồi đó”. Và một bà cụ nhà kế bên, khi nghe thấy bạn khoe sẽ nghĩ ngay rằng: "Thế là con mèo lúc trước mình cho nó đã đẻ ra mấy chú mèo con rồi!". Qua ví dụ trên chúng ta có thể thấy cách để mẫu Factory Method được áp dụng: Bạn có thể g

[Tut 5 - Design Pattern] Observer

Hình ảnh
Pattern Observer là gì ? Observer cho phép các đối tượng có thể lắng nghe và phản ứng khi có thông báo từ một đối tượng khác. Tức là khi một đối tượng gửi một thông báo, các đối tượng lắng nghe nó có thể phản ứng lại với thông báo đó. Sử dụng khi nào ? Khi bạn muốn các đối tượng liên lạc với nhau. Khi đối tượng này gửi 1 thông điệp thì các đối tượng đăng ký lắng nghe thông điệp sẽ phản ứng lại với thông điệp đó. Đối tượng gửi thông điệp sẽ không cần biết nó sẽ gửi cho ai và đối tượng nhận thông điệp sẽ không cần biết ai gửi thông điệp đó. Dùng nó như thế nào? Giả sử trong một hệ thống bán hàng, mỗi khi có sản phẩm mới hệ thống sẽ thông báo cho tất cả các khách hàng quan tâm đến sản phẩm này. Đầu tiên tôi tạo ra một lớp interface với 1 phương thức sẽ phản ứng khi có sản phẩm mới. public interface Observer { void update(String message); // phương thức phản ứng lại khi nhận được thông báo. } Và lớp Customer sẽ triển khai interface trên: public class Customer im

[Tut 4 - Design Pattern] Proxy

Pattern Proxy là gì? - Mẫu Proxy (người đại diện) đại diện cho 1 chức năng của lớp khác. Bạn có thể hiểu, ta thuê 1 luật sư về đại diện cho ta, người luật sư này có thể dùng các quyền của mình một cách gián tiếp để nói cho các người khác một cách chính xác vì luật sư am hiểu về pháp luật hơn mình. Khi nào dùng nó? - Khi bạn muốn bảo vệ quyền truy xuất vào các chức năng (phương thức) của thực thể. - Bổ sung trước khi thực hiện phương thức của thực thể. - Tạo đối tượng với chức năng được nâng cao theo yêu cầu. Dùng nó như thế nào? Tôi sẽ xây dựng một ví dụ đơn giản như sau: - Tôi có 1 inteface mô tả chức năng của một class: public interface ReadFile { public String readFile(); } Tiếp theo tạo class User triển khai interface trên: public class User implements ReadFile { private String name; // Tên của người dùng public User(String name) { this.name = name; } @Override public String readFile() { // Phương thức đọc