1. 程式人生 > >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<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();
}
}