设计模式之——抽象工厂模式

          

工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类。

抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 

再通俗深化理解下:工厂模式针对的是一个产品等级结构,抽象工厂模式针对的是面向多个产品等级结构的。

主要实现圣诞和新年与男孩和女孩的结合,以实现多个种类产品

实现步骤:

1.创建一个boy类和girl类的接口,然后针对boy类和girl都有两个具体的实现类,分别是新年系列和圣诞系列的。

1.1 boy类的接口
package Factory.sunny.project;

public interface Boy {

    public void drawMan();;
    
}

两个实现类

package Factory.sunny.project;

public class HNBoy implements Boy {

    @Override
    public void drawMan() {
        // TODO Auto-generated method stub
        System.out.println("---------新年男孩---------");
    }

}
package Factory.sunny.project;

public class MCBoy implements Boy {

    @Override
    public void drawMan() {
        // TODO Auto-generated method stub
        System.out.println("----------圣诞男孩------------");
    }

}
1.2  girl类的接口
package Factory.sunny.project;

public interface Girl {

    public void drawWoman();
}

两个实现类

package Factory.sunny.project;

public class HNGirl implements Girl {

    @Override
    public void drawWoman() {
        // TODO Auto-generated method stub
        System.out.println("-----------新年女孩-----------");
    }

}
package Factory.sunny.project;
//圣诞系列女孩
public class MCGirl implements Girl {

    @Override
    public void drawWoman() {
        // TODO Auto-generated method stub
    System.out.println("--------圣诞女孩--------");
    }

}

2.接口PersonFactory类提供了两个方法,分别是getBoy()和getGirl()
package Factory.sunny.project;
/**
 * 任务实现接口
 * 
 * */
public interface PersonFactory {

    //男孩接口
    public Boy getBoy();
    
    //女孩接口
    public Girl getGirl();   
}



3.圣诞系列和新年系列工厂实现了PersonFactory类,new出实例对象
package Factory.sunny.project;
/**
 * 圣诞系列加工厂
 * 
 * */
public class MCFactory implements PersonFactory {

    @Override
    public Boy getBoy() {
        // TODO Auto-generated method stub
        return new MCBoy();
    }

    @Override
    public Girl getGirl() {
        // TODO Auto-generated method stub
        return new MCGirl();
    }

}

package Factory.sunny.project;
/**
 * 新年系列加工厂
 * 
 * */
public class HNFactory implements PersonFactory {

    @Override
    public Boy getBoy() {
        // TODO Auto-generated method stub
        return new HNBoy();
    }

    @Override
    public Girl getGirl() {
        // TODO Auto-generated method stub
        return new HNGirl();
    }

}
4.测试
      //圣诞女孩
    PersonFactory personFactory=new MCFactory();
    Girl girl=personFactory.getGirl();
    girl.drawWoman();
    
    //新年男孩
    PersonFactory personFactory2=new HNFactory();
    Boy boy=personFactory2.getBoy();
    boy.drawMan();    
 
 
原文地址:https://www.cnblogs.com/zjfjava/p/6497134.html