zoukankan      html  css  js  c++  java
  • 享元模式

    复合享元涉及的角色如下:
    1、抽象享元角色
    2、具体享元
    3、复合享元(复合享元是由单纯具体享元复合而成的)//如果是简单享元这条没有
    4、享元工厂
    5、客户端

    简单享元演示代码如下

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace FlyweightFactory
    {
        
    class Program
        
    {
            
    //抽象享元
            abstract class Cause //事业
            {
                
    abstract public void OutInput(string name);//输出所从事的行业
            }



            
    //具体享元(互联网)
            class IT : Cause 
            
    {
                
    private string work = "从事互联网行业";

                
    override public void OutInput(string name)
                
    {
                    Console.WriteLine(
    "{0} 是{1}",
                     name, work);
                }

            }



            
    //具体享元(房地产)
            class House : Cause 
            
    {
                
    private string work = "从事房地产行业";

                
    override public void OutInput(string name)
                
    {
                    Console.WriteLine(
    "{0} 是{1}",
                      name, work);
                }

            }



            
    //(享元工厂)
            class CauseFactory
            
    {

                
    private Hashtable flyweights = new Hashtable();

                
    // 构造函数(享元工厂)    享元工厂作用:就是把多个对象的实例放在一起,好供客户端动态调用
                public CauseFactory()
                
    {
                    flyweights.Add(
    "I"new IT());
                    flyweights.Add(
    "H"new House());
                }


                
    //得到从事的事业(享元)
                public Cause GetCause(string key)
                
    {
                    
    return ((Cause)flyweights[key]);
                }

            }


            
    //客户端
            static void Main(string[] args)
            
    {
                
    string MaYun = "马云";
                
    string WangShi = "王石";
                CauseFactory f 
    = new CauseFactory();
                
    //根据不同类别判别从事那个行业
                Cause c1 = f.GetCause("I");//字母I对应对象IT行业
                c1.OutInput(MaYun);//输出马云所从事的行业

                Cause c2 
    = f.GetCause("H");//字母H对应对象House行业
                c2.OutInput(WangShi);//输出王石所从事的行业
            }


          
        }

    }


    享元模式要点

    1、本设计模式主要解决面向对象的代价问题。
    2、本模式通过共享对象来减少系统中对象实例个数,从而减少内存消耗。

  • 相关阅读:
    前端vue采用formData数据格式传递文件(Post请求)和非文件参数。后端怎样接收的问题(已解决)
    easyExcel 所需的maven 依赖
    基于客户数据的银行信用卡风险控制模型研究-金融风控模型标准评分卡
    chrome 插件知识点(转载)
    EasyNVR调用指定时间端录像播放接口出现黑屏的问题原因以及解决方法
    EasyNVR智能云终端推送视频流至EasyNVS管理平台失败且报错如何排查?
    EasyNVR分发rtsp不标准导致客户端检查报错是什么原因?
    EasyNVR前端在线修改录像存储路径后hls直播失效问题的处理
    EasyNVR实时阅览四分屏状态下最后一路流无法正常播放问题排查
    通过EasyNVR推流到抖音快手直播间无法正常推流是什么原因?
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/909839.html
Copyright © 2011-2022 走看看