importjava.util.ArrayList;enumPieceColor{BLACK,WHITE}// 棋子颜色classPiecePods{// 棋子位置privateintx;privateinty;publicPiecePods(inta,intb){x=a;y=b;}publicintgetX(){returnx;}publicintgetY(){returny;}}abstractclassPiece{// 棋子定义protectedPieceColorm_color;// 颜色protectedPiecePodsm_pos;// 位置publicPiece(PieceColorcolor,PiecePodspos){this.m_color=color;this.m_pos=pos;}publicabstractvoiddraw();}classBlackPieceextendsPiece{publicBlackPiece(PieceColorcolor,PiecePodspos){super(color,pos);}@Overridepublicvoiddraw(){System.out.println("Draw a black piece");}}classWhitePieceextendsPiece{publicWhitePiece(PieceColorcolor,PiecePodspos){super(color,pos);}@Overridepublicvoiddraw(){System.out.println("Draw a white piece");}}classPieceBoard{// 棋盘上已有的棋子privatestaticfinalArrayList<Piece>m_arrayPiece=newArrayList<>();privateStringm_blackName;// 黑方名称privateStringm_whiteName;// 白方名称publicPieceBoard(Stringblack,Stringwhite){m_blackName=black;m_whiteName=white;}// 一步棋,在棋盘上放一颗棋子publicvoidsetPiece(PieceColorcolor,PiecePodspos){Piecepiece=null;if(color==PieceColor.BLACK){// 放黑子piece=newBlackPiece(color,pos);System.out.println(m_blackName+pos.getX()+pos.getY());piece.draw();}else{// 放白子piece=newWhitePiece(color,pos);System.out.println(m_whiteName+pos.getX()+pos.getY());piece.draw();}m_arrayPiece.add(piece);}}
importjava.util.HashMap;importjava.util.Map;importjava.util.Random;publicclassFlyWeightPattern{publicstaticvoidmain(String[]args){ShapeFactorysf=newShapeFactory();Randomr=newRandom();String[]colors={"red","blue","green","white","black"};for(inti=0;i<10;i++){intx=r.nextInt(colors.length);Shapes=sf.getShape(colors[x]);s.draw(r.nextInt(2023),r.nextInt(527));}}}classShapeFactory{privateMap<String,Shape>map=newHashMap<>();publicShapegetShape(Stringkey){if(!map.containsKey(key)){map.put(key,newCircle(key));System.out.println("create new circle, color: "+key);}returnmap.get(key);}}abstractclassShape{protectedStringcolor;publicabstractvoiddraw(intx,inty);}classCircleextendsShape{publicCircle(Stringcolor){this.color=color;}@Overridepublicvoiddraw(intx,inty){System.out.println("draw a "+this.color+" circle x: "+x+" y: "+y);}}