zoukankan      html  css  js  c++  java
  • 简单工厂模式

    模式定义

    简单工厂模式:又称为静态工厂方法模式,属于类的创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例,简单工厂模式单独创建一个工厂类负责创建其他类的实例。被创建的实例具有共同的父类。

    模式结构

     模式分析

    简单工厂模式不属于Gof 23个基本设计模式,但可以作为学习Gof的工厂模式的一个先导。简单工厂模式的要点在于,当你需要什么,只要传入一个正确的参数,就可以获取你想要的实例对象,而无需知道其创建细节。

    优点:

    (1)工厂类中含有必要的判断逻辑,用户可以免除创建对象的责任,它提供了一个专门的工厂类。

    (2)用户无需知道具体的产品类的类名,只需知道产品类对应的参数,减少使用者的记忆量。

    (3)在一定程度上,提高系统的灵活性。

    缺点:

    (1)一旦工厂类无法运行,会导致整个系统瘫痪

    (2)会增加系统的类数,在一定程度上增加了系统的复杂度和理解难度

    (3)系统扩展困难,产品类型较多时,工厂类的逻辑会更复杂,不利于系统的扩展和维护。

    电视案例

    TV接口类

    package com.zck.simpleFactory;
    
    public interface TV {
        public void play();
    }

    HaierTV类

    package com.zck.simpleFactory;
    
    public class HaierTV implements TV {
    
        public void play() {
            System.out.print("海尔电视正在播放
    ");
        }
    
    }

    HisenseTV类

    package com.zck.simpleFactory;
    
    public class HisenseTV implements TV {
    
        public void play() {
            System.out.print("海信电视正在播放
    ");
        }
    
    }

    工厂类

    package com.zck.simpleFactory;
    
    public class TVFactory {
        public static TV produceTV(String brand){
            if (brand.equalsIgnoreCase("haier")) {
                return new HaierTV();
            }
            else if (brand.equalsIgnoreCase("hisense")) {
                return new HisenseTV();
            }else{
                return null;
            }
        }
    }

    测试类

    package com.zck.simpleFactory;
    
    public class Client {
    
        public static void main(String[] args) {
            TV tv1,tv2;
            tv1 = TVFactory.produceTV("haier");
            tv1.play();
            tv2 = TVFactory.produceTV("hisense");
            tv2.play();
        }
    
    }

    测试结果

  • 相关阅读:
    怎样判断数组类型
    VS2017不能生成Database Unit Test项目
    Windows Server 远程桌面报错:No Remote Desktop License Servers Available
    TFS2018 获取所有Build变量及变量值
    C# 读写bat文件
    【PowerShell 学习系列】-- 删除Win10自带应用
    Win10
    【TFS】TFS2015链接TFS出现TF31002/TF400324问题解决方案
    【SQL Server 学习系列】-- 获取字符串中出现某字符的次数及字符某次出现的下标
    【.Net 学习系列】-- 利用Aspose转换Excel为PDF文件
  • 原文地址:https://www.cnblogs.com/2016-zck/p/13857504.html
Copyright © 2011-2022 走看看