设计模式学习笔记--享元模式

 1 using System;
 2
 3 namespace FlyWeight
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/2 7:21:28
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// FlyWeight说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public abstract class FlyWeight
12     {
13         public abstract void Operation(int extrinsticstate);
14     }
15 }

 1 using System;
 2
 3 namespace FlyWeight
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/2 7:23:28
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// ConcreteFlyWeight说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class ConcreteFlyWeight : FlyWeight
12     {
13         public override void Operation(int extrinsticstate)
14         {
15             Console.WriteLine("具体FlyWeight:" + extrinsticstate);
16         }
17     }
18 }

 1 using System;
 2
 3 namespace FlyWeight
 4 {
 5     /// <summary>
 6     /// 作者:bzyzhang
 7     /// 时间:2016/6/2 7:25:00
 8     /// 博客地址:http://www.cnblogs.com/bzyzhang/
 9     /// UnsharedConcreteFlyWeight说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
10     /// </summary>
11     public class UnsharedConcreteFlyWeight:FlyWeight
12     {
13         public override void Operation(int extrinsticstate)
14         {
15             Console.WriteLine("不共享的具体FlyWeight:" + extrinsticstate);
16         }
17     }
18 }

 1 using System;
 2 using System.Collections;
 3
 4 namespace FlyWeight
 5 {
 6     /// <summary>
 7     /// 作者:bzyzhang
 8     /// 时间:2016/6/2 7:25:54
 9     /// 博客地址:http://www.cnblogs.com/bzyzhang/
10     /// FlyWeightFactory说明:本代码版权归bzyzhang所有,使用时必须带上bzyzhang博客地址
11     /// </summary>
12     public class FlyWeightFactory
13     {
14         private Hashtable flyWeights = new Hashtable();
15
16         public FlyWeightFactory()
17         {
18             flyWeights.Add("X",new ConcreteFlyWeight());
19             flyWeights.Add("Y", new ConcreteFlyWeight());
20             flyWeights.Add("Z", new ConcreteFlyWeight());
21         }
22
23         public FlyWeight GetFlyWeight(string key)
24         {
25             return (FlyWeight)flyWeights[key];
26         }
27     }
28 }

 1 namespace FlyWeight
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             int extrinsicstate = 22;
 8
 9             FlyWeightFactory flyWeightFactory = new FlyWeightFactory();
10
11             FlyWeight flyWeightX = flyWeightFactory.GetFlyWeight("X");
12             flyWeightX.Operation(--extrinsicstate);
13
14             FlyWeight flyWeightY = flyWeightFactory.GetFlyWeight("Y");
15             flyWeightY.Operation(--extrinsicstate);
16
17             FlyWeight flyWeightZ = flyWeightFactory.GetFlyWeight("Z");
18             flyWeightZ.Operation(--extrinsicstate);
19
20             FlyWeight uf = new UnsharedConcreteFlyWeight();
21             uf.Operation(--extrinsicstate);
22         }
23     }
24 }

时间: 2024-10-07 20:38:27

设计模式学习笔记--享元模式的相关文章

23种设计模式学习之享元模式

典型:各种连接池 public class ConnectionPool { private Vector<Connection> pool; /*公有属性*/ private String url = "jdbc:mysql://localhost:3306/test"; private String username = "root"; private String password = "root"; private Strin

设计模式 笔记 享元模式 Flyweight

//---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1:意图: 运用共享技术有效地支持大量细粒度的对象. 2:动机: 3:适用性: 以下条件都成立时才能使用. 1>一个应用程序使用了大量的对象. 2>完全由于使用大量的对象,造成很大的存储开销. 3>对象的大多数状态都可变为外部状态. 4>如果删除对象的外部状态,那么可以用相对较少的共享对

设计模式学习笔记--备忘录(Mamento)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--状态(State)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--迭代(Iterator)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--访问者(Visitor)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

大话设计模式Python实现- 享元模式

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式--享元模式 8 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象 9 对一个类进行的实例,只在第一次使用时建立,其他时候是用同一个

java设计模式 GOF23 11 享元模式

一.享元模式简介 如果有很多相同或者相似的对象可以使用享元模式,从而节约内存. 二.关键点 享元对象需要区分内部状态和外部状态. 内部状态:可以共享,不会随着外部状态改变. 外部状态:不可以共享,随外部状态改变. 享元共享类实现享元池管理享元对象. 三.简单实现 package com.lz.flyWeight; /* * 享元模式 * 内部状态 * 模拟棋盘,因为一盘棋其中棋子的颜色都一样 * 只有位置不一样,所以可以将颜色共享,这样可以节省内存空间 * 棋盘接口 */ interface C

Java设计模式之《享元模式》及应用场景

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6542449.html 享元模式:"享"就是分享之意,指一物被众人共享,而这也正是该模式的终旨所在. 享元模式有点类似于单例模式,都是只生成一个对象来被共享使用.这里有个问题,那就是对共享对象的修改,为了避免出现这种情况,我们将这些对象的公共部分,或者说是不变化的部分抽取出来形成一个对象.这个对象就可以避免到修改的问题. 享元的目的是为了减少不会要额内存消耗,将多个对同一对象的访