当前位置: 代码迷 >> 综合 >> 设计模式----工厂方法模式
  详细解决方案

设计模式----工厂方法模式

热度:22   发布时间:2023-09-21 21:51:58.0

工厂方法模式:

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。

工厂方法模式结构:

工厂方法模式一般有四个部分:抽象产品类、具体产品类、抽象工厂类、具体工厂类。

  • 抽象产品类:负责定义产品的共性,实现对事物最抽象的定义;
  • 具体产品类:继承抽象产品类,定制特色产品;
  • 抽象工厂类:负责定义产品的产生,以及对产品的操作;
  • 具体产品类:创建具体的产品。

工厂方法模式就是对使用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);//其他操作...}
}

使用上面的这种工厂方法模式的优点是显而易见的:

  • 将创建产品对象和对产品对象的操作分离。
  • 扩展性非常优秀。以后要想添加新的产品类,只需简单的创建产品类,其他地方都不需要改变。
  • 屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,它只需要关心产品的接口,只要接口保持不变,系统中的上层模块就不要发生变化。

设计原则--依赖倒置原则----要依赖抽象,不要依赖具体类。

下面的指导方针可以帮你避免违反依赖倒置原则:

  • 变量不可以持有具体类的引用
  • 不要让类派生自具体类
  • 不要覆盖基类中已实现的方法

要点:

  • 工厂方法使用继承:把对象的创建交给子类,子类实现工厂方法来创建对象。
  • 通过减少应用程序和具体类之间的依赖出尽松耦合。
  • 工厂方法允许将实例化延长到子类进行。

下一篇----抽象工厂模式

  相关解决方案