学做网站论坛怎么样,怎么推广引流,flash网页设计,wordpress分类底部上移目录 模式定义实现方式简单工厂工厂方法主要优点 应用场景源码中的应用 模式定义
定义一个用于创建对象的接口#xff0c;让子类决定实例化哪一个类。 Factory Method 使得一个类的实例化延迟到子类。
实现方式
简单工厂
以下示例非设计模式#xff0c;仅为编码的一种规… 目录 模式定义实现方式简单工厂工厂方法主要优点 应用场景源码中的应用 模式定义
定义一个用于创建对象的接口让子类决定实例化哪一个类。 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.URLStreamHandlerFactoryjavax.xml.bind.JAXBContext.createMarshaller创作不易点赞、关注、收藏 创作不易点赞、关注、收藏 创作不易点赞、关注、收藏