文章目录
抽像工厂
何为抽象工厂模式
抽象工厂模式 是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而无需关心它们实际实现的是哪个具体产品。
抽象工厂模式具体包含以及几个角色:
- 抽象工厂:声明了一组用于创建一族产品的方法,每一个方法对应一个产品
- 具体工厂:实现了在抽象工厂中声明的创建产品的方法,生产一族具体的产品。
- 抽象产品接口:抽象工厂模式的核心是抽象产品接口,这里面定义了产品的基本结构以及行为
- 具体的产品类:它定义具体的工厂生产的具体产品对象,实现了抽象产品接口中声明的业务
这里以某个厂家既生产车又生产手机为例
首先是抽象工厂类
java
/**
* 抽象共产类,主要定义了需要创建哪些产品
*/
public abstract class AbstractFactory {
public abstract AbstractMindPhone createMindPhone();
public abstract AbstractMindCar createMindCar();
}
具体工厂类
java
/**
* 具体的工厂类,继承了抽象共产并且重写了里面的方法,具体实现了xm厂家对car以及phone的对象返回
*/
public class XMFactory extends AbstractFactory {
@Override
public AbstractMindPhone createMindPhone() {
return new XMMindPhone();
}
@Override
public AbstractMindCar createMindCar() {
return new XMMindCar();
}
}
抽象产品类
java
/**
* 抽像的car类,定义了car的行为
*/
public abstract class AbstractMindCar {
public abstract void drive();
public abstract void automatic();
}
java
/**
* 抽象的phone,定义了phone的行为
*/
public abstract class AbstractMindPhone {
public abstract void call();
public abstract void msg();
}
具体产品类
java
/**
* 具体的产品类,对car的行为做了具体的实现
*/
public class XMMindCar extends AbstractMindCar {
@Override
public void drive() {
System.out.println("XM drive");
}
@Override
public void automatic() {
System.out.println("XM automatic");
}
}
public class XMMindPhone extends AbstractMindPhone {
@Override
public void call() {
System.out.println("XM call");
}
@Override
public void msg() {
System.out.println("XM msg");
}
}
对不同产品的实现以及使用
java
public class Main {
public static void main(String[] args) {
AbstractFactory xmFactory = new XMFactory();
AbstractMindCar mxCar = xmFactory.createMindCar();
mxCar.automatic();
mxCar.drive();
AbstractMindPhone xmPhone = xmFactory.createMindPhone();
xmPhone.call();
xmPhone.msg();
}
}