我们从生活中去理解面向接口编程,以下举例四个案例来理解:


案例一(汽车案例):

/**
 * 汽车标准接口
 * @author Liudeli
 */
public interface ICar {

    /**
     * 打印出汽车的拍照颜色即可
     */
    public void car();

}
/**
 * 奥迪车对象
 * @author Liudeli
 */
public class Audi implements ICar {

    public void car() {
        // TODO Auto-generated method stub
        System.out.println("奥迪A3 红色...");
    }

}
/**
 * 奔驰车对象
 * @author Liudeli
 */
public class Benz implements ICar {

    public void car() {
        // TODO Auto-generated method stub
        System.out.println("奔驰A1 白色...");
    }

}
/**
 * 宝马车对象
 * @author Liudeli
 */
public class BMW implements ICar {

    public void car() {
        // TODO Auto-generated method stub
        System.out.println("宝马A6 黑色...");
    }

}
/**
 * 汽车专卖店
 * @author Liudeli
 */
public class CarMonopoly {

    /**
     * 打印汽车名和颜色
     * @param car 传入接口(可以达到父类的引用指向子类的对象)
     */
    public void print(ICar car) {
        car.car();
    }

}
/**
 * 测试程序
 * @author Liudeli
 */
public class Main {

    public static void main(String [] args) {
        // 获取汽车专卖店
        CarMonopoly carMonopoly = new CarMonopoly();

        carMonopoly.print(new Audi());

        carMonopoly.print(new Benz());

        carMonopoly.print(new BMW());
    }

}

运行结果:

java面向切面计算接口执行时间 java面向接口编程的例子_java


案例二(动物案例):

/**
 * 定义动物接口
 * @author Liudeli
 */
public interface IAnimal {

    /**
     * 定义动物叫的行为
     */
    public void call();

}
/**
 * 定义猫对象
 * @author Liudeli
 */
public class Cat implements IAnimal {

    public void call() {
        System.out.println("喵喵喵...");
    }

}
/**
 * 定义狗对象
 * @author Liudeli
 */
public class Dog implements IAnimal {

    public void call() {
        System.out.println("汪汪汪...");
    }

}
/**
 * 定义鹅对象
 * @author Liudeli
 */
public class Goose implements IAnimal{

    public void call() {
        System.out.println("鹅鹅鹅...");
    }

}
/**
 * 此类为动物管理类
 * @author Liudeli
 */
public class AnimalManager {

    /**
     * 执行叫的行为
     * @param animal 传入动物接口(父类的引用指向子类的对象)
     */
    public void call(IAnimal animal) {
        animal.call();
    }

}
/**
 * 测试程序
 * @author Liudeli
 */
public class Main {

    public static void main(String[] args) {

        AnimalManager animalManager = new AnimalManager();

        animalManager.call(new Dog());

        animalManager.call(new Goose());

        animalManager.call(new Cat());
    }

}

运行结果:

java面向切面计算接口执行时间 java面向接口编程的例子_java面向切面计算接口执行时间_02


案例三(城市案例):

/**
 * 定义城市的接口
 * @author Liudeli
 *
 */
public interface ICity {

    /**
     * 显示当前城市,显示城市特点
     */
    public void city();

}
/**
 * 定义北京对象
 * @author Liudeli
 *
 */
public class Beijing implements ICity {

    public void city() {
        // TODO Auto-generated method stub
        System.out.println("北京雾霾很严重...");
    }

}
/**
 * 定义上海对象
 * @author Liudeli
 *
 */
public class Shanghai implements ICity {

    public void city() {
        // TODO Auto-generated method stub
        System.out.println("上海很豪华...");
    }

}
/**
 * 定义深圳对象
 * @author Liudeli
 *
 */
public class Shenzhen implements ICity {

    public void city() {
        // TODO Auto-generated method stub
        System.out.println("深圳天气晴空万里...");
    }

}
/**
 * 此类为显示城市管理类
 * @author Liudeli
 *
 */
public class ShowCity {

    /**
     * 初始化单例模式
     */
    private static ShowCity showCity = null;

    public static ShowCity getInstance() {
        if (null == showCity) {
            synchronized (ShowCity.class) {
                showCity = new ShowCity();
            }
        }
        return showCity;
    }

    /**
     * 显示城市
     * @param city 传入城市接口(父类的引用指向子类的对象)
     */
    public void show(ICity city) {
        city.city();
    }

}
/**
 * 测试程序
 * @author Liudeli
 *
 */
public class Main {

    public static void main(String[] args) {

        ShowCity instance = ShowCity.getInstance();

        instance.show(new Shanghai());

        instance.show(new Beijing());

        instance.show(new Shenzhen());

    }

}

运行结果:

java面向切面计算接口执行时间 java面向接口编程的例子_java_03




案例四(PCI案例):

java面向切面计算接口执行时间 java面向接口编程的例子_java面向切面计算接口执行时间_04

java面向切面计算接口执行时间 java面向接口编程的例子_java_05

目前自认为这是我写的比较通俗易懂,体现出面向接口编程意义的案例:

/**
 * 电脑主板里面有插槽(插槽就是PCI)
 * 注意:这些插槽是一种标准,
 *      支持声卡,网卡,显卡...
 * @author Liudeli
 *
 */
public interface PCI {

    /**
     * 插入状态
     */
    public void insert();

    /**
     * 拔出状态
     */
    public void pull();

}
/**
 * 定义声卡对象
 * @author Liudeli
 *
 */
public class SoundCard implements PCI {

    public void insert() {
        System.out.println("声卡已经插入成功了...");
    }

    public void pull() {
        System.out.println("声卡被人拔出去了...");
    }

}
/**
 * 定义网卡对象
 * @author Liudeli
 *
 */
public class NetworkCard implements PCI {

    public void insert() {
        System.out.println("网卡已经插入成功...");
    }

    public void pull() {
        System.out.println("网卡已经被人拔出去了...");
    }

}
/**
 * 定义显卡对象
 * @author Liudeli
 *
 */
public class Graphics implements PCI {

    public void insert() {
        System.out.println("显卡已经插入成功了...");
    }

    public void pull() {
        System.out.println("显卡被人给拔出去了...");
    }

}
/**
 * 电脑主板
 * @author Liudeli
 *
 */
public class MainBoard {

    /**
     * 主板的卡槽
     * @param pci 插入支持标准卡槽的具体对象(父类的引用去指向子类的对象来调用具体实现)
     */
    public void cardSlot(PCI pci) {
        pci.insert();
        pci.pull();
    }

}
/**
 * 测试程序
 * @author Liudeli
 *
 */
public class Main {

    public static void main(String[] args) {

        // 拿一块主板过来(我要自己组装台式机电脑)
        MainBoard mainBoard = new MainBoard();

        // 给主板插好声卡(安装好声卡才可以听歌)
        mainBoard.cardSlot(new SoundCard());

        // 给主板插好显卡(安装好的显卡可以玩游戏舒服)
        mainBoard.cardSlot(new Graphics());

        // 给主板插好网卡(安装好网卡才可以插入网线,才可以上网)
        mainBoard.cardSlot(new NetworkCard());
    }

}

运行结果:

java面向切面计算接口执行时间 java面向接口编程的例子_面向对象思想_06


Project结构图:

java面向切面计算接口执行时间 java面向接口编程的例子_java_07