设计模式---享元模式

定义

享元模式:主要用于减少创建对象的数量,以减少内存占用和提高性能。

 

享元模式的目的在于运用共享技术,使得一些细粒度的对象可以共享,我们的设计确实 也应该这样,多使用细粒度的对象,便于重用或重构。

 

案例

/**
 * 报考人员信息类
 */
public class SignInfo {

    private String id;
    private String location;
    private String subject;
    private String postAddress;

    public SignInfo(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getPostAddress() {
        return postAddress;
    }

    public void setPostAddress(String postAddress) {
        this.postAddress = postAddress;
    }
}

 

/**
 * 带有对象池的工厂类
 */
public class SignInfoFactory {

    private static Map<String, SignInfo> pool = new HashMap<>();

    public static SignInfo getSignInfo(String key) {

        SignInfo result = null;
        if (!pool.containsKey(key)) {
            System.out.println(key + "----建立对象,并放置到池中");
            result = new SignInfo(key);
            pool.put(key, result);
        } else {
            result = pool.get(key);
            System.out.println(key +"---直接从池中取得");
        }
        return result;

    }

}

 

public class FlyweightPatternDemo {

    public static void main(String[] args) {
        //初始化对象池
        for(int i=0;i<4;i++){
            String subject = "科目" + i;
            //初始化地址
            for(int j=0;j<30;j++){
                String key = subject + "考试地点"+j;
                SignInfoFactory.getSignInfo(key);
            }
        }
        SignInfo signInfo = SignInfoFactory.getSignInfo("科目1考试地点1");
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值