Duplicate logic in multiple locations

Repeated "if-then" logic or multiple [[switch case]]s scattered though-out the [[code base]].

Bad:

public enum Shape
{
    Circle,
    Rectangle,
    Square,
    Hexagon
}

public class Visualizer
{
    public void Draw(Shape shape)
    {
        switch(shape)
        {
            case Shape.Circle:
                break;
            case Shape.Hexagon:
                break;
            case Shape.Rectangle:
                break;
            case Shape.Square:
                break;
        }
    }

    public decimal CalculateArea(Shape shape)
    {
        ... switch case
    }
}

Good:

abstract class Shape
{
    abstract void Draw();
    abstract decimal CalculateArea();
}

public class Rectangle : Shape
{
    public override void Draw()
    {
    }

    public override decimal CalculateArea()
    {
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
    }

    public override decimal CalculateArea()
    {
    }
}