前面学习了工厂方法,那么现在假如有多个Person接口,如Person,Person2,实现两个接口的类分别为Zhangshan,Zhansi;Wangwu,Wangliu;那么这个时候工厂类应该怎么设计呢?
当然可以分别设计两个工厂类来实现,不过因为他们有一定的关联性,所以我们应该将原来的工厂类抽象成抽象工厂,然后分别对这个类有两个实现类,在这两个实现的工厂类里面就可以分别产生出两组对象了。如下:
Person类:
- package com.foactory.eus.interfaces;
- public interface Person {
- public static final String className = "Person" ;
- String getName();
- int getAge();
- }
Person2类:
- package com.foactory.eus.interfaces;
- public interface Person2 {
- public static final String className = "Person2" ;
- String getName();
- int getAge();
- }
他们的实现类分别为:
Zhangshan类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person;
- public class Zhangshan implements Person{
- public String getName() {
- System. out .println( "this is zhangshan is name" );
- return "" ;
- }
- public int getAge() {
- return 0;
- }
- }
Zhangsi类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person;
- public class Zhangsi implements Person {
- public int getAge() {
- return 0;
- }
- public String getName() {
- System. out .println( "this is zhangsi is name" );
- return null ;
- }
- }
Wangwu类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person2;
- public class Wangwu implements Person2{
- public String getName() {
- System. out .println( "this is Wangwu is name" );
- return "" ;
- }
- public int getAge() {
- return 0;
- }
- }
Wangliu类:
- package com.foactory.eus.implement;
- import com.foactory.eus.interfaces.Person2;
- public class Wangliu implements Person2{
- public String getName() {
- System. out .println( "this is Wangliu is name" );
- return "" ;
- }
- public int getAge() {
- return 0;
- }
- }
工厂类:
PersonFactory:
- package com.foactory.eus.factory;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public abstract class PersonFactory {
- public abstract Person instance();
- public abstract Person2 instance1();
- }
实现工厂类:
Person1Factory:
- package com.foactory.eus.factory;
- import com.foactory.eus.implement.Wangwu;
- import com.foactory.eus.implement.Zhangshan;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public class Person1Factory extends PersonFactory{
- public Person instance() {
- return new Zhangshan();
- }
- public Person2 instance1() {
- return new Wangwu();
- }
- }
Person2Factory:
- package com.foactory.eus.factory;
- import com.foactory.eus.implement.Wangliu;
- import com.foactory.eus.implement.Zhangsi;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public class Person2Factory extends PersonFactory{
- public Person instance() {
- return new Zhangsi();
- }
- public Person2 instance1() {
- return new Wangliu();
- }
- }
现在针对上面的工厂设计一测试类:
- import com.foactory.eus.factory.Person1Factory;
- import com.foactory.eus.factory.Person2Factory;
- import com.foactory.eus.interfaces.Person;
- import com.foactory.eus.interfaces.Person2;
- public class Test {
- public static void main(String[] args){
- Person1Factory pf1 = new Person1Factory();
- Person p1 = pf1.instance();
- Person2 p2 = pf1.instance1();
- p1.getName();
- p2.getName();
- Person2Factory pf2 = new Person2Factory();
- Person p3 = pf2.instance();
- Person2 p4 = pf2.instance1();
- p3.getName();
- p4.getName();
- }
- }
结果为:
- this is zhangshan is name
- this is Wangwu is name
- this is zhangsi is name
- this is Wangliu is name