Vẫn là Template Method thôi. :v
Mấy tutorial ghi đơn giản, nhưng mình có thể mở rộng nó ra, như làm 1 cái máy sản xuất bánh bao có nhiều công đoạn cũng được, mấy công đoạn không nhất thiết tuần tự, while, if, hay phân ra cả đống method con được cả.
class MaySanXuatBanhBao {
BanhBao vanHanh(Bot bot, Men men) {
lenMen(men); tron(...); taoHinh(...); return hap(...);
}
abstract void lenMen(Men men) { ... }
abstract void tron(...) { ... }
abstract void taoHinh(...) { ... }
abstract BanhBao hap(...) { ... }
}
Bot là interface, rồi implements nhiều bột khác nhau
interface Bot { ... }
class BotGao implements Bot { ... }
class BotKhoai implements Bot { ... }
class BotGiat implements Bot { ... }
Men cũng là interface, cũng có nhiều class implement luôn
interface Men { ... }
class MenXin implements Men { ... }
class MenDom implements Men { ... }
class MenGiam implements Men { ... }
Sản phẩm tạo nhiều loại bánh bao, ứng với mỗi cách sản xuất bánh bao
interface BanhBao { ... }
class BanhBaoTrungMuoi implements BanhBao { ... }
class MaySanXuatBanhBaoTrungMuoi implements MaySanXuatBanhBao { ... }
class BanhBaoTrungCut implements BanhBao { ... }
class MaySanXuatBanhBaoTrungCut implements MaySanXuatBanhBao { ... }
class BanhBaoKhongNhan implements BanhBao { ... }
class MaySanXuatBanhBaoKhongNhan implements MaySanXuatBanhBao { ... }
Cuối cùng chạy thôi
BanhBao trungMuoi = (new MaySanXuatBanhBaoTrungMuoi()).vanHanh(new BotGao(), new MenXin());
BanhBao trungCut = (new MaySanXuatBanhBaoTrungCut()).vanHanh(new BotKhoai(), new MenXin());
BanhBao khongNhan = (new MaySanXuatBanhBaoKhongNhan()).vanHanh(new BotGiat(), new MenDom());
Tính ra bài này cũng có thể xem là bài tập OOP được à. 