对比 | 简单工厂模式 | 工厂方法模式 |
---|---|---|
概述 | 简单工厂模式(又称静态工厂方法模式),定义一个具体的工厂类负责创建一些类的实例 | 工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。 |
优点 | 客户端不需要在负责对象的创建 | 1.客户端不需要在负责对象的创建 2.新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性 |
缺点 | 新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护 | 需要额外的编写代码,增加了工作量 |
简单工厂模式
- 代码结构如下图:
- 具体代码实现:
abstract class Animal { // 接口
public abstract void eat();
}
class Cat extends Animal { // 具体类
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
class Dog extends Animal { // 具体类
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
class AnimalFactory { // 工厂类
public static Animal createAnimal(String name) {
if("dog".equals(name)) {
return new Dog();
}else if("cat".equals(name)) {
return new Cat();
}else {
return null;
}
}
}
public static void main(String[] args) { // 测试方法
Dog d = (Dog) AnimalFactory.createAnimal("dog");
d.eat();
Cat c = (Cat) AnimalFactory.createAnimal("cat");
c.eat();
}
工厂方法模式
- 代码结构如下图:
- 具体代码实现:
abstract class Animal { // 接口
public abstract void eat();
}
class Cat extends Animal { // 具体类
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
class Dog extends Animal { // 具体类
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
interface AnimalFactory { // 工厂接口
public Animal createAnimal();
}
public class DogFactory implements AnimalFactory { // 工厂具体类
@Override
public Animal createAnimal() {
return new Dog();
}
}
public class CatFactory implements AnimalFactory { // 工厂具体类
@Override
public Animal createAnimal() {
return new Cat();
}
}
public static void main(String[] args) { // 测试方法
AnimalFactory df = new DogFactory();
Dog d = (Dog) df.createAnimal();
d.eat();
}