工厂方法模式:
/**
* 工厂方法模式:也叫工厂模式,属于创建型模式,父类工厂(接口)负责定义产品对象的公共接口,
* 而子类工厂负责创建具体的产品对象。
* 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过子类工厂类决定实例化哪一个具体对象。
*
* 工厂方法模式包含四个部分:
* 1.抽象产品: 产品对象的基类,或者是同一的接口。
* 2.具体的子类产品:各个不同的实例对象类。
* 3.抽象工厂: 所有子类工厂的基类,或同一接口。
* 4.具体的工厂子类:负责每个产品对象的具体创建。
*/
1 /** 2 * 抽象产品,交通工具接口 3 * @ClassName: TrafficTool 4 * @author BlueLake 5 * @date 2014年9月10日 下午4:42:10 6 */ 7 public interface TrafficTool { 8 //去上班的抽象方法 9 public void gotoWork(); 10 }
1 /** 2 * 抽象工厂:交通工具工厂 3 * @ClassName: TrafficFactory 4 * @author BlueLake 5 * @date 2014年9月10日 下午4:43:53 6 */ 7 public interface TrafficFactory { 8 //创建交通工具的抽象方法 9 public TrafficTool getTool(); 10 11 }
1 package demo.mode.factory; 2 //具体产品:自行车 3 public class Bike implements TrafficTool{ 4 //具体上班方法 5 public void gotoWork(){ 6 System.out.println("骑自行车去上班-bike-"); 7 } 8 9 }
1 package demo.mode.factory; 2 //具体工厂:自行车工厂 3 public class BikeFactory implements TrafficFactory{ 4 //生成自行车对象 5 public TrafficTool getTool(){ 6 return new Bike(); 7 } 8 9 }
1 package demo.mode.factory; 2 //具体产品:公交车 3 public class Bus implements TrafficTool{ 4 //具体上班方法 5 public void gotoWork() { 6 System.out.println("坐公交车上班---bus---"); 7 } 8 9 }
1 package demo.mode.factory; 2 //具体工厂:公交车 3 public class BusFactory implements TrafficFactory{ 4 //生成公交车 5 public TrafficTool getTool() { 6 return new Bus(); 7 } 8 }
测试:
1 package demo.mode.factory; 2 3 public class FactoryTest { 4 /** 5 * 工厂方法模式:也叫工厂模式,属于创建型模式,父类工厂(接口)负责定义产品对象的公共接口, 6 * 而子类工厂负责创建具体的产品对象。 7 * 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过子类工厂类决定实例化哪一个具体对象。 8 * 9 * 工厂方法模式包含四个部分: 10 * 1.抽象产品: 产品对象的基类,或者是同一的接口。 11 * 2.具体的子类产品:各个不同的实例对象类。 12 * 3.抽象工厂: 所有子类工厂的基类,或同一接口。 13 * 4.具体的工厂子类:负责每个产品对象的具体创建。 14 */ 15 public static void main(String[] args){ 16 //定义公共的变量,工厂接口 17 TrafficFactory fac = null; 18 TrafficTool tool = null; 19 20 //具体调用时,只需要调用不同的工厂就可以实现不用的操作。 21 fac = new BikeFactory(); 22 tool = fac.getTool(); 23 tool.gotoWork();//骑自行车去上班-bike- 24 25 fac = new BusFactory(); 26 tool = fac.getTool(); 27 tool.gotoWork();//坐公交车上班---bus--- 28 } 29 }
工厂方法模式,到此就学会了。
简单吧!
时间: 2024-11-06 13:35:02