一、定义
工厂模式是为了解决简单工厂模式中,工厂判断方法的日渐复杂而衍生出来的模式。如果后面需要创建的“产品”越来越多,那么这个简单工厂类会包含越来越多的if-else判断类。这样维护起来会非常的麻烦。同样也违反了开闭原则。
二、设计类图
工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。后续直接调用鼠标工厂.生产鼠标()即可。
三、代码实现
鼠标的创建接口:
public interface Mouse {
void sayHi();
}
public class HaierMouse implements Mouse {
@Override
public void sayHi() {
System.out.println("Haier Mouse Say Hi");
}
}
public class HisenseMouse implements Mouse {
@Override
public void sayHi() {
System.out.println("Hisnese Mouse Say Hi.");
}
}
创建鼠标的工厂:
public abstract class MouseFactory {
public abstract Mouse createMouse();
}
海尔的鼠标工厂:
public class HaierMouseFactory extends MouseFactory {
@Override
public Mouse createMouse() {
return new HaierMouse();
}
}
海信的鼠标工厂:
public class HisenseMouseFactory extends MouseFactory {
@Override
public Mouse createMouse() {
return new HisenseMouse();
}
}
这里是关键,实例化的动作又从工厂类中转义到了客户端实现,直接鼠标工厂.创建鼠标
public class Main {
public static void main(String[] args) {
//创建一个海尔的鼠标
MouseFactory mouseFactory = new HaierMouseFactory();
mouseFactory.createMouse().sayHi();
//创建一个海信的鼠标
MouseFactory mouseFactory2 = new HisenseMouseFactory();
mouseFactory2.createMouse().sayHi();
}
}
执行结果:
Haier Mouse Say Hi
Hisnese Mouse Say Hi.
Process finished with exit code 0