教做衣服的网站有哪些,九江建网站多少钱,影响网站权重的因素有哪些,先学php还是网站建设一、
1、介绍#xff1a;定义一个用于创建对象的接口#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断#xff0c;根据客户端的选择条件动态实例化相关的类#xff0c;对于客户端来说…一、
1、介绍定义一个用于创建对象的接口让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断根据客户端的选择条件动态实例化相关的类对于客户端来说去除了与具体产品的依赖。工厂方法模式也即将简单工厂模块的Factory工厂类拆成接口再定义具体的工厂子类去实现。
2、结构图 3、代码
/*** 虚拟工厂类* 给具体的工厂类提供虚拟方法*/
abstract class AbstractFactory {// 表示创建产品的方法此处使用的是通过具体的产品类的Class来确定需要创建的产品// 也可以通过String等其他方式来指定public abstract T extends AbstractProduct T create(ClassT tClass);}
/*** 具体工厂类* 继承虚拟工厂类提供真正的创建对象的方法的实现*/
class CommonFactory extends AbstractFactory{Override // 对虚拟工厂类的方法进行重写public T extends AbstractProduct T create(ClassT tClass) {T product null; // 创建一个null对象作为初始化使catch到异常后也能有null返回作为结果try {// 明明这样就可以实现但是书里写的更加复杂// (T)Class.forName(tClass.getName()).newInstance()// 暂时对此感到不解product tClass.newInstance(); // 通过反射创建新的对象} catch (Exception e) {e.printStackTrace();}return product;}
}
/*** 虚拟产品类* 对产品类的属性以及方法做好规范* 如果有所有具体产品类都通用的方法也可以直接实现*/
abstract class AbstractProduct {/*** 通用方法*/public void method1() {System.out.println(所有产品都会这么做);}/*** 每个产品实现各异的方法*/public abstract void method2();
}
/*** 具体产品类* 继承虚拟产品类在虚拟产品类提供的默认方法外具体实现虚拟类中规定的虚拟方法*/
class Product extends AbstractProduct {Overridepublic void method2() {System.out.println(这是一个具体的产品类的特性);}
}
class Client {public static void main(String[] args) {AbstractFactory factory new CommonFactory();AbstractProduct product factory.create(Product.class);product.method1();product.method2();}
}