享元模式

来源:互联网 发布:如何拍好淘宝产品照片 编辑:程序博客网 时间:2024/06/05 08:54








package flyweight;/*** * 享元类 * @author zw * */public interface ChessFlyWeight {void setColor(String color);String getColor();void display(Coordinate c);}class ConcreteChess implements ChessFlyWeight{private String color;public ConcreteChess(String color) {super();this.color = color;}@Overridepublic void setColor(String color) {this.color = color;}@Overridepublic String getColor() {// TODO Auto-generated method stubreturn color;}@Overridepublic void display(Coordinate c) {System.out.println("棋子颜色:"+this.color);System.out.println("棋子位置:("+c.getX()+","+c.getY()+")");}}

package flyweight;/*** * 外部状态 *  * 棋子的位置 * @author zw * */public class Coordinate {private double x,y;public Coordinate(double x, double y) {super();this.x = x;this.y = y;}public double getX() {return x;}public void setX(double x) {this.x = x;}public double getY() {return y;}public void setY(double y) {this.y = y;}public Coordinate() {super();}}

package flyweight;import java.util.HashMap;import java.util.Map;/*** * 享元工厂 * @author zw * */public class ChessFlyWeightFactory {//享元池private static Map<String,ChessFlyWeight> map = new HashMap<String,ChessFlyWeight>();public static ChessFlyWeight getChess(String color) {if(map.get(color)!=null) {return map.get(color);}else {ChessFlyWeight cfw =new ConcreteChess(color);map.put(color, cfw);return cfw;}}}


package flyweight;public class Client {public static void main(String[] args) {ChessFlyWeight cf1 = ChessFlyWeightFactory.getChess("黑色");ChessFlyWeight cf2 = ChessFlyWeightFactory.getChess("白色");ChessFlyWeight cf3 = ChessFlyWeightFactory.getChess("白色");System.out.println(cf1);System.out.println(cf2);System.out.println(cf3);System.out.println("增加外部状态处理########");cf1.display(new Coordinate(10,10));cf2.display(new Coordinate(20,10));}}