您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java设计模式——享元模式

小志的博客 发布时间:2020-07-01 17:18:08 ,浏览量:0

目录
    • 一、享元模式的定义与类型
    • 二、享元模式的适用场景
    • 三、享元模式的优点
    • 四、享元模式的缺点
    • 五、享元模式的扩展
    • 六、享元模式相关的设计模式
    • 七、享元模式示例

一、享元模式的定义与类型

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            
关注
打赏
1661269038
查看更多评论
0.0390s