Graphic Rendering System 1.0
A Java-based graphic rendering system implementing various design patterns
Loading...
Searching...
No Matches
Main.java
Go to the documentation of this file.
1package com.example.graphics;
2
3import com.example.graphics.adapter.MockThirdPartyRenderer;
4import com.example.graphics.adapter.ThirdPartyRendererAdapter;
5import com.example.graphics.factory.ConsoleRendererFactory;
6import com.example.graphics.factory.RendererFactory;
7import com.example.graphics.factory.ShapeFactory;
8import com.example.graphics.factory.SvgRendererFactory;
9import com.example.graphics.model.Circle;
10import com.example.graphics.model.Line;
11import com.example.graphics.model.Rectangle;
12import com.example.graphics.model.Shape;
13import com.example.graphics.observer.ConsoleLogger;
14import com.example.graphics.proxy.RemoteRendererProxy;
15import com.example.graphics.render.Renderer;
16import com.example.graphics.singleton.RenderingConfig;
17import com.example.graphics.visitor.JsonExportVisitor;
18import com.example.graphics.visitor.XmlExportVisitor;
19
23public class Main {
24 public static void main(String[] args) {
25 System.out.println("Graphics Rendering System Demonstration");
26 System.out.println("======================================");
27
28 // Get the singleton configuration
30 System.out.println("Using configuration: " + config.getDefaultWidth() + "x" +
31 config.getDefaultHeight() + ", renderer: " +
32 config.getDefaultRendererType());
33
34 // Create factories (Abstract Factory pattern)
35 RendererFactory svgFactory = new SvgRendererFactory();
36 RendererFactory consoleFactory = new ConsoleRendererFactory();
37
38 // Create a renderer using the factory
39 Renderer svgRenderer = svgFactory.createRenderer(config.getDefaultWidth(),
40 config.getDefaultHeight());
41
42 // Create a drawing with the SVG renderer
43 Drawing drawing = new Drawing(svgRenderer);
44
45 // Add a console logger observer (Observer pattern)
46 drawing.addObserver(new ConsoleLogger());
47
48 // Create shapes using the factory (Factory pattern)
49 ShapeFactory shapeFactory = new ShapeFactory();
50
51 System.out.println("\nCreating and adding shapes...");
52 Shape circle = shapeFactory.createCircle(100, 100, 50);
53 Shape rectangle = shapeFactory.createRectangle(200, 200, 150, 100);
54 Shape line = shapeFactory.createLine(50, 50, 350, 350);
55
56 // Add shapes using commands (Command pattern)
57 drawing.addShape(circle);
58 drawing.addShape(rectangle);
59 drawing.addShape(line);
60
61 // Render the drawing
62 System.out.println("\nRendering with SVG renderer:");
63 drawing.render();
64
65 // Switch to console renderer (Bridge pattern)
66 System.out.println("\nSwitching to console renderer...");
67 drawing.setRenderer(consoleFactory.createRenderer(40, 20));
68 drawing.render();
69
70 // Use the adapter (Adapter pattern)
71 System.out.println("\nSwitching to third-party renderer via adapter...");
72 MockThirdPartyRenderer thirdPartyRenderer = new MockThirdPartyRenderer();
73 Renderer adapterRenderer = new ThirdPartyRendererAdapter(thirdPartyRenderer);
74 drawing.setRenderer(adapterRenderer);
75 drawing.render();
76
77 // Use the proxy (Proxy pattern)
78 System.out.println("\nSwitching to remote renderer via proxy...");
79 RemoteRendererProxy remoteProxy = new RemoteRendererProxy();
80 if (remoteProxy.connect()) {
81 drawing.setRenderer(remoteProxy);
82 drawing.render();
83 remoteProxy.disconnect();
84 }
85
86 // Demonstrate command operations
87 System.out.println("\nMoving the circle...");
88 drawing.moveShape(circle, 150, 150);
89
90 // Switch back to SVG renderer
91 drawing.setRenderer(svgRenderer);
92 drawing.render();
93
94 System.out.println("\nUndoing the move...");
95 drawing.undo();
96 drawing.render();
97
98 System.out.println("\nRedoing the move...");
99 drawing.redo();
100 drawing.render();
101
102 // Use visitors to export (Visitor pattern)
103 System.out.println("\nExporting to JSON:");
104 JsonExportVisitor jsonVisitor = new JsonExportVisitor();
105 drawing.acceptVisitor(jsonVisitor);
106 System.out.println(jsonVisitor.getJsonOutput());
107
108 System.out.println("\nExporting to XML:");
109 XmlExportVisitor xmlVisitor = new XmlExportVisitor();
110 drawing.acceptVisitor(xmlVisitor);
111 System.out.println(xmlVisitor.getXmlOutput());
112
113 System.out.println("\nDemonstration complete.");
114 }
115}
void setRenderer(Renderer renderer)
Definition Drawing.java:109
void moveShape(Shape shape, int x, int y)
Definition Drawing.java:67
void addShape(Shape shape)
Definition Drawing.java:45
void acceptVisitor(ShapeVisitor visitor)
Definition Drawing.java:154
void addObserver(ShapeObserver observer)
Definition Drawing.java:93
static void main(String[] args)
Definition Main.java:24
Shape createRectangle(int x, int y, int width, int height)
Shape createCircle(int x, int y, int radius)
Shape createLine(int x1, int y1, int x2, int y2)
static synchronized RenderingConfig getInstance()
Renderer createRenderer(int width, int height)