抽象工厂模式
抽象工厂模式
什么是抽象工厂模式
抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。
抽象工厂,工厂的工厂。 与工厂方法的区别是一组。
具体细分到某个产品的领域
抽象工厂 生产不同的产品族 简单工厂 工厂方法 都是同一个产品族
抽象工厂 不是相同类型产品的 最后拼接成同一种产品 正常的情况下 业务逻辑下的 同一个产品组下的 当业务很复杂时候 会用到抽象工厂 做零部件的组装
看下面的例子:
先定义不同发动机:
package abstractFactory;
//发动机 有不同的型号
public interface Engine {
void run();
}
class EnginA implements Engine{
@Override
public void run() {
System.out.println("发动机转速很快");
}
}
class EnginB implements Engine{
@Override
public void run() {
System.out.println("发动机转速很慢");
}
}
定义不同座位:
package abstractFactory;
//座位
public interface Chair {
void run();
}
class ChairA implements Chair{
@Override
public void run() {
System.out.println("自动加热");
}
}
class ChairB implements Chair{
@Override
public void run() {
System.out.println("不能加热");
}
}
然后去组装(包装零部件):
定义包装工厂的接口:
package abstractFactory;
public interface CarFactory {
//创建发动机
Engine createEngin();
//创建座椅
Chair createChair();
}
实现不同的组装类:
package abstractFactory;
public class JiliFactory implements CarFactory {
@Override
public Chair createChair() {
return new ChairA();
}
@Override
public Engine createEngin() {
return new EnginA();
}
}
上面组装了个吉利汽车
下面运行演示一下:
package abstractFactory;
public class Client {
public static void main(String[] args) {
//具体哪个factory
CarFactory carFactory = new JiliFactory();
Chair chair = carFactory.createChair();
Engine engin = carFactory.createEngin();
chair.run();
engin.run();
}
}
运行结果:
抽象工厂和工厂方法: 抽象工厂可以放产多种不同品族 支持增加产品族 但是不支持扩展产品族