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

    一:抽象工厂模式的优点

              --->抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。

           --->假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开 来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。

           --->通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构中的多个产品族中的产品对象的创建问题。

    二:抽象工厂模式的缺点

      --->


    三:应用场景

            --->/**
     * 抽象工厂
     * @author sxf
     * 产品等级概念:intel的cpu 和amd的cpu是一个产品等级的。
     *                                                  intel的主板 和amd的cpu是一个产品等级的。
     *
     * 产品族的概念:intel的cpu 和主办 是一个产品族的
     *                                                  amd的cpu 和主板 是一个产品族的。
     *
     * 简单工厂模式:[纵向划分]
     *                            (1)面对的生成同一个等级的不同产品。比如:传入不同参数,生成intel的cpu或是amd的cpu
     *                            (2)只有一个核心工厂类,判断比较多,业务复杂,扩展改变核心类,麻烦。
     *
     * 工厂方法模式:[纵向划分]
     *                                (1)面对的生成同一个等级的不同产品。
     *                                (2)一个产品有一个自己的工厂类。新增加一个产品,就多一个具体的工厂类。
     * (3)产品单一,属于一个等级的产品
     *
     * 抽象工厂模式:[横向划分]
     *                                (1)面对的生成同一个族的产品
     *                                (2)一个产品族有一个自己的工厂类。
     *  (3)intel的工厂:生产cpu,主板,内存。amd的工厂:生产cpu,主板,内存
     *
     */

    四:抽象工厂模式的角色演变



     


    五:抽象工厂模式的代码示例

    [1]抽象工厂

     1 package com.yeepay.sxf.interfaces;
     2 /**
     3  * 抽象工厂
     4  * @author sxf
     5  *  产品等级概念:intel的cpu 和amd的cpu是一个产品等级的。
     6  *                           intel的主板 和amd的cpu是一个产品等级的。
     7  * 
     8  * 产品族的概念:intel的cpu 和主办 是一个产品族的
     9  *                           amd的cpu 和主板 是一个产品族的。
    10  * 
    11  * 简单工厂模式:[纵向划分]
    12  *                (1)面对的生成同一个等级的不同产品。比如:传入不同参数,生成intel的cpu或是amd的cpu
    13  *                (2)只有一个核心工厂类,判断比较多,业务复杂,扩展改变核心类,麻烦。
    14  * 
    15  * 工厂方法模式:[纵向划分]
    16  *                 (1)面对的生成同一个等级的不同产品。
    17  *                 (2)一个产品有一个自己的工厂类。新增加一个产品,就多一个具体的工厂类。
    18  * 
    19  * 抽象工厂模式:[横向划分]
    20  *                 (1)面对的生成同一个族的产品
    21  *                 (2)一个产品族有一个自己的工厂类。intel的工厂:生产cpu,主板,内存。amd的工厂:生产cpu,主板,内存
    22  *
    23   */
    24 public interface AbstartFactoryForGroup {
    25     /**
    26      * 创建cpu的部门
    27      * @param cpu
    28      * @return
    29      */
    30     public Cpu create(String cpu);
    31     /**
    32      * 创建主板的部门
    33      * @param cpu
    34      * @return
    35      */
    36     public ZhuBan create(Cpu cpu);
    37 }
    View Code

    [2]不同的工厂

     1 package com.yeepay.sxf.interfaces.impl;
     2 
     3 import com.yeepay.sxf.interfaces.AbstartFactoryForGroup;
     4 import com.yeepay.sxf.interfaces.Cpu;
     5 import com.yeepay.sxf.interfaces.ZhuBan;
     6 
     7 /**
     8  * intel的工厂
     9  * @author sxf
    10  *
    11  */
    12 public class IntelFactory implements AbstartFactoryForGroup{
    13     /**
    14      * 创建cpu
    15      */
    16     @Override
    17     public Cpu create(String cpu) {
    18         // TODO Auto-generated method stub
    19         return null;
    20     }
    21     /**
    22      * 创建主板
    23      */
    24     @Override
    25     public ZhuBan create(Cpu cpu) {
    26         // TODO Auto-generated method stub
    27         return null;
    28     }
    29 }
    30 
    31 
    32 package com.yeepay.sxf.interfaces.impl;
    33 
    34 import com.yeepay.sxf.interfaces.AbstartFactoryForGroup;
    35 import com.yeepay.sxf.interfaces.Cpu;
    36 import com.yeepay.sxf.interfaces.ZhuBan;
    37 /**
    38  * AMD的工厂
    39  * @author sxf
    40  *
    41  */
    42 public class AmdFactory implements AbstartFactoryForGroup{
    43 
    44     @Override
    45     public Cpu create(String cpu) {
    46         // 创建其cpu的实现
    47         return null;
    48     }
    49 
    50     @Override
    51     public ZhuBan create(Cpu cpu) {
    52         //创建其主板的实现
    53         return null;
    54     }
    55 
    56     
    57 }
    View Code

    [3]产品接口

     1 package com.yeepay.sxf.interfaces;
     2 /**
     3  * cpu接口
     4  * @author sxf
     5  *
     6  */
     7 public interface Cpu {
     8         public String readNeicun(String neicun);
     9 }
    10 
    11 
    12 package com.yeepay.sxf.interfaces;
    13 /**
    14  * 主板接口
    15  * @author sxf
    16  *
    17  */
    18 public interface ZhuBan {
    19     public String readCpu(Cpu cpu);
    20 }
    View Code
  • 相关阅读:
    【漏洞分析】dedecms有前提前台任意用户密码修改
    关于t00ls的挂机脚本
    关于pocsuite的使用
    [代码审计]青云客Cms前台有条件注入至getshell,后台xss至getshell、至弹你一脸计算器
    警惕phpstudy等开发神器使用默认配置可能带来的危险
    [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入
    [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
    对长短按设置不同反应 安卓
    如何数冲突域(collision domains)个数
    Computer Network Homework2’s hard question
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4641229.html
Copyright © 2011-2022 走看看