工厂方法模式(Factory Method)

来源:互联网 发布:时时彩计划软件源码 编辑:程序博客网 时间:2024/05/17 04:32
设计模式JAVA描述——工厂方法模式
  工厂方法模式是类的创建模式,又叫做虚拟构造子模式或多态性工厂模式。它的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
  简单工厂模式的缺点:
  由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。
  工厂方法模式的优点:
  在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将创建的工作交给子类去做。这个核心类成为一个抽象工厂的角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类实例化的细节。这使得工厂方法模式可以允许系统在不修改具体工厂角色的情况下引进新的产品,使其具有超越简单工厂模式的优越性。
以下面情况为例讨论该模式的具体实现:
抽象工厂角色(Creator):担任工厂方法模式的核心,规定创建对象的工厂类应该实现的接口。
  具体工厂角色(ConcereteCreator):负责具体产品对象的创建,实现Creator规定的接口。
  抽象产品角色(Product):工厂方法模式所创建对象的超类型,规定产品应具有的接口。
  具体产品角色(ConcreteProduct):实现Product所规定的接口。
  示例代码如下:
package lession13;
//抽象工厂角色(Creator):担任工厂方法模式的核心,规定创建对象的工厂类应该实现的接口。
public interface Creator {
 public Product factory();
}
 
 
package lession13;
//抽象产品角色(Product):工厂方法模式所创建对象的超类型,规定产品应具有的接口。
public interface Product {
 // 没有任何方法
 //在设计模式 这种叫做 标示接口
}
 
 
package lession13;
//具体工厂角色
public class ConcreteCreator1 implements Creator {
 public Product factory()
 {
  return new ConcreteProduct1();
 }
}
 
 
package lession13;
//具体工厂角色
public class ConcreteCreator2 implements Creator {
 public Product factory()
 {
  return new ConcreteProduct2();
 }
}
 
 
package lession13;
//具体产品角色
public class ConcreteProduct1 implements Product {
 // 实现了Product 接口  但是Product 没有任何声明方法
 public ConcreteProduct1()
 {
  System.out.println("this is ConcreteProduct1");
 }
}
 
package lession13;
//具体产品角色
public class ConcreteProduct2 implements Product {
 //实现了Product 接口  但是Product 没有任何声明方法
 
 public ConcreteProduct2()
 {
  System.out.println("this is ConcreteProduct2");
 }
}
 
 
package lession13;
public class Client {
 /**
  * @作者 龚涛
  * @时间 2003 4.10 
  * @具体时间  0:09
  */
 
 private static Creator creator1,creator2;
 private static Product product1,product2;
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  
   //在ConcreteCreator1()方法中创建了ConcreteProduct1
  creator1=new ConcreteCreator1(); 
  product1=creator1.factory();
  
  //在ConcreteCreator2()方法中创建了ConcreteProduct2
  creator2=new ConcreteCreator2();
  product2=creator2.factory();
  
 }
}
原创粉丝点击