享元模式 java例子_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 tygs =new HashMap();

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();

}

}

d1da917cac401161b9794d4b5fdeb5a5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值