简单工厂模式
简单工厂模式概述
•又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
举例代码(使用静态工厂创建狗和猫):
package 简单工厂模式;
public class CreatAnimalF {
private CreatAnimalF() {
}
public static Animal creatAnimal(String type) {
if(type.equals("dog")) {
return new Dog();
}else if (type.equals("cat")) {
return new Cat();
}
return null;
}
}
package 简单工厂模式;
public class TestDemo{
public static void main(String[] args) {
Animal dog = CreatAnimalF.creatAnimal("dog");
if(dog!=null)
dog.eat();
Animal cat = CreatAnimalF.creatAnimal("cat");
if(cat!=null)
cat.eat();
}
}
优点
•客户端不需要在负责对象的创建,从而明确了各个类的职责
缺点
•这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
工厂方法模式
工厂方法模式概述
•工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
定义一个创建动物的工厂接口,狗和猫的创建都通过实现它来创建具体的猫和狗对象
package 工厂方法;
import 简单工厂模式.Animal;
public interface Factory{
public Animal CreatAnimal();
}
package 工厂方法;
import 简单工厂模式.Animal;
import 简单工厂模式.Dog;
public class DogFactory implements Factory{
@Override
public Animal CreatAnimal() {
// TODO Auto-generated method stub
return new Dog();
}
}
package 工厂方法;
import 简单工厂模式.Animal;
import 简单工厂模式.Cat;
public class CatFactory implements Factory{
@Override
public Animal CreatAnimal() {
// TODO Auto-generated method stub
return new Cat();
}
}
package 工厂方法;
import 简单工厂模式.Animal;
public class TextDemo {
public static void main(String[] args) {
Animal animal = new DogFactory().CreatAnimal();
animal.eat();
animal = new CatFactory().CreatAnimal();
animal.eat();
}
}
优点
•客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
缺点
•需要额外的编写代码,增加了工作量