1. 程式人生 > 實用技巧 >20、FlyWeight 享元模式

20、FlyWeight 享元模式

1Flyweight

使

使 12345

使 12

2

使

IgoChessmanBlackIgoChessmanWhiteIgoChessmanIgoChessmanFactory

importjava.util.*;

//
abstractclassIgoChessman{
publicabstractStringgetColor();

publicvoiddisplay(){
System.out.println(""+this.getColor());
}
}

//
classBlackIgoChessmanextendsIgoChessman{
publicStringgetColor(){
return"";
}
}

//
classWhiteIgoChessmanextendsIgoChessman{
publicStringgetColor(){
return"";
}
}

//使
classIgoChessmanFactory{
privatestaticIgoChessmanFactoryinstance=newIgoChessmanFactory();
privatestaticHashtableht;//使Hashtable

privateIgoChessmanFactory(){
ht=newHashtable();
IgoChessmanblack,white;
black=newBlackIgoChessman();
ht.put("b",black);
white=newWhiteIgoChessman();
ht.put("w",white);
}

//
publicstaticIgoChessmanFactorygetInstance(){
returninstance;
}

//keyHashtable
publicstaticIgoChessmangetIgoChessman(Stringcolor){
return(IgoChessman)ht.get(color);
}
}

classClient{
publicstaticvoidmain(Stringargs[]){
IgoChessmanblack1,black2,black3,white1,white2;
IgoChessmanFactoryfactory;

//
factory=IgoChessmanFactory.getInstance();

//
black1=factory.getIgoChessman("b");
black2=factory.getIgoChessman("b");
black3=factory.getIgoChessman("b");
System.out.println(""+(black1==black2));

//
white1=factory.getIgoChessman("w");
white2=factory.getIgoChessman("w");
System.out.println(""+(white1==white2));

//
black1.display();
black2.display();
black3.display();
white1.display();
white2.display();
}
}

true
true




使

CoordinatesIgoChessmandisplay()CoordinatesCoordinatesIgoChessman

//
classCoordinates{
privateintx;
privateinty;

publicCoordinates(intx,inty){
this.x=x;
this.y=y;
}

publicintgetX(){
returnthis.x;
}

publicvoidsetX(intx){
this.x=x;
}

publicintgetY(){
returnthis.y;
}

publicvoidsetY(inty){
this.y=y;
}
}

//
abstractclassIgoChessman{
publicabstractStringgetColor();

publicvoiddisplay(Coordinatescoord){
System.out.println(""+this.getColor()+""+coord.getX()+""+coord.getY());
}
}

classClient{
publicstaticvoidmain(Stringargs[]){
IgoChessmanblack1,black2,black3,white1,white2;
IgoChessmanFactoryfactory;

//
factory=IgoChessmanFactory.getInstance();

//
black1=factory.getIgoChessman("b");
black2=factory.getIgoChessman("b");
black3=factory.getIgoChessman("b");
System.out.println(""+(black1==black2));

//
white1=factory.getIgoChessman("w");
white2=factory.getIgoChessman("w");
System.out.println(""+(white1==white2));

//
black1.display(newCoordinates(1,2));
black2.display(newCoordinates(3,4));
black3.display(newCoordinates(1,3));
white1.display(newCoordinates(2,5));
white2.display(newCoordinates(2,4));
}
}

true
true
12
34
13
25
24

調display()

3flyweight

Flyweight ()FlyweightBigChar

FlyweightFactory ()FlyweightFactoryFlyweightFlyweightBigCharFactory

Client ()Client使FlyweightFactoryFlyweightBigString

4

使

(1)

(2)

(3) 使使使

使

(1)

(2)

(3) 使使使

公眾號發哥講

這是一個稍偏基礎和偏技術的公眾號,甚至其中包括一些可能閱讀量很低的包含程式碼的技術文,不知道你是不是喜歡,期待你的關注。

如果你覺得文章還不錯,就請點選右上角選擇傳送給朋友或者轉發到朋友圈~

● 掃碼關注我們

據說看到好文章不推薦的人,伺服器容易宕機!

本文版權歸發哥講部落格園共有,原創文章,未經允許不得轉載,否則保留追究法律責任的權利。