简单工厂模式是由一个对象决定创建出哪一种产品的实例。简单工厂模式是工厂模式家族中最简单只用的模式。
查看下面的代码有何不妥之处
我先定义一个生产的接口,
然后我在用一个手机类去实现这个接口,
最后,我实例化一个对象来使用手机工作。
package factory;
public class Person {
public static void main(String[] args) {
IProduct phone= new Phone();
phone.work(); //结果: 手机开始工作了...
}
}
// 创建一个工厂 接口
interface IProduct{
public void work();
}
// 工厂生产了手机
class Phone implements IProduct{
public void work() {
System.out.println("手机开始工作了....");
}
}
通过上面的代码可以看出 , 如果手机类改变,或者出错,对用户类会产生很大的影响,甚至会使程序无法正确执行。这就是两个类耦合了,产生了依赖,当被使用者发生改变了,会影响到使用者,为了解决这个问题,或者较低两者之间的依赖,我们需要使用简单工厂设计模式。
我们只需要新建一个工厂类,把依赖关系转移一下即可。
代码实例:
- 接口
interface IProduct{
public void work();
}
- 产品
class Phone implements IProduct{
public void work() {
System.out.println("手机开始工作了....");
}
}
class Computer implements IProduct{
public void work() {
System.out.println("电脑开始工作了....");
}
}
- 创建一个工厂类,把用户和产品的依赖关系转移 ****
class ProductFactory{
// 使用了静态方法,方便用类名直接调用
public static IProduct getProduct(String name) {
if("phone".equals(name)) {
return new Phone();
}else if("computer".equals(name)) {
return new Computer();
}else {
return null;
}
}
}
- 用户类测试
public class Person {
public static void main(String[] args) {
// IProduct phone = new Phone();
// phone.work();
IProduct phone = ProductFactory.getProduct("phone");
if(null!=phone) {
phone.work();
}
IProduct computer = ProductFactory.getProduct("computer");
if(null!=computer) {
computer.work();
}
}
}
结果:
通过简单工厂设计模式可以看出,即使手机类出错,也不会影响到用户类的正常执行,降低了两者的依赖关系。