Java工厂方法模式
niuyongzhi 人气:01.工厂方法是什么
众所周知,工厂是生产产品的,并且产品供消费者使用。消费者不必关心产品的生产过程,只需要关心用哪种产品就行。
在Java世界中,工厂方法模式和现实功能类似。工厂即一个工厂类,提供获得对象(产品)的方法(工厂方法)。其他类(消费者)需要用到某个对象时,只需调用工厂方法就行,不必new这个对象。
2.如何实现
1)创建产品的抽象类或接口---抽象产品
2)创建具体产品的类---具体产品
3)创建工厂的抽象类或接口---抽象构造类
4)创建具体工厂类---具体构造类
3.代码实现
比如想要获得车的参数信息,轮胎信息等。
1)抽象产品
/** * 产品抽象类 */ public abstract class Tyre { String name; public abstract void getName(); }
2)具体产品
/** * 具体产品 */ public class MichelinTyre extends Tyre { MichelinTyre(){ name = "米其林轮胎"; } @Override public void getName() { System.out.println("car name :"+name); } }
3)抽象构造类
/** * 抽象构造类 */ public abstract class Car { /** * 对外提供产品的抽象方法 * @return */ public abstract Tyre getTyre(); }
4)具体构造类
/** * 具体构造类 */ public class BydCar extends Car { /** * 对外提供获得对象的方法。 * 当用户想要获得某个产品时,可以通过相应的工厂方法来获取,而不是直接通过new的方式。 * 优点:避免用户通过new来获取对象,让用户代码和产品代码解耦。 * @return */ @Override public Tyre getTyre() { return new MichelinTyre(); } }
5)测试类
/** * 测试类 */ public class Main { public static void main(String args []){ Tyre tyre; Car car = new BydCar(); tyre = car.getTyre(); tyre.getName(); } }
4.工厂方法模式的优点
1)可以让用户代码和某个特定对象的子类的代码解耦
2)用户不必关心他所使用的对象是如何创建的,只需要知道该对象有哪些方法可供调用即可。
5.拓展
工厂模式在Java集合框架中的应用案例
Collection<Integer> list = new LinkedList<Integer>(); for(int i = 0;i<5;i++){ list.add(i); } Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); }
在Collection接口中定义了一个 iterator方法,返回Iterator接口的实例。
Iterator接口----抽象产品
Iterator的实现类---具体产品
Collection接口---抽象构造
LinkedList链表类--具体构造类
加载全部内容