目录
一、享元模式的定义与类型
- 一、享元模式的定义与类型
- 二、享元模式的适用场景
- 三、享元模式的优点
- 四、享元模式的缺点
- 五、享元模式的扩展
- 六、享元模式相关的设计模式
- 七、享元模式示例
1、定义
- 提供了减少对象数量从而改善应用所需的对象结构的方式
- 运用共享技术有效的支持大量细粒度的对象
2、类型
- 结构型
- 常常应用于系统底层的开发,以便解决系统的性能问题
- 系统有大量相似对象、需要缓冲池的场景
- 减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率
- 减少内存之外的其他资源占用
- 关注内/外部状态、关注线程安全问题
- 使系统、程序的逻辑复杂化
1、内部状态
- 在享元对象的内部并且不会随着环境的改变而改变的共享部分
2、外部状态
- 在享元对象的外部并且会随着环境的改变而改变的不共享部分
- 享元模式和代理模式
- 享元模式和单例模式
示例描述: 以部门经理制作工作报告为例。
1、代码如下:
//创建一个员工接口
public interface Employee {
//制作报告的方法
void makeReport();
}
//创建一个部门经理类,实现员工接口并重写制作报告方法
public class Manager implements Employee{
//管理者制作工作报告
@Override
public void makeReport() {
System.out.println(makeReportContext);
}
private String title="部门经理"; //(内部状态)
private String departmentManager; //(外部状态)部门经理
private String makeReportContext;//报告内容
//构造方法
public Manager(String departmentManager) {
this.departmentManager = departmentManager;
}
//setter、getter方法
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDepartmentManager() {
return departmentManager;
}
public void setDepartmentManager(String departmentManager) {
this.departmentManager = departmentManager;
}
public String getMakeReportContext() {
return makeReportContext;
}
public void setMakeReportContext(String makeReportContext) {
this.makeReportContext = makeReportContext;
}
}
//创建一个工厂类
public class EmployeeFactory {
public static final Map EMPLOYEE_MAP=new HashMap();
public static Employee getManager(String departmentManager){
Manager manager = (Manager) EMPLOYEE_MAP.get(departmentManager);
if(manager==null) {
manager=new Manager(departmentManager);
System.out.print("创建部门经理:"+departmentManager);
String makeReportContext=manager.getTitle()+departmentManager+"制作ppt汇报";
manager.setMakeReportContext(makeReportContext);
System.out.println(" 创建制作报告内容:"+makeReportContext);
EMPLOYEE_MAP.put(departmentManager,manager);
}
return manager;
}
}
//创建测试类
public class Test {
private static final String departmentManagers[] ={"zhangsan","lisi","wangwu"};//定义部门经理人员
public static void main(String[] args) {
for(int i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?