网站建设前期准备方案荆州网站设计
1.模式定义
 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实例化延迟到子类 
 
 
 
2.使用场景
 1.当你不知道改使用对象的确切类型的时候  
  2.当你希望为库或框架提供扩展其内部组件的方法时 
  主要优点:
 1.将具体产品和创建者解耦 
  2.符合单一职责原则  
  3.符合开闭原则  
  3.具体实现
3.1 代码示例
 简单工厂: 
 // 简单工厂
class SimpleFactory {public static Product createProduct(String type) {if ("A".equals(type)) {return new ProductA();} else if ("B".equals(type)) {return new ProductB();} else {return null;}}
}
 工厂方法
// 工厂方法
abstract class ProductFactory {/*** 创建产品** @return*/abstract Product createProduct();public Product getObject() {Product product = createProduct();return product;}
}class NonCreateProductA extends ProductFactory {@OverrideProduct createProduct() {return new ProductA();}
}class NonCreateProductB extends ProductFactory {@OverrideProduct createProduct() {return new ProductB();}
} 示例代码
// 实例代码
interface Product {String getName();
}class ProductA implements Product {@Overridepublic String getName() {return "Name's product A";}
}class ProductB implements Product {@Overridepublic String getName() {return "Name's product B";}
} 测试代码
public class FactoryMethodTest {public static void main(String[] args) {// 简单工厂测试代码Product simpleA = SimpleFactory.createProduct("A");System.out.println(simpleA.getName());Product simpleB = SimpleFactory.createProduct("B");System.out.println(simpleB.getName());// 工厂方法测试代码Product pa = new NonCreateProductA().getObject();System.out.println(pa.getName());Product pb = new NonCreateProductB().getObject();System.out.println(pb.getName());}} 3.2 源码中的应用
// java api
// 静态工厂方法
Calendar.getInstance()
java.text.NumberFormat.getInstance()
java.util.ResourceBundle.getBundle()// 工厂方法
java.net.URLStreamHandlerFactory
javax.xml.bind.JAXBContext.createMarshaller  