在java中接口是一种特殊的抽象类。接口的思想就是封装隔离。
接口的出现的意义在于定义实现类的外观,就相当于一份契约,根据实际需要的功能,约定了实现类的外观。
简单工厂
可以用来创建接口,抽象类或者普通类的实例。
那什么是静态工厂呢?通常把简单工厂类实现成一个工具类,直接使用静态方法就可以了,也就是说简单工厂的方法通常都是静态的,所以也称为静态工厂。
简单工厂的范围建议控制在一个独立的组件级别或者一个模块级别。
命名方式建议为“模块名称+Factory”,方法命名建议为“create+接口名称”。
下面是一个简单的例子。
说现在有一个接口Api,存在两个实现类ImplA与ImplB。
面向接口编程的意义在于,Client不需要知道太多的服务端的实现,它只需要有一个接口就可以了。
这种情况下就需要使用工厂模式,Client只需要让工厂根据它提供的条件创建不同的实例就可以了,无需关心服务端做了什么工作。
所以工厂与客户端的代码如下:
接口的出现的意义在于定义实现类的外观,就相当于一份契约,根据实际需要的功能,约定了实现类的外观。
简单工厂
可以用来创建接口,抽象类或者普通类的实例。
那什么是静态工厂呢?通常把简单工厂类实现成一个工具类,直接使用静态方法就可以了,也就是说简单工厂的方法通常都是静态的,所以也称为静态工厂。
简单工厂的范围建议控制在一个独立的组件级别或者一个模块级别。
命名方式建议为“模块名称+Factory”,方法命名建议为“create+接口名称”。
下面是一个简单的例子。
说现在有一个接口Api,存在两个实现类ImplA与ImplB。
public interface Api {
void simpleFactory(String name);
}
public class ImplA implements Api{
@Override
public void simpleFactory(String name) {
System.out.println(name+"说:呵呵,这是简单工厂模式");
}
}
public class ImplB implements Api{
@Override
public void simpleFactory(String name) {
System.out.println(name+"说:哈哈,这是简单工厂模式");
}
}
另外还存在一个客户端Client,存在需求是根据不同的条件获取Api不同的实现类的实例。面向接口编程的意义在于,Client不需要知道太多的服务端的实现,它只需要有一个接口就可以了。
这种情况下就需要使用工厂模式,Client只需要让工厂根据它提供的条件创建不同的实例就可以了,无需关心服务端做了什么工作。
所以工厂与客户端的代码如下:
public class Factory {
public static Api createApi(int i) {
Api api = null;
if (i == 0) {
api = new ImplA();
} else if (i == 1) {
api = new ImplB();
}
return api;
}
}
public class Client {
/*
* 使用简单工厂创建 Api 对象,实现基本的面向接口编程
* 决定创建什么类型的对象 的参数 的产生方式有很多,比如某个业务逻辑产生
*/
public static void main(String[] args) {
Api api = Factory.createApi(0);
api.simpleFactory("小明");
Api api1 = Factory.createApi(1);
api1.simpleFactory("小红");
}
}