抽象工厂模式

Posted toov5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。

抽象工厂模式

什么是抽象工厂模式

抽象工厂简单地说是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品。

 技术分享图片

 

技术分享图片

 

 抽象工厂,工厂的工厂。   与工厂方法的区别是一组。

 具体细分到某个产品的领域 

    抽象工厂 生产不同的产品族         简单工厂 工厂方法 都是同一个产品族

   抽象工厂 不是相同类型产品的 最后拼接成同一种产品    正常的情况下 业务逻辑下的 同一个产品组下的    当业务很复杂时候 会用到抽象工厂    做零部件的组装   

    看下面的例子:

  先定义不同发动机:

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();
        
    }
}

运行结果:

技术分享图片

 

抽象工厂和工厂方法: 抽象工厂可以放产多种不同品族 支持增加产品族   但是不支持扩展产品族

 

以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式 创建者模式 工厂设计模式 -- 抽象工厂设计模式介绍和实现

设计模式:抽象工厂模式

设计模式11:抽象工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)