1.简单工厂模式

    对于java初学者,或者其他面向对象的编程语言,往往很多人在学习接口(Interface)之后并不是很明白借口到底是用来干什么的,只是从书上看到类似于接口是实现程序设计中程序结构合理,严谨,高效的手段,或者有的教材是说接口是为了实现多继承,对的接口确实有这些方面的好处,但是初学者看不懂啊, 当初我在学习的时候也是这样,不太明白如何使用。下面来看看什么是接口。

    接口是抽象类的抽象,抽象中可以有实现了的方法,而接口并没有,接口中只存在抽象方法和常量。

    接口是干什么的呢?

    通常用接口定义类的实现外观,就是说接口定义了类的行为,例如一个类实现了某个接口,那么这个实现的类必须要实现已经在接口中定义的所有的方法,也就是接口规定了类需要实现哪些功能。

    接口到底是干什么的?

    简单来说接口是为了实现“封装隔离”,就是对隔离体的行为的封装,以及将外部调用与内部实现进行隔离。这样做的好处就是外部调用不去管内部实现,它只知道接口可以提供的功能就够了,而内部的修改不会对外部产生大的影响。


    下面开始看一个例子:我们定义一个Api接口,然后实现它,最后用客户端调用它。

//Api接口
public interface Api{
    public void method(String s);
}

    实现这个接口,Impl

public class Impl implements Api{
    public void method(String s){
        System.out.println("The is a test method, your param is"+s);
    }
}

    客户端调用这个实现

public class Client{
    public static void main(String args[]){
        Api api = new Impl();
        api.method("Hello world!");
    }
}

    在这个例子中,Client类去调用接口方法,但是还需要自己去实例化一个Impl类,那么这样有必要使用Api接口么,直接用一个Impl类,或者干脆去掉Impl类好了,但这样真正做到了封装隔离了么,并没有。我们要试图隐藏掉Api的实现部分,而直接调用Api定义的方法。下面用另一种方法试试。

还是使用原来的Api接口:

//Api接口
public interface Api{
    public void method(String s);
}

具体实现:

//第一个实现
public class ImplA implements Api{
    public void method(String s){
        System.out.println("The is a test method Frome A, your param is"+s);
    }
}
//第二个实现
public class ImplB implements Api{
    public void method(String s){
        System.out.println("The is a test method From B, your param is"+s);
    }
}

到这里和原来的写法几乎是一样的,继续,现在我们使用一个新的来来间接地调用这两个实现:

public class Factory{
    public static Api createApi(int condition){
        Api api=null;
        switch(condition){
            case 1:
                api=new ImplA();
                break;
            case 2:
                api=new ImplB();
                break;
            default:
                break;
        }
        return api;
    }
}

示例中使用了一个新的类叫做Factory来调用Api类的实现,并且提供了选择实现的条件。如何使用呢?

public class Client{
    Api api=Factory.createApi(1);
    api.method("Hello world");
}



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