首页 > 其他分享 >10.18

10.18

时间:2024-11-20 10:07:44浏览次数:1  
标签:享元 getFlyweight 对象 10.18 Flyweight operation intrinsicState

享元模式

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。享元模式适用于需要创建大量相似对象的情况,通过共享这些对象的内部状态,可以显著减少对象的数量。

下面是一个简单的Java代码示例,演示了享元模式的实现:

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

// 共享的抽象享元类
interface Flyweight {
    void operation();
}

// 具体享元类
class ConcreteFlyweight implements Flyweight {
    private String intrinsicState;

    public ConcreteFlyweight(String intrinsicState) {
        this.intrinsicState = intrinsicState;
    }

    public void operation() {
        System.out.println("ConcreteFlyweight: " + intrinsicState);
    }
}

// 享元工厂类
class FlyweightFactory {
    private Map<String, Flyweight> flyweights = new HashMap<>();

    public Flyweight getFlyweight(String key) {
        if (flyweights.containsKey(key)) {
            return flyweights.get(key);
        } else {
            Flyweight flyweight = new ConcreteFlyweight(key);
            flyweights.put(key, flyweight);
            return flyweight;
        }
    }
}

// 客户端代码
public class FlyweightPatternExample {
    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();
        
        Flyweight flyweight1 = factory.getFlyweight("A");
        flyweight1.operation();
        
        Flyweight flyweight2 = factory.getFlyweight("B");
        flyweight2.operation();
        
        Flyweight flyweight3 = factory.getFlyweight("A");
        flyweight3.operation();
    }
}

在上述示例中,我们定义了一个共享的抽象享元类 Flyweight,其中包含一个 operation() 方法。

然后,我们实现了具体享元类 ConcreteFlyweight,它实现了 Flyweight 接口,并持有一个内部状态 intrinsicState

接着,我们创建了享元工厂类 FlyweightFactory,它维护了一个享元对象的缓存池 flyweights。在 getFlyweight() 方法中,我们通过检查缓存池是否存在对应的享元对象,如果存在则直接返回,否则创建新的享元对象并添加到缓存池中。

在客户端代码中,我们实例化了享元工厂对象 FlyweightFactory,并通过调用 getFlyweight() 方法获取享元对象。在多次获取同一个内部状态的享元对象时,实际上是获取的同一个对象实例。

享元模式的关键思想是共享对象的内部状态,以减少对象的数量。通过共享相同的内部状态,可以节省内存空间,并提高系统的性能。需要注意的是,享元模式将对象的内部状态与外部状态分离,内部状态是可以共享的,而外部状态是变化的,每个对象都需要独立维护。

标签:享元,getFlyweight,对象,10.18,Flyweight,operation,intrinsicState
From: https://www.cnblogs.com/luoqingci/p/18556263

相关文章

  • 10.18
    作业6数据仓库Hive题量:11 满分:60 作答时间:10-2116:00至10-2812:00一.单选题(共5题,15分)1. (单选题,3分) 下面关于Hive的描述错误的是: AHive是一个构建在Hadoop之上的数据仓库工具BHive是由Facebook公司开发的CHive在某种程度上可以看作是用......
  • 24.10.18
    A如果\(i\)可以继续往前走,那么必然存在\(j\gei>a_j\),对于每个\(i\),将\((a_i,i]\)加一,从\(x\)能走到的最小点就是\(x\)左侧第一个\(0\)。线段树区间加,线段树二分。B要求一条边强制经过,就确定了所有棋子的路径,两条边能同时选当且仅当它们确定的路径一致。用随机......
  • 10.18
    1.大规模数据处理:搜索引擎如Google使用MapReduce来处理和索引互联网上的海量网页。通过Map阶段提取网页中的关键词和元数据,然后在Reduce阶段对这些数据进行汇总和排序,生成索引。2.日志分析:企业可以使用MapReduce来分析Web服务器的访问日志,提取用户访问模式、流量来......
  • 10.18Python基础迭代器生成器_函数式编程
    Python迭代器与生成器1.迭代器Iterator什么是迭代器迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器可以重复使用,而不会像列表那样在迭代时被修改。迭代器函数iter和next函数说明iter(iterable)从可迭代对象中返回一个迭代器,iterabl......
  • 10.18
    A.钢琴教室线段树二分板子题,对于\(a_i<i\)的将\([a_i+1,i]\)区间加一,查询的话线段树上二分即可。B.丰雪千里祥音颂[PA2019]Terytoria,今年终于会写了。钦定某一条边必走,这样状态都确定了,枚举这条边,线段树维护最大值个数即可。C.不连续子串所有非空子序列的非空子序列个......
  • 2024.10.18 2342版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 2024.10.18 2309版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 10.18noip联考总结
    10.18noip联考总结T1数据造的很水,按道理来说,std的\(O(64\timesn\times\log_2n)\)的做法是不能过掉极限数据的,可以进行特殊构造把std卡掉。在考场上也想到了与std相同复杂度的做法,但是在算了之后发现是不能过的,期望分数与暴力相同,所以也就没打,后面写了一个很假的做法......
  • 10.18
    学习了异常处理,在处理用户请求时,合理的异常处理能提升应用的稳定性。importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.......
  • 发癫(2024.10.14-2024.10.18)
    虽然已临近CSP复赛,但我还在不务正业更改缺省源最近几天莫名其妙的的想改一下我的缺省源。之前和现在的缺省源比较:之前:#include<stdio.h>#include<string.h>//#include<bits/stdc++.h>//#include<iostream>//usingnamespacestd;//usingstd::cin;#defineitnint#d......