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、本模式通过共享对象来减少系统中对象实例个数,从而减少内存消耗。

  • 相关阅读:
    变量在函数内外的作用域 3
    php中用大括号把?>和<?php框起来的作用
    变量在函数内外的作用域 2
    变量在函数内外的作用域
    字母大小写对变量和函数的区别
    require()和include()代码重用
    str_place()替换函数
    【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善
    android SQLite使用SQLiteOpenHelper类对数据库进行操作
    tomcat设置IP地址或者域名访问
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/909839.html
Copyright © 2011-2022 走看看