工厂方法模式:
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。
工厂方法模式结构:
工厂方法模式一般有四个部分:抽象产品类、具体产品类、抽象工厂类、具体工厂类。
工厂方法模式就是对使用new直接创建对象的一种替代方法,因为直接创建对象可能使得程序维护性差,if-else语句过多等弊端。
代码示例:
抽象产品类:
public abstract class Product {
public abstract void name(){}
public abstract void prise();
}
具体产品类:
public class Product1 extends Product {
//实现抽象类的方法
}
public class Product2 extends Product {
//实现抽象类的方法
}
抽象工厂类:
public abstract class Cracter{
//定义工厂方法,实例化产品由具体工厂实现
public abstract <T extends Product> T createProduct(Class<T> c);
//可以添加对产品对象公有的操作
...
}
具体工厂类:
public class MyCracter extends Cracter{
public <T extends Product> T createProduct(Class<T> c){
Product product=null;
try {
product = (Product)Class.forName(c.getName()).newInstance();
} catch (Exception e) {
//异常处理
}
return (T)product;
}
}
使用场景:
public class Client {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
Product product = creator.createProduct(Product1.class);
//其他操作
...
}
}
使用上面的这种工厂方法模式的优点是显而易见的:
设计原则--依赖倒置原则----要依赖抽象,不要依赖具体类。
下面的指导方针可以帮你避免违反依赖倒置原则:
要点: