假设我们定义一个接口:
interface Work{
public void tag();
}
class SuvCar implements Work{
public void tag(){
System.out.println("这是保时捷旗下某一款suv车型");
}
}
class TwoDoorCar implements Work{
public void tag(){
System.out.println("这是保时捷旗下某一款两门跑车");
}
}
class FourDoorCar implements Work{
public void tag(){
System.out.println("这是保时捷旗下某一款四门轿车");
}
}
这种情况下,我们想要使用这三个类那就通过这三个类的实例:
public class Test {
public static void main(String[] args) {
SuvCar car = new SuvCar();
car.tag();
}
}
这样一来我们可以看到,对于使用的人而言要知道SuvCar、TwoDoorCar以及FourDoorCar这三个类,使用者直接使用了具体的类,一旦这三个具体类发生改变,那调用就会出错,使用者将会受到影响。可见,使用者与被使用者之间联系太紧密了。为了避免这个问题可以使用工厂设计模式。
建一个工厂类:
class Factory{
public static Work getWork(String product){
if(product.equals("suv")){
return new SuvCar();
}
else if(product.equals("two")){
return new TwoDoorCar();
}
else if(product.equals("four")){
return new FourDoorCar();
}
else{
return null;
}
}
}
这样的话,使用者只需要依赖这个工厂即可,无需依赖于具体的类:
public class Test {
public static void main(String[] args) {
Work work = Factory.getWork("four");
if(work!=null){
work.tag();
}
}
}
减少耦合,把依赖于具体转变成依赖于接口。