简单工厂模式
摘要:
简单工厂模式由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单使用的模式。
为什么要用工厂模式?
假如,现在我们需要一个手机类和电脑类,它们都属于产品,我们就这么写。
产品类接口
public interface Product {
//产品开始工作
public void work();
}
电脑实例:
public class Computer implements Product {
public void work() {
System.out.println("电脑开始工作");
}
}
手机实例:
public class Phone implements Product {
public void work() {
System.out.println("手机:开始工作");
}
}
开始代码
public class TestFactory {
public static void main(String[] args) {
Product phone = new Phone();
//手机开始工作
phone.work();
Product computer = new Computer();
//手机开始工作
computer.work();
}
}
输出结果为:
手机:开始工作
电脑开始工作
没有用工厂模式写,这样的代码有没有什么毛病呢?没有什么毛病,能跑就行对吧。但是,我们的测试类 TestFactory 是使用的一方,而 Phone 和 Computer 是被使用的一方,使用类中直接使用了Phone 和 Computer ,如果 Phone实例 或者 Computer实例 发生变化或者类没有被加载呢?那么我们的 TestFactory 使用类是会报错的。耦合性太强,不解耦。
使用则和被使用者两者之间,耦合,产生了依赖,当被使用者改变时,会影响被使用者
使用工厂模式
使用工厂模式来降低两者之间的依赖,实现解耦。我们来创建一个产品工厂类(ProductFactory),代码如下:
//产品工厂类
public class ProductFactory {
public static Product getProduct(String name){
if ("phone".equals(name)){
return new Phone();
}else if ("computer".equals(name)){
return new Computer();
}
return null;
}
}
我们根据传入的参数,对参数进行判断,返回不同的产品类
我们使用这代码修改只会,可以实现解耦,代码如下:
public class TestFactory {
public static void main(String[] args) {
Product phone = ProductFactory.getProduct("phone");
if (phone != null){
//手机开始工作
phone.work();
}
}
}
这样使用者和被使用者之间实现了解耦,使用者和被使用之前没有直接依赖关系,如果手机产品发生了变化,或者不存在,那么我们的work方法也就不会执行。
相关代码及文档:https://github.com/q779247257/java-Study