• java常用设计模式--享元模式简单实例


    package com.ruanyun;

    import java.util.HashMap;
    import java.util.Map;

    /**
    * @Auther: maxw
    * @Date: 2018/11/21 09:47
    * @Description:享元模式:“享”就是分享之意,指一物被众人共享,而这也正是该模式的终旨所在。
    * 享元模式有点类似于单例模式,都是只生成一个对象来被共享使用。这里有个问题,那就是对共享对象的修改,为了避免出现这种情况,我们将这些对象的公共部分,或者说是不变化的部分抽取出来形成一个对象。这个对象就可以避免到修改的问题。
    * 享元的目的是为了减少不必要额外的内存消耗,将多个对同一对象的访问集中起来,不必为每个访问者创建一个单独的对象,以此来降低内存的消耗。
    * 享元模式使用的场景:当我们项目中创建很多对象,而且这些对象存在许多相同模块,这时,我们可以将这些相同的模块提取出来采用享元模式生成单一对象,再使用这个对象与之前的诸多对象进行配合使用,这样无疑会节省很多空间。
    */
    public class Test9 {
    public static void main(String args[]){
    String yundong ="足球";
    for(int i=0;i<5;i++){
    TiYuGuan tiYuGuan = JianZhuFactory.getTyg(yundong);
    tiYuGuan.setName("合肥体育馆");
    tiYuGuan.setShape("椭圆形");
    tiYuGuan.setYongtu("比赛");
    tiYuGuan.use();
    }
    }
    }
    //定义一个建筑接口
    interface Jianzhu{
    void use();
    }
    //创建一个体育馆
    class TiYuGuan implements Jianzhu{
    private String name;
    private String shape;
    private String yongtu;
    private String yundong;

    public TiYuGuan(String yundong) {
    this.yundong = yundong;
    }
    public String getYongtu() {
    return yongtu;
    }

    public void setYongtu(String yongtu) {
    this.yongtu = yongtu;
    }
    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getShape() {
    return shape;
    }

    public void setShape(String shape) {
    this.shape = shape;
    }

    public String getYundong() {
    return yundong;
    }

    public void setYundong(String yundong) {
    this.yundong = yundong;
    }

    @Override
    public void use() {
    System.out.println("该体育馆被使用于"+yongtu+",项目为:"+ yundong+",场地形状为:"+shape+",场地名称为:"+name+",对象:"+this);
    }
    }
    //需要用到工厂类 建筑工厂 可以产出体育馆等建筑
    class JianZhuFactory{
    private static final Map<String,TiYuGuan> tygs =new HashMap<String,TiYuGuan>();
    public static TiYuGuan getTyg(String yundong){
    TiYuGuan tyg = tygs.get(yundong);
    if(tyg==null){
    tygs.put(yundong,new TiYuGuan(yundong));
    }
    return tygs.get(yundong);
    }
    public static int getSize(){
    return tygs.size();
    }
    }

    
    
  • 相关阅读:
    NHibernate错误集锦
    potree的第三方库
    potree的API说明文档
    potreeConverter之数据处理
    potreeConverter之环境配置
    SpringBoot读取配置文件信息
    SpringBoot启动tomcat失败
    AbstractRoutingDataSource动态切换数据源
    多数据源配置(Spring+mybatis)
    单一数据源配置(Spring+Mybatis)
  • 原文地址:https://www.cnblogs.com/maxiw/p/9993549.html
Copyright © 2020-2023  润新知