, .
interface Screen {
<C> Background<C> render(Plane<C> plane);
}
, render() C.
, :
Screen s = ...;
Background<Red> b1 = s.render(new Plane<Red>());
Background<Blue> b2 = s.render(new Plane<Blue>());
, MonochromeScreen:
interface MonochromeScreen<C> extends Screen{
Background<C> render(Plane<C> plane);
}
: C , .
MonochromeScreen<Red> s = ...;
Background<Red> b1 = s.render(new Plane<Red>());
Background<Blue> b2 = s.render(new Plane<Blue>());
, Screen s = new MonochromeScreen<Red>(); , MonochromeScreen Screen.
, . , Color, . ?
interface Plane {
Color getColor();
}
interface Background {
Color getColor();
}
interface Screen {
Background render(Plane plane);
}
. :
class MonochromeScreen implements Screen {
private final Color color;
public Background render(Plane plane) {
if (!plane.getColor().equals(color))
throw new IllegalArgumentException( "I can't render this colour.");
return new Background() {...};
}
}
.
: ? , :
public void renderPrimaryPlanes(Screen s) {
s.render(new Plane(Color.RED));
s.render(new Plane(Color.GREEN));
s.render(new Plane(Color.BLUE));
}
...
Screen s = new MonochromeScreen(Color.RED);
renderPrimaryPlanes(s);
, . , renderPrimaryPlanes(). . ?
, , , , LSP , . , : , Screen, , , MonochromeScreen, .