diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbe678da37f1fd4a1a2c6cebe3bb54ac27b3a281
--- /dev/null
+++ b/src/main/java/shape/AbstractShape.java
@@ -0,0 +1,32 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+import java.util.List;
+
+public class AbstractShape implements Shape {
+    List<Point2D> points;
+
+    public AbstractShape(List<Point2D> points) {
+        this.points = points;
+    }
+    public List<Point2D> addPoints(Point2D points){
+        this.points.add(points);
+        return this.points;
+    }
+    @Override
+    public int pointsCount() {
+        return 0;
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return null;
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f834b3ed92093b0d393efadd6aeb752b1502519
--- /dev/null
+++ b/src/main/java/shape/BorderDecorator.java
@@ -0,0 +1,16 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+public class BorderDecorator extends Decorator {
+
+    double radius;
+
+    public BorderDecorator(Shape decoratedShape ,double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+        public void drawDecoration(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..407dd31c4a44fcf759c11472dd3263889158d00a
--- /dev/null
+++ b/src/main/java/shape/CenterDecorator.java
@@ -0,0 +1,14 @@
+package shape;
+
+import javafx.scene.canvas.GraphicsContext;
+
+public class CenterDecorator extends Decorator{
+    double radius;
+    public CenterDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+        public void drawDecoration(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..ead5f5c0beb86eb49d9db70c85733899147c1088
--- /dev/null
+++ b/src/main/java/shape/Decorator.java
@@ -0,0 +1,28 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+public class Decorator implements Shape {
+    private Shape shape;
+    public Decorator(Shape decoratedShape) {
+        this.shape = decoratedShape;
+    }
+    @Override
+    public int pointsCount() {
+        return 0;
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return null;
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+
+    }
+    public void drawDecoration(GraphicsContext context) {
+
+    }
+}
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
new file mode 100644
index 0000000000000000000000000000000000000000..d502ce35d91562567a997c6003c8ceefeefcb05d
--- /dev/null
+++ b/src/main/java/shape/Polygon.java
@@ -0,0 +1,29 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class Polygon implements Shape {
+
+    Color color;
+
+    public Polygon(Color color, Point2D... points) {
+        this.color = color;
+    }
+
+    @Override
+    public int pointsCount() {
+        return 0;
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return null;
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+
+    }
+}