【GOF23设计模式】享元模式

来源:http://www.bjsxt.com/ 
一、【GOF23设计模式】_享元模式、享元池、内部状态、外部状态、线程池、连接池

【GOF23设计模式】享元模式

【GOF23设计模式】享元模式

【GOF23设计模式】享元模式

 package com.test.flyweight;
/**
* FlyWeight抽象享元类
*/
public interface ChessFlyWeight {
void setColor(String c);
String getColor();
void display(Coordinate c);
} /**
* ConcreteFlyWeight具体享元类
*/
class ConcreteChess implements ChessFlyWeight {
private String color; public ConcreteChess(String color) {
super();
this.color = color;
} @Override
public void setColor(String c) {
this.color = c;
} @Override
public String getColor() {
return color;
} @Override
public void display(Coordinate c) {
System.out.println("棋子颜色:"+color);
System.out.println("棋子位置:"+c.getX()+"------"+c.getY());
}
}
 package com.test.flyweight;
/**
* 外部状态UnSharedConcreteFlyWeight非共享享元类
*/
public class Coordinate {
private int x,y; public Coordinate(int x, int y) {
super();
this.x = x;
this.y = y;
} public int getX() {
return x;
} public void setX(int x) {
this.x = x;
} public int getY() {
return y;
} public void setY(int y) {
this.y = y;
}
}
package com.test.flyweight;

import java.util.HashMap;
import java.util.Map; /**
* 享元工厂类
*/
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 com.test.flyweight;

 public class Client {
public static void main(String[] args) {
ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色");
ChessFlyWeight chess2 = ChessFlyWeightFactory.getChess("黑色");
System.out.println(chess1);
System.out.println(chess2); System.out.println("增加外部状态的处理============");
chess1.display(new Coordinate(10,10));
chess2.display(new Coordinate(20,20));
}
}
控制台输出:
com.test.flyweight.ConcreteChess@1db9742
com.test.flyweight.ConcreteChess@1db9742
增加外部状态的处理============
棋子颜色:黑色
棋子位置:10------10
棋子颜色:黑色
棋子位置:20------20

【GOF23设计模式】享元模式

【GOF23设计模式】享元模式

【GOF23设计模式】享元模式

上一篇:JAVA设计模式 5【结构型】代理模式的理解与使用


下一篇:canvas应用——将方形图片处理为圆形