zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    抽象工厂模式

    什么是抽象工厂模式

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

     

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

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

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

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

        看下面的例子:

      先定义不同发动机:

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

    运行结果:

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

  • 相关阅读:
    Shiro安全框架之集成 Web(下)
    Shiro安全框架之集成 Web(中)
    Shiro安全框架之集成 Web(上)
    01背包
    巴什博弈
    斐波那契博弈
    一. 至少转最多
    平面分割类问题
    求凸包(安德鲁算法)
    GCD和exGCD
  • 原文地址:https://www.cnblogs.com/toov5/p/9863578.html
Copyright © 2011-2022 走看看