工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。
目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。
工厂方法模式包含四个部分:
1.抽象产品:产品对象同一的基类,或者是同一的接口。
2.具体的产品:各个不同的实例对象类
3.抽象工厂:所有的子类工厂类的基类,或是同一的接口
4.具体的工厂子类:负责每个不同的产品对象的实际创建
具体的实例代码:
1.抽象的产品类:定义car 交通工具类下:
package factory.simple; /** * 抽象产品角色 交通工具接口 * * @author lilin * */ public interface Car { /** * 上班函数 */ void gotowork(); }
2.定义实际的产品类,总共定义两个,bike 和bus 分别表示不同的交通工具类
package factory.simple; /** * 具体产品角色,自行车 * * @author lilin * */ public class Bike implements Car { @Override public void gotowork() { System.out.println("骑自行车去上班!"); } }
package factory.simple; /** * @author lilin * */ public class Bus implements Car { @Override public void gotowork() { System.out.println("坐公交车去上班!"); } }
3.抽象的工厂接口定义如下:、
/** * */ package factory.factory; import factory.simple.Car; /** * @author lilin * */ public interface ICarFactory { /** * 获取交通工具 * * @return */ Car getCar(); }
4.具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类:
/** * */ package factory.factory; import factory.simple.Bike; import factory.simple.Car; /** * @author lilin * */ public class BikeFactory implements ICarFactory { @Override public Car getCar() { return new Bike(); } }
/** * */ package factory.factory; import factory.simple.Bus; import factory.simple.Car; /** * @author lilin * */ public class BusFactory implements ICarFactory { @Override public Car getCar() { return new Bus(); } }
最后,使用简单的测试类,来验证下 不同的工厂能够产生不同的产品对象:测试类如下:
/** * */ package factory.factory; import org.testng.annotations.Test; import factory.simple.Car; /** * @author lilin * */ public class TestFactory { @Test public void test() { ICarFactory factory = null; // bike factory = new BikeFactory(); Car bike = factory.getCar(); bike.gotowork(); // bus factory = new BusFactory(); Car bus = factory.getCar(); bus.gotowork(); } }
打印结果如下:
骑自行车去上班!
坐公交车去上班!
工厂模式,可以理解为:有了很多个工厂方法,自己需要哪一个产品,就调用当前产品的工厂方法,获取相应的具体实例。
时间: 2024-10-27 13:12:48