`

2. 结构型模式 (7) 享元模式

阅读更多
2. 结构型模式 (7) 享元模式

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

享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。


1. 享元模式

package com.andrew.pattern0207.flyweight.model01;
public interface Shape {
    void draw();
}


package com.andrew.pattern0207.flyweight.model01;
public class Circle implements Shape {
    private String color;
    private int x;
    private int y;
    private int radius;
    public Circle(String color) {
        this.color = color;
    }
    public void setX(int x) {
        this.x = x;
    }
    public void setY(int y) {
        this.y = y;
    }
    public void setRadius(int radius) {
        this.radius = radius;
    }
    @Override
    public void draw() {
        System.out.println("Circle: Draw() [Color : " + color + ", x : " + x +", y :" + y +", radius :" + radius);
    }
}


package com.andrew.pattern0207.flyweight.model01;
import java.util.HashMap;
public class ShapeFactory {
    private static final HashMap<String, Shape> circleMap = new HashMap<>();
    public static Shape getCircle(String color) {
        Circle circle = (Circle) circleMap.get(color);
        if (circle == null) {
            circle = new Circle(color);
            circleMap.put(color, circle);
            System.out.println("Creating circle of color : " + color);
        }
        return circle;
    }
}


package com.andrew.pattern0207.flyweight.model01;
/**
 * 1. 享元模式
 * 
 * @author andrew
 * @date 2018/07/21
 */
public class Client {
    private static final String colors[] = {"Red", "Green", "Blue", "White", "Black"};
    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            Circle circle = (Circle) ShapeFactory.getCircle(getRandomColor());
            circle.setX(getRandomX());
            circle.setY(getRandomY());
            circle.setRadius(100);
            circle.draw();
        }
    }
    private static String getRandomColor() {
        return colors[(int)(Math.random()*colors.length)];
    }
    private static int getRandomX() {
        return (int)(Math.random()*100 );
    }
    private static int getRandomY() {
        return (int)(Math.random()*100);
    }
}
运行结果:
Creating circle of color : Green Circle: Draw() [Color : Green, x : 88, y :19, radius :100
Creating circle of color : Black Circle: Draw() [Color : Black, x : 6, y :6, radius :100
Creating circle of color : White Circle: Draw() [Color : White, x : 46, y :71, radius :100
Circle: Draw() [Color : Green, x : 60, y :31, radius :100
Circle: Draw() [Color : Green, x : 49, y :99, radius :100
Circle: Draw() [Color : Green, x : 73, y :98, radius :100
Circle: Draw() [Color : Green, x : 10, y :46, radius :100
Creating circle of color : Red Circle: Draw() [Color : Red, x : 32, y :15, radius :100
Circle: Draw() [Color : Red, x : 71, y :28, radius :100
Creating circle of color : Blue Circle: Draw() [Color : Blue, x : 3, y :23, radius :100
Circle: Draw() [Color : Green, x : 39, y :24, radius :100
Circle: Draw() [Color : Blue, x : 67, y :69, radius :100
Circle: Draw() [Color : Blue, x : 64, y :87, radius :100
Circle: Draw() [Color : Green, x : 70, y :42, radius :100
Circle: Draw() [Color : Black, x : 74, y :89, radius :100
Circle: Draw() [Color : Blue, x : 54, y :47, radius :100
Circle: Draw() [Color : White, x : 15, y :0, radius :100
Circle: Draw() [Color : Green, x : 10, y :22, radius :100
Circle: Draw() [Color : Black, x : 34, y :26, radius :100
Circle: Draw() [Color : Green, x : 93, y :98, radius :100
分享到:
评论

相关推荐

    软件设计模式实验2结构型模式源码

    电子商务网站常有这样的功能:发送消息通知,比如订货发货通知等,从业务上看,消息分为普通消息、加急消息和特急消息多种不同的消息类型,其业务处理是不一样的,比如加急消息是在消息上添加加急标记.....2....

    JAVA-设计模式-结构型模式-享元模式

    JAVA-设计模式-结构型模式-享元模式

    6.设计模式-享元模式1

    享元模式(Flyweight Pattern)是结构型模式的一种,主要用于减少大量相似对象的内存占用,提高系统的性能和效率。 模式定义 享元模式的定义是:运用共享技术有效地支持大量细粒度的对象。该模式将一个对象的状态...

    设计模式_结构型_享元模式.md

    享元模式(Flyweight)是23种设计模式之一,属于结构型设计模式。该模式通过共享技术,有效地支持大量细粒度对象的复用。享元模式的目的是为了减少创建对象的数量,以减少内存占用和提高性能。 ### 细粒度对象 享元...

    [结构型模式] 享元模式的理解

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,尤其是处理大量相似对象时,如图形渲染、文本处理等场景,享元模式显得尤为...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    c++设计模式-结构型模式-享元模式

    c++设计模式-结构型模式-享元模式;qt工程;c++简单源码; 享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类...

    java 23种设计模式.zip

    2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略...

    C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) (Level 300)

    享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...

    设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在处理大量对象时。在享元模式中,通过共享技术来有效支持大量细粒度的对象,从而减少内存消耗。《设计模式之禅》这本书是设计模式...

    设计模式的享元模式的例子

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...

    设计模式之结构型模式

    在本文中,我们将深入探讨结构型设计模式,特别是桥接模式、适配器模式、装饰者模式和组合模式,以及它们在实际场景中的应用。 1. **桥接模式**: 桥接模式将抽象部分与实现部分分离,使得它们可以独立进行变化。...

    23种设计模式 (创建型,结构型,行为型)

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern...

    C#面向对象设计模式纵横谈\12 结构型模式Flyweight享元模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第12节:结构型模式Flyweight享元模式

    设计模式-享元模式(讲解及其实现代码)

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...

    Java设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...

    设计模式2-结构型模式.doc

    在本文中,我们将探讨几种结构型设计模式,包括适配器模式、桥接模式、外观模式、享元模式、代理模式和装饰器模式。 1. **适配器模式**: - 适配器模式用于连接两个不兼容的接口,使得原本不能一起工作的类可以...

Global site tag (gtag.js) - Google Analytics