在面向对象编程中,最通常的方法是一个new操作符产生一个实例对象,new操作符就是用来构造对象实例的。
接口的作用(SimpleFactory .java)
范例:
//定义一个水果标准
interface Fruit{
public void eat();
}
class Apple implements Fruit{
@Override
public void eat() { //覆写抽象方法eat()
System.out.println("吃苹果。");
}
}
class Orange implements Fruit{
@Override
public void eat() { //覆写抽象方法eat()
System.out.println("吃橘子。");
}
}
public class SimpleFactory {
public static void main(String[] args) {
Fruit f=new Apple(); //子类为接口示例化
f.eat();
}
}
在上例中,发现在主类(客户端)之中直接让一个具体的子类和接口绑定在一起,那么如果要修改使用的子类,对于程序而言,就意味着要修改客户端。所以此时程序之中就出现了接口和子类的耦合问题,为解决这一问题,使用工厂模式。
工厂模式(Factory.java)
interface Fruit{
public void eat();
}
class Apple implements Fruit{
@Override
public void eat() {
System.out.println("吃苹果。");
}
}
class Orange implements Fruit{
@Override
public void eat() {
System.out.println("吃橘子。");
}
}
class Factory1{
public static Fruit getInstance(String className) {
if("apple".equals(className)) {
return new Apple();
}
if("orange".equals(className)) {
return new Orange();
}
return null;
}
}
public class Factory {
public static void main(String[] args) {
Fruit f=Factory1.getInstance("orange"); //初始化参数
f.eat();
}
}
此时的程序,客户端没有和具体的子类耦合在一起,这样一来,如果再有更多的Fruit接口子类出现,只需要修改Factory类即可,即:所有的接口对象都通过Factory类取得。
在程序员自己开发的代码之中,只要是遇见了取得接口对象实例的操作,都应该采用工厂设计模式。