工厂模式
设计模式:就是大佬经验的总结。
设计模式的分类:
(1)创建型-->创建对象
(2)结构型-->对象的组成
(3)行为型-->对象的功能
简单工厂模式:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例。
优点:客户端不需要负责对象的创建,从而明确了各个类的职责。
缺点:这个工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护。
abstract class Animal {
public abstract void eat();
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("dog gnaw bone.");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("cat eat fish.");
}
}
class AnimalFactory {
private AnimalFactory() {}
public static Animal createAnimal(String type) {
if ("cat".equals(type)) {
return new Cat();
} else if ("dog".equals(type)) {
return new Dog();
} else {
return null;
}
}
}
public class Test {
public static void main(String[] args) {
Animal cat = AnimalFactory.createAnimal("cat");
if (cat != null) {
cat.eat();
} else {
System.out.println("this animal is not available for the time being.");
}
}
}
工厂方法模式:抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新的对象添加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性。
缺点:需要额外的代码编写,增加了工作量。
abstract class Animal {
public abstract void eat();
}
interface Factory {
public abstract Animal createAnimal();
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("dog gnaw bone.");
}
}
class DogFactory implements Factory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
public class Test {
public static void main(String[] args) {
Factory factory = new DogFactory();
Animal dog = factory.createAnimal();
dog.eat();
}
}