成都网站建设服务公司厦门做网站哪家公司好
目录
- 模式定义
 - 实现方式
 - 简单工厂
 - 工厂方法
 - 主要优点
 
- 应用场景
 - 源码中的应用
 
模式定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
 Factory Method 使得一个类的实例化延迟到子类。
 
实现方式
简单工厂
以下示例非设计模式,仅为编码的一种规范
public class FactoryMethod {public static void main(String[] args) {Application application = new Application();Product product = application.getObject("0");product.method1();}
}interface Product{void method1();
}class ProductA implements Product{public void method1(){System.out.println("ProductA.method1 executed.");}
}class ProductB implements Product{public void method1(){System.out.println("ProductB.method1 executed.");}
}class SimpleFactory{public static Product createProduct(String type){if ("0".equals(type)){return new ProductA();}else if ("1".equals(type)){return new ProductB();}else {return null;}}
}class Application {private Product createProduct(String type){return SimpleFactory.createProduct(type);}Product getObject(String type){Product product = createProduct(type);return product;}
}
 
工厂方法
public class FactoryMethod {public static void main(String[] args) {Application application = new ConcreteProductA();Product product = application.getObject();product.method1();}
}interface Product{void method1();
}class ProductA implements Product{public void method1(){System.out.println("ProductA.method1 executed.");}
}class ProductB implements Product{public void method1(){System.out.println("ProductB.method1 executed.");}
}class SimpleFactory{public static Product createProduct(String type){if ("0".equals(type)){return new ProductA();}else if ("1".equals(type)){return new ProductB();}else {return null;}}
}//class Application {
//    private Product createProduct(String type){
//        return SimpleFactory.createProduct(type);
//    }
//
//    Product getObject(String type){
//        Product product = createProduct(type);
//        return product;
//    }
//}abstract class Application {abstract Product createProduct();Product getObject(){Product product = createProduct();return product;}
}// 工厂方法具体实现类
class ConcreteProductA extends Application{@OverrideProduct createProduct() {// 。。。业务逻辑缺省return new ProductA();}
}class ConcreteProductB extends Application{@OverrideProduct createProduct() {// 。。。业务逻辑缺省return new ProductB();}
}
 
主要优点
- 将具体产品和创建者解耦
 - 符合单一职责原则
 - 符合开放封闭原则
 
应用场景
- 抽象:当你不知道该使用对象的确切类型的时候。
 - 扩展:当你希望为库或框架提供扩展其内部组件的方法时。
 
源码中的应用
// java api
 // 静态工厂方法
Calendar.getInstance()
 
java.text.NumberFormat.getInstance()
 
java.util.ResourceBundle.getBundle()
 
// 工厂方法
java.net.URLStreamHandlerFactory
 
javax.xml.bind.JAXBContext.createMarshaller
 
创作不易,点赞、关注、收藏
 创作不易,点赞、关注、收藏
 创作不易,点赞、关注、收藏
 
