理解
1.抽象工厂 是工厂模式的更大化。工厂模式是把接口放在一个工厂里面,抽象工厂是将工厂再放在一起,决定创建哪一个工厂,然后再去创建对象,执行他的方法。
Animal.java
package testAbFactory;
public interface Animal {
void eat();
}
接口对象,有一个方法。
Cat.java
package testAbFactory;
public class Cat implements Animal {
public void eat() {
System.out.println("我是cat");
}
}
实现animal这个接口,将eat方法写成cat类的实现。
再创建一个接口对象
Person.java
package testAbFactory;
public interface Person {
void getName();
}
创建一个接口。
Zhouzhihai.java
package testAbFactory;
public class Zhouzhihai implements Person {
public void getName() {
System.out.println("我是周志海");
}
}
实现接口的方法。
创建一个抽象类,里面放着构造上面2个接口的抽象方法。
AbFactory.java
package testAbFactory;
public abstract class AbFactory {
public abstract Animal getAnimal(String name);
public abstract Person getPerson(String name);
}
通过这个我们可以得到一个接口。然后再创建2个接口的工厂类,继承抽象方法,通过传进的参数,来决定创建哪一个实现方法。
AnimalFactory.java
package testAbFactory;
public class AnimalFactory extends AbFactory {
public Animal getAnimal(String name) {
if(name.equalsIgnoreCase("cat")){
return new Cat();
}
return null;
}
public Person getPerson(String name) {
return null;
}
}
同理
PersonFactory.java
package testAbFactory;
public class PersonFactory extends AbFactory{
public Animal getAnimal(String name) {
return null;
}
public Person getPerson(String name) {
if(name.equalsIgnoreCase("zhouzhihai")){
return new Zhouzhihai();
}
return null;
}
}
创建一个AbFactory的构造类,通过传进的参数来决定创建的工厂对象
AbFactoryProducer.java
package testAbFactory;
public class AbFactoryProducer {
public static AbFactory getAbFactory(String name){
if(name.equalsIgnoreCase("animal")){
return new AnimalFactory();
}else {
return new PersonFactory();
}
}
}
Main.java 调用
package testAbFactory;
public class Main {
public static void main(String[] args) {
AbFactory abFactory = AbFactoryProducer.getAbFactory("animal");//通过AbFactoryProducer和参数 来创建animal工厂类
Animal animal = abFactory.getAnimal("cat");//然后通过传进的参数决定 创建 工厂里面的cat类,最后执行方法
animal.eat();
}
}
工厂模式的好处
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。