diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 66229213367b0b0a3d7068fb2c7013558ce98ced..41f2f906b9835158893a62198be0f7864908f415 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -8,7 +8,7 @@
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="11" />
+        <option name="gradleJvm" value="jbr-11" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6624aa5239bd87293312b297feabe77375fc86df..ca6d6650b257d5a33947c2f35120003e5eefff2f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,9 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="FrameworkDetectionExcludesConfiguration">
     <file type="web" url="file://$PROJECT_DIR$" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="corretto-16" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="jbr-11" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>
\ No newline at end of file
diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
new file mode 100644
index 0000000000000000000000000000000000000000..8cd7b1d187193eb5193a24441b1bd57ab5734b41
--- /dev/null
+++ b/src/main/java/shape/AbstractShape.java
@@ -0,0 +1,25 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+import java.util.List;
+
+public abstract class AbstractShape implements Shape {
+    private List<Point2D> points;
+    @Override
+    public int pointsCount() {
+        return points.size();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return points.get(index);
+    }
+
+    @Override
+    abstract public void draw(GraphicsContext context) ;
+    public void addPoints(List<Point2D> points) {
+         points.addAll(points);
+    }
+}
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..27a54e21d5a3e99fb83ffe9cfd89f993e52dc1d7
--- /dev/null
+++ b/src/main/java/shape/BorderDecorator.java
@@ -0,0 +1,23 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BorderDecorator extends Decorator{
+
+    private double radius;
+
+    public BorderDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+
+    @Override
+    protected void drawDecoration(GraphicsContext graphicsContext) {
+        List<Point2D> list = new ArrayList<>();
+    }
+}
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
new file mode 100644
index 0000000000000000000000000000000000000000..260248579ba05e1d0411718133f17546ed83d710
--- /dev/null
+++ b/src/main/java/shape/Decorator.java
@@ -0,0 +1,29 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+abstract public class  Decorator implements Shape {
+
+    protected Shape decoratedShape;
+
+    public Decorator(Shape decoratedShape){
+        this.decoratedShape = decoratedShape;
+    }
+    @Override
+    public int pointsCount() {
+            return decoratedShape.pointsCount();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return decoratedShape.point(index);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        decoratedShape.draw(context);
+    }
+
+    protected  abstract void drawDecoration(GraphicsContext graphicsContext);
+}
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
new file mode 100644
index 0000000000000000000000000000000000000000..e142846338c4934a66ddb2d2ca9c6cd742788d08
--- /dev/null
+++ b/src/main/java/shape/Polygon.java
@@ -0,0 +1,28 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Polygon extends AbstractShape {
+    Color color;
+
+    public Polygon(Color color , List<Point2D> points){
+        this.color = color;
+        addPoints(points);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        double[] coordinateX = new double[pointsCount()];
+        double[] coordinateY = new double[pointsCount()];
+        for(int index = 0 ; index<pointsCount() ; index++){
+            coordinateX[index]=point(index).getX();
+            coordinateY[index]=point(index).getY();
+        }
+        context.strokePolygon(coordinateX,coordinateY,pointsCount());
+    }
+}
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index b0e90627b6345f22ac31ab8bf5fb40f81e4d4f66..4192ff4bad6c5d72327863a9ffc6927b03fe22d2 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -4,24 +4,22 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
-public class Rectangle implements Shape{
+import java.util.ArrayList;
+import java.util.List;
+
+public class Rectangle extends AbstractShape implements Shape{
     Color color;
     Rectangle(Color color, Point2D point0, Point2D point1){
         this.color = color;
-    }
-
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
+        List<Point2D> list = new ArrayList<>();
+        list.add(point0);
+        list.add(point1);
+        addPoints(list);
     }
 
     @Override
     public void draw(GraphicsContext context) {
-
+          context.strokeRect(point(0).getX(),point(0).getY(),point(1).getX()-point(0).getX(),
+                  point(1).getY()-point(0).getY());
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java
index 91c7d2977ecd7352ceb7ffbe45f9c541bfd8d45f..aae70ed5e542047b60b0f7147f021811017bdbc7 100644
--- a/src/main/java/shape/ShapeContainer.java
+++ b/src/main/java/shape/ShapeContainer.java
@@ -9,7 +9,9 @@ public class ShapeContainer{
 
     private List<Shape> shapes = new ArrayList<>();
 
-    public void addShape(Shape shape){}
+    public void addShape(Shape shape){
+        shapes.add(shape);
+    }
 
     public void  draw(GraphicsContext context){
         for(Shape shape : shapes)