设计模式(3)――结构性模式 (九)

2014-11-24 02:43:10 · 作者: · 浏览: 15
ashtable flyweights = new Hashtable(); //哈希表

public FlyweightFactory()
{
flyweights.Add("X",new ConcreteFlyweight());
flyweights.Add("Y", new ConcreteFlyweight());
flyweights.Add("Z", new ConcreteFlyweight());

}
public Flyweight GetFlyweight(string key)
{
return ((Flyweight )flyweights[key]);
}
}
}
using System.Collections; //引用哈希表

namespace 享元模型
{
class Class1
{
static void Main(string[] args)
{
int extrinsicstate = 22;

FlyweightFactory f = new FlyweightFactory();

Flyweight fx = f.GetFlyweight("X");
fx.Operation(--extrinsicstate );

Flyweight fy = f.GetFlyweight("Y");
fy.Operation(--extrinsicstate );

Flyweight fz = f.GetFlyweight("Z");
fz.Operation(--extrinsicstate);

Flyweight uf = new UnsharedConcreteFlyweight();

uf.Operation(--extrinsicstate );

Console.Read();
}
}
abstract class Flyweight
{
//具体类和享元类的接口
public abstract void Operation(int extrinsicstate);
}
class ConcreteFlyweight : Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("具体Flyweight:"+extrinsicstate );
}
}
class UnsharedConcreteFlyweight : Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("不共享的具体Flyweight:" + extrinsicstate);
}
}

class FlyweightFactory //享元工厂
{
private Hashtable flyweights = new Hashtable(); //哈希表

public FlyweightFactory()
{
flyweights.Add("X",new ConcreteFlyweight());
flyweights.Add("Y", new ConcreteFlyweight());
flyweights.Add("Z", new ConcreteFlyweight());

}
public Flyweight GetFlyweight(string key)
{
return ((Flyweight )flyweights[key]);
}
}
}


11. 代理模式

为其他对象提供一种代理以控制对这个对象的访问。代理就是真实对象的代表。(例如代理别人去追一个女生)


UML图:

\


代码:

view plaincopy to clipboardprint namespace 代理模式
{
class Class2
{
static void Main(string[] args)
{
SchoolGirl jiaojiao = new SchoolGirl();
jiaojiao.Name = "李娇娇";

Proxy1 daili = new Proxy1(jiaojiao);

daili.GiveDolls();
daili.GiveFlowers();
daili.GiveChocolate();

Console.ReadLine();
}
}

interface IGiveGift //追求者(真实实体)和代理的接口,代理和真实实体有相同的功能
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
class Pursuit1 : IGiveGift //追求者(真实实体)
{
SchoolGirl mm;
public Pursuit1(SchoolGirl mm)
{
this.mm = mm;
}
public void GiveDolls()
{
Console.WriteLine(mm.Name +"送你洋娃娃");
}
public void GiveFlowers()
{
Console.WriteLine(mm.Name+"送你鲜花");
}
public void GiveChocolate()
{
Console.WriteLine(mm.Name +"送你巧克力");
}
}
class Proxy1 : IGiveGift //代理
{
Pursuit1 gg;
public Proxy1(SchoolGirl mm)
{