কৌশল নিদর্শন প্রসঙ্গে শ্রেণি


10

আমি কৌশল প্যাটার্নটি বোঝার চেষ্টা করছি এবং নিজেকে জিজ্ঞাসা করছি: প্রসঙ্গ শ্রেণিটি অবশ্যই থাকা উচিত বা আমি প্যাটার্নের উদ্দেশ্য নিয়ে আপস না করে এটিকে ছেড়ে দিতে পারি?

আমি এই ধারণার মধ্যে ছিলাম যে বিভিন্ন ধরণের ফাইল পড়ার জন্য আমার এক ধরণের সুইচ দরকার ছিল তবে কেবল কিছু হ্যাক করতে এবং পরে রিফ্যাক্টরিংয়ের সাথে ডিল করতে চাইনি (যদিও এটি অবশ্যই সর্বদা ঘটে থাকে যে কোডটি পুনঃসংশ্লিষ্ট করা যেতে পারে তবে ধারণাটি ছিল: চেষ্টা করুন আগে থেকেই ডিজাইনে যথাসম্ভব স্মার্ট হতে ...):

এখানে চিত্র বর্ণনা লিখুন

উইকিমিডিয়া থেকে তোলা ছবি

ক্লায়েন্ট সরাসরি স্ট্র্যাটেজি ইন্টারফেসে ডেলিগেট করতে পারেন বা প্রসঙ্গ বর্গ সম্পর্কে আমি বুঝতে কেবল মিস করেছি এমন কিছু কি আছে?

interface Reader {
    // read information from file and fill data list field of Client
    readFile();
}
class ExcelReader implements Reader{ /* */ }
class PdfReader implements Reader{ /* */}

class Client{
    // strategic choice
    Reader r;

    // data list field
    List<Data> data;

    // Client Constructor
    public Client(){
        if(<file ends in .xls>)
            r = new ExcelReader();
        else
            r = new PdfReader();
        r.readFile();
    }
}

সুতরাং উপরে বর্ণিত প্রসঙ্গ শ্রেণি অনুপস্থিত। কোডটি কী কৌশল রীতি অনুসরণ করে?


1
অন্য একটি আকর্ষণীয় / গুরুত্বপূর্ণ বিষয় হিসাবে আমি আপনার নজরে আনতে চাই যে কার্যকরী ভাষাগুলিতে টাইপ শ্রেণীর ধারণাটি en.wikedia.org/wiki/Kind_(type_theory) সহ ধরণের কৌশল বিন্যাস "সহজভাবে" ) উভয়ই অ্যাড-হক পলিমারফিজমের জন্য একটি বাস্তবায়ন ব্যবস্থা।
AndreasSchainert

এটি (খুব কম বা কম) জাভা 8 প্রকল্প লাম্বদা সম্পর্কিত? উইকিপিডিয়া নিবন্ধটি কেবল একবারে বুঝতে আমার পক্ষে খুব ঘন তবে এটি জাভা (বা সাধারণভাবে প্রোগ্রামিং) এর আসন্ন বৈশিষ্ট্যগুলি দক্ষতার সাথে ব্যবহার করার জন্য যদি তাত্ত্বিক পটভূমির অংশ হয় তবে আমি এতে আনন্দের সাথে আরও সময় বিনিয়োগ করব।
প্যানি

1
খুব দূরে তবে আমি তর্ক করব হ্যাঁ, টাইপ ক্লাসগুলির প্রয়োজন। একটি প্রোগ্রামিং ভাষা যা উচ্চতর ধরণের সমর্থন করে। এটি স্কেলা এবং হাস্কেলের ক্ষেত্রে হবে। আমার বক্তব্যটি এখানে ছিল যে (অ্যাডহক) পলিমারফিজমটি ভিন্নভাবে প্রয়োগ করা হয়েছে এবং আপনি যদি পিছনে ফিরে যান তবে আপনি সাধারণভাবে বহুবর্ষ সম্পর্কে কিছু অন্তর্দৃষ্টি শিখতে পারেন।
AndreasSchainert

উত্তর:


13

আপনার উদাহরণে, কোড কলিং readFileক্লায়েন্ট নির্মাতার অংশ। যে পদ্ধতি "প্রসঙ্গ" আপনি এ খুঁজছেন হয় । কৌশল প্যাটার্নটির আক্ষরিকভাবে একটি "প্রসঙ্গ শ্রেণি" প্রয়োজন হয় না এবং আপনার কোডের প্রথম সংস্করণে কৌশল অবজেক্ট (আপনার ক্ষেত্রে "পাঠক") কেবল স্থানীয় ভেরিয়েবলের মধ্যে থাকতে পারে। বিশেষত যখন কেবলমাত্র একটি "কৌশলগত পদ্ধতি" ("রিডফিল") কল করা উচিত।

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


5

নিশ্চয়ই. প্যাটার্নগুলি কেবল গাইডলাইন। সমস্যাটি এখনও হাতে পাওয়ার জন্য আপনাকে এগুলি ঠিকঠাক করে প্রয়োগ করতে হবে। ব্যক্তিগতভাবে, আমি কদাচিৎ রানটাইমে কৌশল সেট করার অনুমতি দিই; প্রায়শই এটি নির্মাণে নির্দিষ্ট করা হয় বা একটি কারখানায় কাটা হয়।

যদিও এটি যুক্তিযুক্তও হতে পারে যে setStrategyএটি ব্যক্তিগত এবং আমার ইনজেকশনটি কেবল প্রদর্শিত প্যাটার্নটি ব্যবহার করছে।


এর অর্থ কি চিত্রিত কনটেক্সট ক্লাসটি বিন্যাসের সাথে আপস না করে ছেড়ে দেওয়া যেতে পারে? অথবা অন্য ভাবে বললে, এটা ঠিক আছে যখন আমার ক্লায়েন্ট ক্লাস হয় হয় ফোটানো প্রসঙ্গ বর্গ?
প্যানি

6
@ পেণি - আমি প্রশ্নের উত্তর দিতে দ্বিধা বোধ করছি কারণ এটি নির্দেশ করে যে আপনি উত্তরটির বিন্দুটি হারিয়েছেন, এবং প্রকৃতপক্ষে পুরোপুরি নিদর্শনগুলি। কৌশল প্যাটার্ন আপনাকে একটি ইন্টারফেসের পিছনে বিভিন্ন কংক্রিট বাস্তবায়ন সরবরাহ করে আচরণে পরিবর্তিত হতে দেয়। এটি একটি ধারণা , একটি সূত্র নয়
টেলাস্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.