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
最新文章
【Uni-App】API笔记 P1
【Uni-App】组件笔记
【Uni-App】其他配置笔记
【Uni-App】page.json 配置项一栏笔记
【微信小程序】05 设备信息 & 请求API
【微信小程序】04 生命周期 & 事件
【微信小程序】03 配置项
【微信小程序】02 常用标签组件
【Java】 WebService 校验机制
【微信小程序】01 入门
热门文章
【ActiveJdbc】05
【ActiveJdbc】04
【ActiveJdbc】03
【ActiveJdbc】02
【MybatisPlus】再补充内容
【SpringBoot】日志在项目中的应用
Invalid numeric value: Leading zeroes not allowed 无效的数值:不允许前导零
navicat premiun 15一次性执行多条sql语句,显示多个结果
一条sql 多个count 不同条件。以及sql的连接方式的定义区别
nested exception is java.lang.NoSuchMethodError:
Copyright © 2011-2022 走看看