工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类。
抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
再通俗深化理解下:工厂模式针对的是一个产品等级结构,抽象工厂模式针对的是面向多个产品等级结构的。
主要实现圣诞和新年与男孩和女孩的结合,以实现多个种类产品
实现步骤:
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();