大话设计模式-工厂方法模式

本文转载自点击打开链接

需求:学习雷锋精神,探望老人。
实现
级别1
使用简单工厂模式实现:

//雷锋  
public class LeiFeng  
{  
	public void sweep()  
	{  
		System.out.println("扫地");  
	}  
	public void wash()  
	{  
		System.out.println("洗衣");  
	}  
	public void buyRice()  
	{  
		System.out.println("买米");  
	}  
}  
//社区志愿者    
public class Volunteer extends LeiFeng    
{    
  
} 
//学雷锋的大学生
public class Undergraduate extends LeiFeng    
{    
  
}  
//简单工厂类    
public class SimpleFactory    
{    
  public static LeiFeng createLeiFeng(String type)    
  {    
      LeiFeng result = null;    
      if ("学雷锋的大学生".equals(type))    
      {    
          result = new Undergraduate();    
      }    
      else if ("社区志愿者".equals(type))    
      {    
          result = new Volunteer();    
      }    
      return result;    
  }    
}  
//客户端代码
public class Main  
{  
  public static void main(String[] args)  
  {  
	  LeiFeng studentA = SimpleFactory.createLeiFeng("学雷锋的大学生");  
	  studentA.buyRice();      
	  LeiFeng studentB = SimpleFactory.createLeiFeng("学雷锋的大学生");  
	  studentB.sweep();  
	  LeiFeng studentC = SimpleFactory.createLeiFeng("学雷锋的大学生");  
	  studentC.wash();
  }  
}  

级别2
使用工厂方法模式实现:

//雷锋工厂    
public interface IFactory    
{    
  LeiFeng createLeiFeng();    
} 
//学雷锋的大学生工厂    
public class UndergraduateFactory implements IFactory    
{    
  public LeiFeng createLeiFeng()    
  {    
      return new Undergraduate();    
  }    
}    
//社区志愿者工厂    
public class VolunteerFactory implements IFactory    
{    
  public LeiFeng createLeiFeng()    
  {    
      return new Volunteer();    
  }    
}   
//客户端代码
public class Main  
{  
  public static void main(String[] args)  
  {  
      IFactory factory = new UndergraduateFactory();    
      LeiFeng student = factory.createLeiFeng();    
      student.buyRice();      
      student.sweep();    
      student.wash();   
  }  
}  

工厂方法使一个类的实例化延迟到其子类。工厂方法模式克服了简单工厂违背开放-封闭原则的缺点,又保持了封闭对象创建过程的优点。它们都是集中封闭了对象的创建,使得要更换对象时,不需要做大的改动就可以实现,降低客户程序与产品对象的耦合。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。





你可能感兴趣的:(大话设计模式-工厂方法模式)