设计模式(八)——工厂模式
简单工厂
一、定义:
通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
二、特点:
- 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
- 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。
- 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。
三、情景:
创建多种汽车,并对其创建对象的代码进行封装。
1、汽车接口类(Car)
public interface Car {
public void drive();
}
2、BMW类(BMW)
public class BMW implements Car{
public BMW() {
this.drive();
}
public void drive() {
System.out.println("宝马车在路上");
}
}
3、Benz类(Benz)
public class Benz implements Car{
public Benz() {
this.drive();
}
public void drive() {
System.out.println("奔驰车在路上");
}
}
4、工厂类(Factory)
public class Factory {
public static Car produceCar(String carName){
Car car = null;
if("Benz".equals(carName)){
car = new Benz();
return car;
}else if("BMW".equals(carName)){
car = new BMW();
return car;
}else{
return null;
}
}
}
5、工厂测试类(FactoryTest)
public class FactoryTest {
public static void main(String[] args) {
Car car = MyFactory.produceCar("Benz");
Car car2 = MyFactory.produceCar("BMW");
}
}
工厂方法
一、定义:
通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
二、特点:
- 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
- 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
- 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
- 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
三、在简单工厂上的改进:
1、工厂类(Factory)
public abstract class Factory {
public abstract Car produceCar();
}
2、Benz工厂类(BenzFactory)
public class BenzFactory extends Factory{
public Car produceCar() {
Car car = new Benz();
return car;
}
}
3、BMW工厂类(BMWFactory)
public class BMWFactory extends Factory{
public Car produceCar() {
Car car = new BMW();
return car;
}
}
抽象工厂
Spring中的工厂模式
关于作者
后端程序员,五年开发经验,从事互联网金融方向。技术公众号「清泉白石」。如果您在阅读文章时有什么疑问或者发现文章的错误,欢迎在公众号里给我留言。