Politika (programování)

Politika, návrh politik, anglicky policy classes je návrhové paradigma pocházející z jazyku C++. Použití v dalších OOP jazycích se zatím nerozšířilo.

Jednoduchý příklad editovat

Níže je uvedený příklad programu Hello world, jak by ho šlo rozložit pomocí politik.

template < typename output_policy, typename language_policy >
class HelloWorld : public output_policy, public language_policy
{
    using output_policy::Print;
    using language_policy::Message;

public:
    //behaviour method
    void Run()
    {
        //two policy methods
        Print( Message() );
    }
};

#include <iostream>

class HelloWorld_OutputPolicy_WriteToCout
{
 protected:
    template< typename message_type >
    void Print( message_type message )
    {
        std::cout << message << std::endl;
    }
};

#include <string>

class HelloWorld_LanguagePolicy_English
{
 protected:
    std::string Message()
    {
        return "Hello, World!";
    }
};

class HelloWorld_LanguagePolicy_German
{
 protected:
    std::string Message()
    {
        return "Hallo Welt!";
    }
};

int main()
{
    /* example 1 */
    typedef HelloWorld<HelloWorld_OutputPolicy_WriteToCout, HelloWorld_LanguagePolicy_English> my_hello_world_type;

    my_hello_world_type hello_world;
    hello_world.Run(); // Prints "Hello, World!"

   /* example 2 
    * does the same but uses another policy, the language has changed
    */
    typedef HelloWorld< HelloWorld_OutputPolicy_WriteToCout, HelloWorld_LanguagePolicy_German > my_other_hello_world_type;

    my_other_hello_world_type hello_world2;
    hello_world2.Run(); // Prints "Hallo Welt!"
}