enum ShapeType {
    CIRCLE, SQUARE, TRIANGLE
}


abstract class Shape {

    private ShapeType sType = null;

    public Shape(ShapeType sType) {
        this.sType = sType;
    }

    // generuje kształt
    protected abstract void generate();
}
---

class Circle extends Shape {
    Circle() {
        super(ShapeType.CIRCLE);
        generate();
    }
    @Override
    protected void generate() {
        System.out.println("Generowanie koła");
    }
}

class Square extends Shape {
    Square() {
        super(ShapeType.SQUARE);
        generate();
    }
    @Override
    protected void generate() {
        System.out.println("Generowanie kwadratu");
    }
}
class Triangle extends Shape {
    Triangle() {
        super(ShapeType.TRIANGLE);
        generate();
    }
    @Override
    protected void generate() {
        System.out.println("Generowanie trójkąta");
    }
}
---

class ShapeFactory {
    public static Shape generateShape(ShapeType sType) {
        Shape shape = null;
        switch (sType) {
            case CIRCLE:
                shape = new Circle();
                break;
            case SQUARE:
                shape = new Square();
                break;
            case TRIANGLE:
                shape = new Triangle();
                break;
            default:
                // zgłoszenie wyjątku
                break;
            }
        return shape;
    }
}
---

public class TestFactoryPattern {
    public static void main(String[] args) {
        ShapeFactory.generateShape(ShapeType.CIRCLE);
        ShapeFactory.generateShape(ShapeType.SQUARE);
        ShapeFactory.generateShape(ShapeType.TRIANGLE);
    }
}
---

package MailTool;
public class MailTool {
    public MailTool () {
    }
    public int retrieveMail() {
        System.out.println ("Masz wiadomość!");
      return 0;
    }
}
---

package MailTool;
interface MailInterface {
    int getMail();
}
---

package MailTool;
class MyMailTool implements MailInterface {
    private MailTool yourMailTool;
    public MyMailTool () {
        yourMailTool= new MailTool();
        setYourMailTool(yourMailTool);
    }
    public int getMail() {
        return getYourMailTool().retrieveMail();
    }
    public MailTool getYourMailTool() {
        return yourMailTool ;
    }
    public void setYourMailTool(MailTool newYourMailTool) {
        yourMailTool = newYourMailTool;
    }
}
---

package MailTool;
public class Adapter
{
    public static void main(String[] args)
    {
        MyMailTool myMailTool = new MyMailTool();

        myMailTool.getMail();
    }
}
---

package Iterator;

import java.util.*;
public class Iterator {
    public static void main(String args[]) {

        // Tworzenie egzemplarza klasy ArrayList.
        ArrayList<String> names = new ArrayList();

        // Wstawia dane do obiektu ArrayList.
        names.add(new String("Joe"));
        names.add(new String("Mary"));
        names.add(new String("Bob"));
        names.add(new String("Sue"));

            // Iteracja przez kolekcję imion.
        System.out.println("Imiona:");
        iterate(names );
    }

    private static void iterate(ArrayList<String> arl) {
        for(String listItem : arl) {
                System.out.println(listItem.toString());
            }
    }
}
---

