-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội
Không được mắc sai lầm!
Cuộc sống của chúng ta là những ngày lặp đi lặp lại với những hoạt động giống nhau từ thức dậy, ăn uống làm việc nghỉ ngơi và chúng ta không thể thay đổi được nó. Khi đi làm có những quy trình trong dự án với những bước thực hiện mà chúng ta. phải tuân theo để tránh khỏi những sai lầm không đáng có, chúng ta gọi đó là những hành động mẫu hay hành động tiêu chuẩn
Giới thiệu
Không còn nghi ngờ gì nữa, Template Method chính là pattern được sử dụng nhiều nhất trong tất cả các #design #pattern, từ client đến server, từ ứng dụng nhỏ đến hệ thống lớn. Không có Template Method pattern, có lẽ giờ đây chúng ta vẫn vạ vật với những sơ đồ #lifecycle
Vì sao Template Method pattern lại quan trọng đến như vậy? Chúng ta hãy lấy ví dụ về hoạt động chung của mỗi người trong một ngày nhé:
- Thức dậy
- Ăn sáng (mọi người nhớ ăn sáng để đảm bảo sức khoẻ nhé)
- Làm việc ca sáng
- Ăn trưa
- Làm việc ca chiều
- Ăn tối
- Vệ sinh cá nhân
- Đi ngủ
Thứ tự của các hoạt động này không thể bị đảo lộn, cũng như chương trình của chúng ta nó phải tuân theo những quy tắc nhất định. Vậy thì làm sao để ép buộc mọi người phải tuân theo thứ tự này? Chính vì vậy chúng ta cần đến Template Method pattern.
Mục tiêu
Template Method pattern ra đời với các mục tiêu sau:
- Tạo ra một quy chuẩn bắt buộc các lập trình viên phải tuân theo để tránh lỗi thứ tự gọi hàm
- Tạo ra một hàm xử lý chung và gọi đến các hàm có tính chất riêng để tránh duplicate source code
- Che dấu đi sự phức tạp của lớp cha, giúp lập trình viên thoát khỏi việc đọc quá nhiều tài liệu
Đối với các thư viện lập trình có vòng đời (#lifecycle) của một đối tượng phức tạp như Android, ReactJS thì việc đưa Template Method pattern vào gần như là điều bắt buộc nếu không muốn các lập trình viên bỏ cuộc, mà ai là người quyết định đến thành bại của 1 framework? Đó chính là chúng ta, những lập trình viên.
Ví dụ
Giả sử chúng ta đang cần mô tả các hoạt động của mọi người ở 2 châu lục, châu Á và châu Âu.
Người châu Á:
- Thức dậy: vào lúc 7h
- Ăn sáng: với mì
- Làm việc ca sáng: trong 4 tiếng
- Ăn trưa: với cơm
- Làm việc ca chiều: trong 4 tiếng
- Ăn tối: với cơm
- Vệ sinh cá nhân: tắm, đánh răng
- Đi ngủ: lúc 22h
Người Châu Âu:
- Thức dậy: vào lúc 8h và đi tắm
- Ăn sáng: với ngũ cốc
- Làm việc ca sáng: trong 3 tiếng
- Ăn trưa: với pizza
- Làm việc ca chiều: trong 5 tiếng
- Ăn tối: với bánh mì
- Vệ sinh cá nhân: đánh răng
- Đi ngủ: lúc 23h
Hãy viết code để hiểu chúng ta cần làm gì nhé: Lớp cha, đại diện chung mô tả người:
public abstract class Person {
public final void actionInAday() {
wakeUp();
haveBreakfast();
workInMorning();
haveLunch();
workInAfternoon();
haveDinner();
personalHygiene();
goToSleep();
}
protected abstract void wakeUp();
protected abstract void haveBreakfast();
protected abstract void workInMorning();
protected abstract void haveLunch();
protected abstract void workInAfternoon();
protected abstract void haveDinner();
protected abstract void personalHygiene();
protected abstract void goToSleep();
}
Lớp mô tả người châu Á:
public class Asian extends Person {
@Override
protected void wakeUp() {
System.out.println("wake up at 07:00 AM");
}
@Override
protected void haveBreakfast() {
System.out.println("have breakfast with noodle");
}
@Override
protected void workInMorning() {
System.out.println("work in morning about 4 hours");
}
@Override
protected void haveLunch() {
System.out.println("have lunch with rice");
}
@Override
protected void workInAfternoon() {
System.out.println("work in afternoon about 4 hours");
}
@Override
protected void haveDinner() {
System.out.println("have dinner with rice");
}
@Override
protected void personalHygiene() {
System.out.println("take a shower and brush teeth");
}
@Override
protected void goToSleep() {
System.out.println("go to sleep at 10:00 PM");
}
}
Lớp mô tả người Châu Âu:
public class European extends Person {
@Override
protected void wakeUp() {
System.out.println("wake up at 08:00 AM and take a shower");
}
@Override
protected void haveBreakfast() {
System.out.println("have breakfast with cereals");
}
@Override
protected void workInMorning() {
System.out.println("work in morning about 3 hours");
}
@Override
protected void haveLunch() {
System.out.println("have lunch with pizza");
}
@Override
protected void workInAfternoon() {
System.out.println("work in afternoon about 5 hours");
}
@Override
protected void haveDinner() {
System.out.println("have dinner with bread");
}
@Override
protected void personalHygiene() {
System.out.println("brush teeth");
}
@Override
protected void goToSleep() {
System.out.println("go to sleep at 11:00 PM");
}
}
Cách sử dụng:
Person asian = new Asian();
Person european = new European();
asian.actionInAday();
european.actionInAday();
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
- Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
- Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
- Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
- Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
- Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
- Tham gia phát triển open source!
- Buôn có bạn, bán có phường
- Đam mê đi đâu rồi?
- Giữa lửa đam mê!
- Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
- Tương lai nào cho tester? - Khi thế sự đổi thay!
- Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
- Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
- Tương lai nào cho lập trình viên? Có làm giàu được không?
- Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
- Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
- Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
- Tương lai nào cho lập trình viên - Tổng kết lại!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
- Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
- Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
- Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
- Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
- Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
- Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
- Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
- Metaverse có khả thi ở Việt Nam?
- Lựa chọn nghề nghiệp - DevOps!
- Lựa chọn nghề nghiệp - Project Manager (PM)!
- Lựa chọn nghề nghiệp - Data Engineer!
- Lựa chọn nghề nghiệp - BackEnd Engineer!
- “Talk is cheap. Show me the code” ― Linus Torvalds
- Lựa chọn nghề nghiệp - Web Front-End Engineer!
- Lựa chọn nghề nghiệp - Mobile Engineer!
- Lựa chọn nghề nghiệp - Game Engineer!
- Lựa chọn nghề nghiệp - Product Owner!
- Tuổi trẻ cần đột phá!
- Tuổi trẻ cần sự đồng cảm!
- Tuổi trẻ - điều đáng sợ đầu tiên là gì?
- Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
- Nếu tận dụng hết năng lực thì sẽ thế nào?
- Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
- Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
- Tuổi trẻ - ham học hỏi là như thế nào?
- Đầu tư cho bản thân là gì?
- Học chủ động!
- Có nên quay lại công ty cũ?
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
- Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
- Tự học
- Học tập tại doanh nghiệp
- Học tại trung tâm
- Cách đọc sách kỹ thuật hiệu quả
- Học trong một tổ chức mã nguồn mở.
- Câu chuyện lập trình viên - Công việc đầu tiên
- Câu chuyện lập trình viên - Mức lương đầu tiên
- Câu chuyện lập trình viên - 2018
- Định hướng là gì?
- Wordpress nguy hiểm thế nào?
- Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội