• 设计模式-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型号
  • 相关阅读:
    状压dp学习笔记
    dbcc log(转)
    日志分析 操作(转)
    Sql server 2005系统表详细说明
    c#读取并分析sqlServer据库日志(转)
    [POJ]1915 Knight Moves
    [JOY]1143 飘飘乎居士的约会
    [POJ]1164 The Castle
    win7注册ocx时出现对DllRegisterServer的调用失败,错误代码为0x80040200解决方案
    注册DLL、OCX的方法
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/7201240.html
Copyright © 2020-2023  润新知