* A:工厂方法模式概述
* 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
* 简单来说:先定义一个工厂,工厂里面有些方法,这些方法就是用来创建动物的,然后有很多子工厂,顾客想创建猫,就来个猫工厂,想创建狗,就来个狗工厂
* 创建针对的对象就是创建针对的工厂
* B:优点
* 客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
* 也就是,不用修改原来的代码,工厂定义完了,猫工厂,狗工厂定义完了之后,影响不大,以后想要再扩展的话,就在创建一个工厂,想要啥,就创建啥工厂就可以了,不用改原来的工厂,也不用该原来的设备
* C:缺点
* 需要额外的编写代码,增加了工作量
* D:案例演示:
* 动物抽象类:public abstract Animal(public abstract void eat();)
* 工厂接口:public interface Factory(public abstract Animal creatAnimal();)
* 具体狗类:public class Dog extends Animal{}
* 具体猫类:public class Cat extends Animal{}
* 开始:在测试类中每一个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就制造了一个专门的类来创建对象,发现每次修改代码太麻烦,用工厂方法改进
* 针对每一个具体的实现提供一个具体的工厂
* 狗工厂:public class DogFactory implements Factory{
* public Animal createAnimal(){~~~}
* }
* 猫工厂:public class CatFactory implements Factory{
* public Animal creatAnimal(){~~~}
* }
package com.yy.工厂方法;
public interface Factory {
public Animal createAnimal();
}
package com.yy.工厂方法;
public class DogFactory implements Factory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
package com.yy.工厂方法;
public class CatFactory implements Factory {
public Animal createAnimal() {
return new Cat();
}
}
package com.yy.工厂方法;
public class Test {
public static void main(String[] args) {
DogFactory df = new DogFactory();
Dog d = (Dog) df.createAnimal();
d.eat();
}
}