首页 > 其他 > 详细

抽象工厂模式

时间:2018-10-27 21:59:26      阅读:132      评论:0      收藏:0      [点我收藏+]

抽象工厂模式

什么是抽象工厂模式

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

 技术分享图片

 

技术分享图片

 

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

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

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

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

    看下面的例子:

  先定义不同发动机:

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

运行结果:

技术分享图片

 

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

 

抽象工厂模式

原文:https://www.cnblogs.com/toov5/p/9863578.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!