首页 > 其他分享 >设计模式FlyWeight 享元模式

设计模式FlyWeight 享元模式

时间:2024-08-27 16:36:29浏览次数:8  
标签:享元 color int radius FlyWeight 100 Circle 设计模式 circle

Flyweight模式的核心思想是将对象的可共享部分抽取出来,以避免重复创建相同内容的对象。换句话说,Flyweight模式允许多个对象共享相同的数据来节省内存。

 

示例代码

java import java.util.HashMap; import java.util.Map; // Flyweight接口 interface Shape { void draw(); } // 具体的Flyweight类 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("Drawing Circle [Color : " + color + ", x : " + x + ", y :" + y + ", radius :" + radius + "]"); } } // Flyweight工厂类 class ShapeFactory { private static final Map<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; } } // 客户端代码 public class FlyweightPatternDemo { 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); } }

代码说明:

  1. Shape接口:定义了draw方法,所有的具体形状类都需要实现这个接口。

  2. Circle类:这是具体的Flyweight类,实现了Shape接口。color是共享的内部状态,xyradius是外部状态,不能被共享,每次绘制时都会设置这些值。

  3. ShapeFactory类:这是Flyweight工厂类,它通过维护一个Map来存储已经创建的Circle对象。通过颜色来查找已经存在的Circle对象,如果没有找到则创建一个新的Circle对象并添加到Map中。

  4. FlyweightPatternDemo类:客户端代码演示了如何使用ShapeFactory来获取共享的Circle对象,并设置外部状态来绘制不同的圆形。

输出示例:

plaintext Creating circle of color : Green Drawing Circle [Color : Green, x : 49, y :50, radius :100] Creating circle of color : Red Drawing Circle [Color : Red, x : 36, y :85, radius :100] Creating circle of color : Blue Drawing Circle [Color : Blue, x : 18, y :14, radius :100] Creating circle of color : White Drawing Circle [Color : White, x : 54, y :92, radius :100] Creating circle of color : Black Drawing Circle [Color : Black, x : 28, y :70, radius :100] Drawing Circle [Color : Green, x : 78, y :26, radius :100] Drawing Circle [Color : Red, x : 37, y :15, radius :100] ...

在这个示例中,通过共享相同颜色的圆形对象,可以避免重复创建相同颜色的Circle对象,从而节省内存。

标签:享元,color,int,radius,FlyWeight,100,Circle,设计模式,circle
From: https://www.cnblogs.com/spicy-food/p/18383015

相关文章

  • 设计模式 bridge & decorator
     目的Decorator模式:用于动态地给对象添加新的功能,而不改变其结构。它通过将对象放入一个装饰器类中,在运行时为对象添加额外的行为。这种模式通常用于需要对类的功能进行组合或扩展的场景。Bridge模式:用于将抽象部分与其实现部分分离,以便它们可以独立地变化。桥接模式的......
  • 设计模式--适配器模式
    适配器模式适配器模式(AdapterPattern)是一种结构型设计模式,它允许一个接口(通常是新的或现有的)与另一个不兼容的接口一起工作。适配器模式主要用于解决接口不匹配的问题,让原本由于接口不兼容而不能一起工作的类可以一起工作。下面,我将通过一个简单的例子来展示适配器模式的......
  • 【Kotlin设计模式】Kotlin实现外观模式
    前言外观模式(FacadePattern)是一种结构型设计模式,旨在为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口,使得这一子系统更加容易使用。它将复杂的子系统封装在一个简单的接口后面,从而降低了客户端的复杂性。实现我们以银行APP业务举个例子,其中包......
  • 行为型设计模式-模板方法(template method)模式
    通俗示例想象一下你正在制作一杯咖啡,制作咖啡的步骤大致相同,但有些步骤可以根据个人口味进行调整,比如选择咖啡豆、添加糖和奶等。在这种情况下,可以定义一个“制作咖啡”的模板,它规定了制作咖啡的基本步骤,但将某些步骤的具体实现留给子类完成。这就是模板方法模式的一个例子......
  • C++ 设计模式——享元模式
    C++设计模式——享元模式C++设计模式——享元模式1.主要组成成分2.享元模式内部状态3.享元模式外部状态4.逐步构建享元模式4.1抽象享元类定义4.2具体享元类实现4.3享元工厂类实现4.4主函数5.享元模式UML图享元模式UML图解析6.享元模式的优点7.享元模......
  • 设计模式基础
    1.面向对象设计的原则(七大原则)1.1单一职责(SPR:SingleResponsibilitiesPrinciple):一个类应只负责一个功能领域的相关职责,即只有一个使它变化的原因1.2开放闭合(OCP:Open-ClosePrinciple):软件实体应对扩展开发,对修改关闭,即实体可以扩展,但不能在原来的实体上修改1.3里氏代换(LSP:......
  • 设计模式2个黄鹂鸣翠柳-《分析模式》漫谈23
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集“AnalysisPatterns”的第一章有这么一句:The"GangofFour"bookhashadmuchmoreinfluenceinsoftwarepatternsthanAlexander'swork,and three outofthose four auth......
  • C++学习随笔——简单的单例设计模式实例
    点击查看代码#include<iostream>classSingleton{private://私有化构造函数,防止外部实例化Singleton(){std::cout<<"SingletonInstanceCreated!"<<std::endl;}//删除拷贝构造函数和赋值运算符,防止拷贝实例Singleton(constSin......
  • 第四章:行为型模式(11种)《Java设计模式宝典:从入门到精通》
      在进入第四章之前,我为大家准备了设计模式专栏的快速访问链接,方便大家随时查阅:《Java设计模式宝典:从入门到精通》专栏目录地址,点击我即可快速访问到所有设计模式的章节,不漏掉一处学习的知识 [点赞]等会儿兄弟们,这篇文章的干货真的是满满的!......
  • 【设计模式基础版】观察者模式
    观察者模式(ObserverPattern)是一种**行为型设计模式**,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者(观察者)都会收到通知并自动更新。观察者模式常用于需要自动通知多个对象状态变化的场景,例如事件处理系统、订阅-发布系统等。所以也被称作“发布-订......