আমি আমার মামলা জন্য কৌশল বা কমান্ড প্যাটার্ন ব্যবহার করবেন?

আমি দুটি অ্যালগরিদম আছে যে আমি বাস্তবায়ন করছি:

  • AlgorithmA which works with Vector values and
  • AlgorithmB which works with Matrix values

অ্যালগরিদমগুলির সাধারণ কী রয়েছে:

  • উভয়ই "সমষ্টি" অ্যালগরিদমগুলি একই সাথে সরবরাহ করা হয় ইনপুট ক্রম অ্যালগরিদম অ্যাকাউন্টে কি পরিমাণে আলাদা থাকে একটি নির্দিষ্ট মান জন্য বা না এগুলি গণনাতেও পরিবর্তিত হয় অনুক্রমের মূল্য প্রতি সঞ্চালিত হবে।
  • উভয় অ্যালগরিদম একই বস্তুর (যেমন, ' অ্যান্টেনা </কোড>' যা সংক্রমণ বা প্রাপ্তির জন্য একটি অ্যালগরিদম ব্যবহার করে) দ্বারা উল্লিখিত হয়।
  • উভয় ক্ষেত্রেই, আমি ভেক্টর বা ম্যাট্রিক্স ফলাফলের সিরিয়ালাইজ করতে সক্ষম হব। এর পাশাপাশি, আমি পূর্বে বর্ণচিহ্ন থেকে গণনা করা (deserialized) ভেক্টর/ম্যাট্রিক্স মানের কোন অ্যালগরিদম আরম্ভ করতে সক্ষম হব।

আমি প্রথমে কৌশলগত প্যাটার্ন ব্যবহার করে উপরে প্রয়োগ করার চেষ্টা করেছিলাম, কিন্তু শীঘ্রই বুঝতে পেরেছি যে বিভিন্ন ধরনের বিভিন্ন ধরনের মূল্যবোধের কারণে কৌশলগত প্যাটার্নটি সেরা হতে পারে না। এবং আরও জটিল বিষয়গুলি, আমার ' অ্যান্টেনা </কোড>' বস্তুটি কোনও এলগরিদমকে কোনও নির্দেশে ব্যবহার করতে পারে:

class Antenna
{
    private AlgorithmParams _algorithm;
}

class AlgorithmParams
{
     private IAlgorithm _transmit;
     private IAlgorithm _receive;
}   

যা আমি মনে করি যে এটি "ট্রান্সমিট" এবং "প্রাপ্ত" এর ধারণাটি বহুবার (কারণ অ্যালগোরিদমএ , যা আইএলগরিদম প্রয়োগ করে) এর নিজস্ব কোড 'অ্যালগোরিদম্যাট্রান্সমিট </কোড>' এবং '<' কোড> অ্যালগরিদমার্কেসিভ </কোড> 'ঠিক একই এলগরিদমের মধ্যে দিক নির্দেশনার উপর ভিত্তি করে)।

আমি অ্যালগরিদম লজিক এবং সিরিয়ালজেড ডেটাতে ক্লিনার বিভাজক থাকতে চাই।

আমি এই আপনার মতামত শুনতে খুশি হবে। ধন্যবাদ

0

1 উত্তর

আমার জন্য কৌশল প্যাটার্ন অন্য কৌশলগুলি একটি শ্রেণীতে ব্যবহার করা যেতে পারে এবং রান-টাইমে বিনিময় করতে অনুমতি দেওয়ার জন্য বস্তু রচনা ব্যবহার করে কেবল আর কিছুই নয়। আপনার ক্ষেত্রে, আপনি কৌশলগত প্যাটার্ন ব্যবহার করতে পারেন, ইনপুট মানের উপর ভিত্তি করে, যদি আপনি অ্যান্টেনা শ্রেণী রান-এ তার আচরণ (অ্যালগরিদম) পরিবর্তন করতে চান। যদি এই ক্ষেত্রে হয়, অ্যান্টেনা ক্লাসে, আপনি একটি এলগরিদম ইন্টারফেসে একটি দৃষ্টান্ত পরিবর্তনশীল ইঙ্গিত আছে, যা 4 ক্লাস দ্বারা প্রাপ্ত করা হয়: অ্যালগোয়ট্রান্সমিট, অ্যালগো বিট্রান্সমিট, অ্যালগোভারসাইভ, এবং আলগোব্রিয়েসেভ। এই 4 ক্লাসের প্রতিটি বাস্তব অ্যালগরিদম সংজ্ঞায়িত হবে। তারপর, আপনি একটি ক্লায়েন্ট ক্লাসের প্রয়োজন যা ইনপুট মান টাইপগুলি পরীক্ষা করে, এবং উপযুক্ত আলগোরিদিম ব্যবহার করার জন্য অ্যান্টেনা সেট করে।

যদিও আমি দেখতে পাইনা কিভাবে কমান্ড প্যাটার্ন প্রয়োগ করা যায়, আপনার সমস্যাটি টেম্পলেট মেথড প্যাটার্নের জন্যও ভালো হতে পারে এবং আপনি এটি কৌশলটির সাথে সম্পৃক্তকরণে এটি ব্যবহার করতে পারেন। আপনি কি করতে পারেন একটি বিট বর্গ আছে, এর যাক AbstractAlgorithm, যার একটি "টেমপ্লেট পদ্ধতি" আছে আলগোরিদিম সাধারণ ফাংশন কল দ্বারা সাধারণ প্রবাহ ব্যাখ্যা। এই ফাংশনগুলি উপ-ঘোরাগুলিতে ওভাররিড করা হবে, যেমন আলগোরিদমএ, আলগোরিদিম বি।

টেমপ্লেট পদ্ধতিতে "হুক" ব্যবহার করে অ্যান্টেনের দিকটি সমাধান করা যেতে পারে। হুক্স মূলত ফাংশন যা সাব-ক্ল্যাসেসগুলিতে ওভাররাইড করার জন্য ঐচ্ছিক।

এখানে একটি সহজ নমুনা কোড। অ্যান্টেনা অবজেক্ট কনজিওশন এবং স্ট্র্যাটেজি ব্যবহার করে, বিমূর্ত অ্যালগরিদমকে নির্দেশ করে একটি পরিবর্তনশীল, যা 2 অ্যালগরিদম দ্বারা প্রাপ্ত হয়। এই ভাবে, অ্যালগরিদমগুলির সীমারেখা এক জায়গায় নির্দিষ্ট করা যেতে পারে, এবং প্রতিটি কংক্রিট ধাপ subclasses মধ্যে সংজ্ঞায়িত করা হয়। আশা করি এটি সাহায্য করবে এবং আমি আশা করি আপনার সমস্যাটি সঠিকভাবে বুঝতে পেরেছি।

class Antenna {
    private AbstractAlgorithm algo;
    void SetAlgo(AbstractAlgorithm newAlgo) {
        algo = newAlgo;
    }
}

class AbstractAlgorithm {

    //this is the template method
    void runAlgo() {   
          step1();        //step1 and step2 are two common steps for both algorithms
          step2();
          if (isMatrixValue())
             step3();            //a hook, only AlgoB will override it.
          if (isTransmitting())
             step4();            //a hook, use for transmit
          else if (isReceiving())
             step5();            //a hook, use for receive

    }

    abstract void step1();
    abstract void step2();
    boolean isMatrixValue() {
         return false;         //default value, to not run step3
    }

}

class AlgorithmA {

    void step1() {
         //some implementation
    }
    void step2() {
         //some implementation
    }

    //use the default false value for isMatrixValue(), not to run step3


}


class AlgorithmB {

    void step1() {
         //some implementation
    }
    void step2() {
         //some implementation
    }
    void step3() {
         //some implementation
    }
    boolean isMatrixValue() {
         return true;         //return true and override step3
    }

}
0
যোগ
ধন্যবাদ আপনার উত্তরের জন্য অনেক ! যদি আমি ভুল না করি, তাহলে কি আপনার পরামর্শটি এন্টেনাটি উভয় ট্রান্সমিটারের জন্য একই অ্যালগরিদম প্রকার বাস্তবায়ন করতে বাধা দেবে না? আমার মডেল ইন, একটি অ্যান্টেনা প্রেরণ জন্য অ্যালগোরিদমএ থাকতে পারে, কিন্তু প্রাপ্তির জন্য এলগরিদমবি। ধন্যবাদ।
যোগ লেখক alhazen, উৎস
হাই আলহেজেন, ট্রান্সমিটার এবং পাওয়ার মধ্যে আপনি কিভাবে নির্বাচন করবেন? এবং কিভাবে তারা অ্যালগরিদম প্রভাবিত? আলগোআ বা আলগোব এর মধ্যে কোন পার্থক্য আছে কি না যখন এটি নির্দেশ করে?
যোগ লেখক Son Do Lenh, উৎস