设计模式开始1--不明觉厉

最近的一段时间在复习设计模式~分享给大家

设计模式是思考然后实现的过程,所谓思考就是定义各种各样的接口,抽象类,所谓实现,就是各种实现接口或者继承抽象类的实现类。

抛开接口和抽象类resovled的时候区别,接口体现的是顺序的思考顺序,抽象类体现的是顺序+共享的思考方式,举例来说明的话,汽车的生产需要组装,喷漆等过程 没有共享的过程所以需要接口进行实现,而对于三中电脑,每一种电脑都有不同的硬盘,光盘,但是假设他们的主板是一致的,那么便采用抽象类进行实现,因为抽象类允许方法的实现,所以在抽象类中可以对主板这个共享的相同的方法进行实现,这样子类便不用实现了。

案例需求:

计算圆,长方形的面积,要求自适应可以通过输入半径或者长,宽,输出对应的面积

1.Interface Shape

public interface Shape {

    public double calculateArea();

    public boolean input();

}
View Code

2.Rect implements Shape

public class Rect implements Shape {

    private float width;

    private float height;

    @Override

    public double calculateArea() {

        return width * height;

    }

    @Override

    public boolean input() {

        System.out.println("请分别输入,长,宽");

        Scanner s = new Scanner(System.in);

        width = s.nextFloat();

        height = s.nextFloat();

        return true;

    }

}
View Code

2.Circle implements Shape 

public class Circle implements Shape {

    private float r;

    @Override

    public double calculateArea() {

        return Math.PI * (double)(r*r);

    }

    @Override

    public boolean input() {

        System.out.println("请输出半径");

        Scanner s = new Scanner(System.in);

        r = s.nextFloat();

        return true;

    }

}
View Code

3.ShapeProc uses Shape

public class ShapeProc {

    private Shape shape;

    public ShapeProc(Shape shape)

    {

        this.shape = shape;

    }

    public double process()

    {

        shape.input();

        return shape.calculateArea();

    }

}
View Code

4.Test test the simple design pattern

public class Test {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Shape circle = new Circle();

        ShapeProc sp = new ShapeProc(circle);

        System.out.println(sp.process());

        sp = new ShapeProc(new Rect());

        System.out.println(sp.process());

    }

}
View Code

 4.当然也可以通过使用java的反射机制改写Test的方法,使其扩展性更好一些

public class Test {

    public static void main(String[] args) throws Exception {

        // TODO Auto-generated method stub

        Shape circle = (Shape)Class.forName(args[0]).getConstructor().newInstance();

        ShapeProc sp = new ShapeProc(circle);

        System.out.println(sp.process());

    }

}
View Code

 

你可能感兴趣的:(设计模式)