zoukankan      html  css  js  c++  java
  • 设计模式-5-抽象工厂

    简介:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类

    目的:简单工厂的扩展

    总结:简单工厂中,抽象工厂接口创建抽象产品的方法,和抽象产品从一个变成多个

         1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。
         2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。

    组成:工厂接口, 工厂接口实现类, 具体产品的接口, 产品实现类

    一,工厂接口

    package com.design.e.factory.abstrac;
    
    /**
     * 抽象工厂模式
     */
    public interface CoreFactory {
        
        AproductService createAproduct();
        BproductService createBproduct();
    }

    二,工厂接口实现类

    package com.design.e.factory.abstrac;
    /**
     * 指定产品的具体工厂
     */
    public class Machine1Factory implements CoreFactory {
    
        @Override
        public AproductService createAproduct() {
            
            return new ProductA1();
        }
    
        @Override
        public BproductService createBproduct() {
            
            return new ProductB1();
        }
    
    }
    package com.design.e.factory.abstrac;
    /**
     * 指定产品的具体工厂
     */
    public class Machine2Factory implements CoreFactory {
    
        @Override
        public AproductService createAproduct() {
            
            return new ProductA2();
        }
    
        @Override
        public BproductService createBproduct() {
            
            return new ProductB2();
        }
    
    }

    三,具体产品接口

    package com.design.e.factory.abstrac;
    /**
     * 抽象A产品接口
     */
    public interface AproductService {
    
        void create();
    }
    package com.design.e.factory.abstrac;
    /**
     * 抽象B产品接口
     */
    public interface BproductService {
    
        void create();
    }

    四,具体产品实现

    package com.design.e.factory.abstrac;
    /**
     * 具体产品
     */
    public class ProductA1 implements AproductService {
    
        @Override
        public void create() {
            System.out.println(" 生产A类别--A1型号");
        }
    
    }
    package com.design.e.factory.abstrac;
    /**
     * 具体产品
     */
    public class ProductA2 implements AproductService {
    
        @Override
        public void create() {
            System.out.println(" 生产A类别--A2型号");
        }
    
    }
    package com.design.e.factory.abstrac;
    /**
     * 具体产品
     */
    public class ProductB1 implements BproductService {
    
        @Override
        public void create() {
            System.out.println(" 生产B类别--B1型号");
        }
    
    }
    package com.design.e.factory.abstrac;
    /**
     * 具体产品
     */
    public class ProductB2 implements BproductService {
    
        @Override
        public void create() {
            System.out.println(" 生产B类别--B2型号");
        }
    
    }

    Main:

    package com.design.e.factory.abstrac;
    /**
     * 抽象工厂模式
     * 
     * 抽象工厂,抽象产品
     * 
     * 1,首先从简单工厂进化到工厂方法,是因为工厂方法弥补了简单工厂对修改开放的弊端,即简单工厂违背了开闭原则。
     * 2,从工厂方法进化到抽象工厂,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。
     */
    public class MainTest {
    
        public static void main(String[] args) {
            
            CoreFactory machineFactory = new Machine1Factory();
            AproductService productA = machineFactory.createAproduct();
            productA.create();
            BproductService productB = machineFactory.createBproduct();
            productB.create();
            
            machineFactory = new Machine2Factory();
            productA = machineFactory.createAproduct();
            productA.create();
            productB = machineFactory.createBproduct();
            productB.create();
        }
    }

    Result:

     生产A类别--A1型号
     生产B类别--B1型号
     生产A类别--A2型号
     生产B类别--B2型号
  • 相关阅读:
    docker部署springboot应用
    docker部署vue前端
    docker安装mysql5.7 数据挂载
    docker 部署nestjs应用
    unbuntu16.04安装geoserver运行环境
    windows server2012 搭建.netcore+nginx+nssm运行环境
    nginx部署多个网站
    vscode搭建springboot开发环境
    软工课程总结
    Beta答辩总结
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/7201240.html
Copyright © 2011-2022 走看看