这个模式,具体有啥作用,感觉作用不明显...可能是本人学艺不精吧。
目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。
工厂方法模式包含四个部分:
-
抽象产品:产品对象同一的基类,或者是同一的接口。
-
具体的产品:各个不同的实例对象类
-
抽象工厂:所有的子类工厂类的基类,或是同一的接口
-
具体的工厂子类:负责每个不同的产品对象的实际创建
类图:
![](https://img.haomeiwen.com/i6765210/899b027a64d824e0.png)
1.产品层
- 产品抽象层
/**
* 产品抽象层
*/
public interface Car {
/**
* 上班函数
*/
void gotowork();
}
- Bike产品
/**
* 具体产品
*/
public class Bike implements Car {
public void gotowork() {
System.out.println("骑自行车去上班!");
}
}
- Bus产品
/**
* 具体产品
*/
public class Bus implements Car {
public void gotowork() {
System.out.println("坐公交车去上班!");
}
}
2.工厂层
- 工厂抽象层
/**
* 工厂抽象
*/
public interface ICarFactory {
/**
* 获取交通工具
*/
Car getCar();
}
- BikeFactory工厂
import com.sqlb.factory.Car;
import com.sqlb.factory.ICarFactory;
/**
* 具体工厂
*/
public class BikeFactory implements ICarFactory {
public Car getCar() {
return new Bike();
}
}
- BusFactory工厂
import com.sqlb.factory.Car;
import com.sqlb.factory.ICarFactory;
/**
* 具体工厂
*/
public class BusFactory implements ICarFactory {
public Car getCar() {
return new Bus();
}
}
3.测试
测试代码:
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();
}
测试结果:
![](https://img.haomeiwen.com/i6765210/671f332f8116d89b.png)
网友评论