Návrhový vzor Fluid Logic: Porovnání verzí

Smazaný obsah Přidaný obsah
ShadowRobot (diskuse | příspěvky)
m WPCleaner v1.41b - Fixed using WP:WCW (Odkaz shodný se svým popisem)
m <source> -> <syntaxhighlight> (phab:T237267)
Řádek 18:
Třída ''Calculator'', definovaná níže v kódu, je naprogramována tak, aby zpracovala výraz předaný jako parametr metodě ''calculate''.
 
<sourcesyntaxhighlight lang="java">
import javax.script.Bindings;
import javax.script.ScriptContext;
Řádek 57:
}
}
</syntaxhighlight>
</source>
 
Nyní si ukážeme, jak třídu ''Calculator'' využít a spustit kód z JavaScript v Javě pomocí ''Java Scripting API''. Můžete si všimnout, že při generování výrazu ''2 * 2 * FIVE'', jsme využili konstantu, kterou jsme si ve třídě ''Calculator'' nadefinovali a vložili do skriptového kontextu.
 
<sourcesyntaxhighlight lang="java">
public class App {
public static void main( String[] args ){
Řádek 69:
}
}
</syntaxhighlight>
</source>
 
Jak jsme již napsali dříve, návrhový vzor Fluid Logic je vhodný zejména pro jeho možnost jednoduchého přemístění dynamického kódu nebo jeho změny. Kód může být nahrán z mnoha zdrojů. V další části si ukážeme, jak může být kód dynamicky nahrán ze souboru, jsou však možné i jiné varianty, například nahrání kódu uloženého v databázi nebo ze vzdáleného souboru umístěného na síti.
Řádek 76:
Nyní ukážu, jak je možné nahrát dynamicky kód ze souboru a nechat ho zpracovat pomocí ''Java Scripting API''. Znovu se jedná o kód napsaný v JavaScriptu.
 
<sourcesyntaxhighlight lang="java">
// Vytvoříme engine manager
ScriptEngineManager engineManager = new ScriptEngineManager();
Řádek 85:
// Pomocí JavaScript enginu zpracujeme soubor s kódem
scriptEngine.eval(new FileReader("soubor.js"));
</syntaxhighlight>
</source>
 
===Zavolání konkrétní funkce===
Další příklad nám ukazuje, jak je možné vytvořit metodu a poté jí opakovaně volat pomocí rozhraní ''Invocable''.
<sourcesyntaxhighlight lang="java">
String script = "function hello(name) { print('Hello, ' + name); }";
scriptEngine.eval(script);
Řádek 100:
// Zavolání funkce hello s parametrem name
inv.invokeFunction("hello", "Java Scripting API");
</syntaxhighlight>
</source>
 
===Volání metod na objektech===
Pokud námi zvolený dynamický jazyk podporuje objektově orientované programování, tak je možné využití objektů i pomocí ''Java Scripting API''.
<sourcesyntaxhighlight lang="java">
// Pomocí JavaScriptu vytvoříme objekt s metodou hello
String script = "var obj = new Object();";
Řádek 117:
// Zavoláme metodu "hello" na objektu "obj" s daným parametrem
inv.invokeMethod(obj, "hello", "Java Scripting API" );
</syntaxhighlight>
</source>
 
===Implementace rozhraní===
Další příklad nám ukáže jak můžeme vzít objekt ze skriptovacího jazyka a použít ho jako implementaci javovského rozhraní.
 
<sourcesyntaxhighlight lang="java">
String script = "var obj = new Object();";
script += "obj.run = function() { println('run method called'); }";
Řádek 136:
Thread th = new Thread(r);
th.start();
</syntaxhighlight>
</source>
 
===Využití java tříd ve skriptovacím jazyce===
Poslední příklad ukazuje na využití javovských tříd ve skritovacím jazyce. Na příkladu je zdrojový kód z ''JavaScriptu'', který následně lze snadno nahrát jako souboru a spustit ho. Výsledkem bude vytvoření okna a vypsání „hello“ na standardní výstup.
 
<sourcesyntaxhighlight lang="javascript">
importPackage(java.awt);
importClass(java.awt.Frame);
Řádek 147:
frame.setVisible(true);
print(frame.title);
</syntaxhighlight>
</source>
 
==Další podporované dynamické jazyky==