zoukankan      html  css  js  c++  java
  • 基于设计模式的学习之旅享元模式(附源码)

            基于设计模式的学习之旅-----享元模式

    1、 初始享元模式

    大家知道围棋是啥样子的,一个棋盘,其他的是黑白色的棋子各一盒两队手PK手执一色棋,每人一步,轮流放置到棋盘不同的坐标上。

    要求大家用程序设计出一套这样的游戏,考虑如何设计比较好。

    方案1棋子的类,里面有所有属性,颜色,位置坐标等。每次放置棋子到棋盘的时候new出一对象。

    方案2:分析棋子的特性,发现:棋子颜色只有两种(黑白棋子位置一直在动态变化之中。将颜色定义为固有属性,将位置坐标定义为外部属性。通过一个工厂,内部有个集合存储两种棋子(黑白每次放置棋子到棋盘的时候从工厂中拿到对象,然后将动态坐标通过关联方式加载棋子中。

    第一种方案:棋子对象将无休止新增

    第二种方案:棋子对象只存在2

    2、 什么是享元模式

    运用共享技术有效地支持大量细粒度的对象。

    3、 模式结构图

    4模式代码事例

    41涉及到的类,以及类图

    ChessFlyWeightFactory

    ConcreteChessFlyWeight

    IChessFlyWeight

    Point

    PatternRun

    42具体的代码实现

    43事例输出结果

    5、模式参与者

    F l y w e i g h tIChessFlyWeight

    C o n c r e t e F l y w e i g hConcreteChessFlyWeight 

    U n s h a r e d C o n c r e t e F l y w e i g h t

    F l y w e i g h t F a c t o r yChessFlyWeightFactory

    OutAttributePoint

    6模式优缺点

    A、可以避免大量相似类的开销,从而节省内存空间

    B、统一管理相似类的共性,有利于维护

    C通过区分内部外部状态来处理特殊的需求

    7模式适用性

    A一个应用程序使用了大量的对象

    B完全由于使用大量的对象,造成很大的存储开销

    C对象的大多数状态都可变为外部状态

    D、如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象

    E、应用程序不依赖于对象标识。由于F l y w e i g h t对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值

    点击下载“文档以及源码下载

    欢迎转载,请注明出处“http://www.cnblogs.com/luxiaofeng54/archive/2013/04/06/3002649.html

  • 相关阅读:
    9.算术运算符
    7.字符串格式化
    下载和配置JDK
    Set-常用API及详解
    List-ApI及详解
    电路交换、报文交换、分组交换比较
    集合之List—ArrayList
    java的getClass()函数
    Object类、包装类、内部类详解
    接口的探究
  • 原文地址:https://www.cnblogs.com/luxiaofeng54/p/3002649.html
Copyright © 2011-2022 走看看