Skip to content

Latest commit

 

History

History
173 lines (137 loc) · 5.39 KB

template.md

File metadata and controls

173 lines (137 loc) · 5.39 KB

Template Pattern

Template Pattern ফাংশনের কাঠামো তৈরি করে এবং সাব -ক্লাসকে এই ফাংশনের কাঠামো পরিবর্তন না করে কাজ কেমন হবে বা কিভাবে কাজ করবে তা নির্ধারণ করার সুযোগ দেয় ।

The Template Method Pattern defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

The Dependency Inversion Principle আমাদের শেখায়, কংক্রিট ক্লাস বাদ দিয়ে যত বেশী সম্ভব Abstraction ব্যবহার করতে

The Hollywood Principle is a technique for building frameworks or components so that lower-level components can be hooked into the computation, but without creating dependencies between the lower-level components and the higher-level layers.

অনেক পড়া লেখা হইছে, এখন একটু ক্যাফেইন দরকার

আপনি আর আপনার বন্ধু ভার্সিটির লাল টঙ্গে গিয়ে মামাকে বললেন মামা একটা চা আর একটা কফি দেন(যদিও লাল টঙ্গে কফি পাওয়া যায় না)। মামা সাথে সাথে চা এবং কফি বানানো শুরু করলো...

কফি

    public class Coffee{
        void prepareRecipe(){
            boilWater();
            brewCoffeeGrinds();
            pourInCup();
            addSugarAndMilk();
        }

        public void boilWater(){
            System.out.println("Boiling Water...");
        }

        public void brewCoffeeGrinds(){
            System.out.println("Dripping coffee through filter...");
        }

        public void pourInCup(){
             System.out.println("Pouring into cup...");
        }

        public void addSugarAndMilk(){
             System.out.println("Adding Sugar and Milk...");
        }
    }

চা

    public class Tea{
        void prepareRecipe(){
            boilWater();
            steepTeaBag();
            pourInCup();
            addLemon();
        }

        public void boilWater(){
            System.out.println("Boiling Water...");
        }

        public void steepTeaBag(){
            System.out.println("Steeping the tea...");
        }

        public void pourInCup(){
             System.out.println("Pouring into cup...");
        }

        public void addLemon(){
             System.out.println("Adding lemon ...");
        }
    }

মামা, এতো কোড ডুপ্লিকেশন কেন ?

  • কফি brewing আর চা steeping এর মধ্যেতো তেমন কোন পার্থক্য নাই ।
  • কফিতে দুধ এবং চিনি দেওয়া আর চাতে লেবু দেওয়া তো একইরকম কাজ ।

চলেন ডুপ্লিকেশন কমাই

public abstract class CaffeineBeverage {
    final void prepareRecipe(){
        boilWater();
        brew();
        pourIncup();
        addCondiments();
    }

    abstract void brew();
    abstract void addCondiments();

    void boilWater(){
        System.out.println("Boiling water...");
    }

    void pourIncup(){
        System.out.println("Pouring into cup...");
    }
}

এখানে CaffeineBeverage কিন্তু আপনাকে brew এবং addCondiments মেথডকে আপনার ইচ্ছে মতো ডিফাইন করতে দিচ্ছে

# ক্লাস ডায়াগ্রাম

নতুন কফি

public class Coffee extends CaffeineBeverage{
    @Override
    void brew() {
        System.out.println("Dripping Coffee through filter...");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

নতুন চা

public class Tea extends CaffeineBeverage{
    @Override
    void brew() {
        System.out.println("Stepping the tea...");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding lemon...");
    }
}

Tea এবং Coffee ক্লাস কিন্তু সুপার ক্লাস CaffeineBeverage এর brew এবং addCondiments এর কাঠামো পরিবর্তন না করেই এর কাজ ডিফাইন করে দিয়েছে।

চলেন কোড রান করি

public class CaffeineHouse {
    public static void main(String[] args) {
        Tea tea = new Tea();
        System.out.println("---------making tea------------");
        tea.prepareRecipe();
        Coffee coffee = new Coffee();
        System.out.println("---------making coffee------------");
        coffee.prepareRecipe();
    }
}

আউটপুট

---------making tea------------
Boiling water...
Stepping the tea...
Pouring into cup...
Adding lemon...
---------making coffee------------
Boiling water...
Dripping Coffee through filter...
Pouring into cup...
Adding sugar and milk