博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
享元(Flyweight)模式
阅读量:7058 次
发布时间:2019-06-28

本文共 2492 字,大约阅读时间需要 8 分钟。

hot3.png

package JAVABasic;import java.util.ArrayList;import java.util.Collection;/** * 享元模式的核心思想就是将内部状态相同的对象在存储时进行缓存。 * 也就是说同一颜色同一尺寸的皮鞋,我们在内存中只保留一份实例, * 在访问对象时,我们访问的其实是对象缓存的版本,而不是每次都重新生成对象。 * @author markGao * */public class FlyweightMode {    public static void main(String[] args) {        Shoe shoe = ShoeFactory.getInstance().getSheo("BLACK", 42, "A");        System.out.print(shoe.toString());    }        }/** * 由于享元模式禁止生成新的对象,所以在使用享元模式时,通常伴随着工厂方法的应用。 * @author markGao * */class ShoeFactory {    private static ShoeFactory sf = null;    private ShoeFactory() {            }    public static ShoeFactory getInstance(){        if(null == sf){            sf = new ShoeFactory();        }        return sf;    }    Collection
 shoes = new ArrayList
();    public Shoe getSheo(String color, int size, String position) {        if(!shoes.isEmpty()) {            // 首先在缓存中查找对象            for (Shoe shoe : shoes) {                if (null == shoe) {                    continue;                }                if (shoe.getColor() == color && shoe.getSize() == size) {                    // 在缓存中命中对象后还原对象的外部属性                    shoe.setPosition(position);                    return shoe;                }            }        }                // 如果缓存未命中则新建对象并加入缓存        Shoe shoe = new Shoe();        shoe.setColor(color);        shoe.setSize(size);        shoe.setPosition(position);        shoes.add(shoe);        return shoe;    }}class Shoe {    /**     * 其中颜色和尺寸为皮鞋的自然状态,我们称之为对象内部状态,     * 这些状态数据只与对象本身有关,不随外界环境的改变而发生变化。     */    private String color;    private int size;    /**     * 来看库存位置,我们将这个状态称为对象的外部状态,     * 外部状态与对象本身无必然关系,外部状态总是因为外界环境的改变而变化,     * 也就是说外部状态是由外界环境来决定的。     * 在本例中,皮鞋今天放在A仓库,明天可能放在B仓库,但无论存放在哪个仓库,     * 同一只皮鞋就是同一只皮鞋,     * 它的颜色和尺寸不会随着存放位置的不同而发生变化。     */    private String position;        public Shoe(){            }    public String getColor() {        return color;    }    public void setColor(String color) {        this.color = color;    }    public int getSize() {        return size;    }    public void setSize(int size) {        this.size = size;    }    public String getPosition() {        return position;    }    public void setPosition(String position) {        this.position = position;    }        public String toString() {        return "The shoe color is: " + color + "; The shoe size is: " + size                + "; The shoe position is in " + position + " Area.";    }}

转载于:https://my.oschina.net/u/1412027/blog/194410

你可能感兴趣的文章
unsafe包
查看>>
(5keras自带的模型之间的关系)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署...
查看>>
poj-1007-DNA Sorting
查看>>
机器学习笔记——特征标准化
查看>>
基于海康监控的图像识别设计
查看>>
(2)Python索引和切片
查看>>
ACM-ICPC 常用算法刷题网站整理(转)
查看>>
实现一个通用的生产者消费者队列(c语言版本)
查看>>
Jodd 5.0.10 发布,OSC 上交口称赞的 Java 工具包
查看>>
MySQL5.7并行复制乱序提交引起的同步异常
查看>>
这个AI杀手真的很冷!人脸识别+空间定位即可秒杀所有人
查看>>
soffice help (LibreOffice)
查看>>
开发者论坛一周精粹(第四十二期) 晒代码千元话费送不停 免费证书
查看>>
留住人才,你需要强大的人才预测分析
查看>>
解决Chrome在隐身模式下无法播放Flash视频
查看>>
量子设备商业新用途:挖石油!
查看>>
MYSQL笔记
查看>>
Python中对list进行排序
查看>>
CentOS忘记root密码
查看>>
redis服务器及采集端设置
查看>>