设计模式-享元模式

概述

享元模式是一种结构类型的设计模式 ,目的是在创建对象的时候,使用已有的对象代替新的对象的创建,减少内存的消耗提升性能。主要有,享元接口,享元类和享元工厂组成,通过享元工厂管理对应类的创建,而不是直接创建新的对象,然后再使用对应的类,这个共用的思想也类似于对象池的概念。


需求:创建三个角色,法师战士刺客,每个都有自己的行为,当创建重复的角色的时候,可以复用对象。

享元模式

cs 复制代码
internal class Program
{
    private static void Main(string[] args)
    {
        var factory = new Factory();

        var FS = factory.GetCharacter("法师");
        var ZS = factory.GetCharacter("战士");
        var CK = factory.GetCharacter("刺客");
        FS.Behavior("法术");
        ZS.Behavior("攻击");
        CK.Behavior("刺杀");

        var CK1 = factory.GetCharacter("法师");
        CK1.Behavior("法术");
    }

    public interface ICharacter//角色接口
    {
        void Behavior(string _Behavior);
    }
    public class Character : ICharacter//角色
    {
        private string Name;
        public Character(string name)
        {
            Name = name;
        }
        public void Behavior(string _Behavior)
        {
            Console.WriteLine($"角色{Name}执行{_Behavior}!");
        }
    }
    public class Factory//享元工厂
    {
        private Dictionary<string, ICharacter> keyValuePairs = new Dictionary<string, ICharacter>();

        public ICharacter GetCharacter(string name)//获取角色,如果没有就创建,有就返回已有的
        {
            if (!keyValuePairs.ContainsKey(name))
            {
                keyValuePairs[name] = new Character(name);
            }
            else
            {
                Console.WriteLine($"使用了已存在的元素{name}");
            }
            return keyValuePairs[name];
        }
    }
}

输出:

角色法师执行法术!

角色战士执行攻击!

角色刺客执行刺杀!

使用了已存在的元素法师

角色法师执行法术!

相关推荐
St_rive12 小时前
Page Object设计模式
java·开发语言·设计模式
烬羽1 天前
NestJS 依赖注入:Controller 里那个没有 new 的 service,到底从哪来的?
设计模式·typescript·nestjs
用户938515635072 天前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
烬羽2 天前
从 nest new 到 Hello World:一个最小 NestJS 项目,讲透工厂 + 装饰器 + 模块化
设计模式·node.js·nestjs
艺艺生辉3 天前
从if-else到策略模式
后端·设计模式
小林ixn3 天前
单例模式:从弹窗管理到全局状态,一个模式搞定
前端·javascript·设计模式
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-17-装饰器模式(源码剖析篇)
java·spring·设计模式·装饰器模式·源码分析·io流
workflower3 天前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-16-装饰器模式(业务实战篇)
java·设计模式·装饰器模式·功能扩展·动态增强
workflower4 天前
例二:某汽车制造企业深度融合AI智能体,构建园区网络的智能运维体系
人工智能·机器学习·设计模式·机器人·云计算·汽车·制造