简单享元模式
/**
* 享元抽象角色
*/
public interface Plant {
//为这个共享函数创建抽象的享元
public void display(int x,int y,int age);
}
-------------------------------------------------
//具体享元类。 display(int x, int y, int age)是内部状态
public class Grass implements Plant {
@Override
public void display(int x, int y, int age) {
//对传进来的外部状态进行处理。
}
}
public class Tree implements Plant {
@Override
public void display(int x, int y, int age) {
//处理传递进来的外部状态
}
}
--------------------------------------------------------
//非享元类。里面是随着外部信息变化的外部状态
public class TreeSpeciality {
//x坐标
private int x;
//y坐标
private int y;
//年龄
private int age;
//类型。是种树还是中草
private int type;
public TreeSpeciality(int x, int y, int age,int type) {
super();
this.x = x;
this.y = y;
this.age = age;
this.type = type;
}
public TreeSpeciality() {
super();
// TODO Auto-generated constructor stub
}
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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String toString() {
return "TreeSpeciality [x=" + x + ", y=" + y + ", age=" + age + ", type=" + type + "]";
}
}
----------------------------------------------------
//享元工厂类
public class FlyweigthFactory {
//池用于存放享元对象,如果Map中有就不再创建
private Map<Integer,Plant> pool;
public FlyweigthFactory() {
pool = new HashMap<Integer,Plant>();
}
//根据外部条件创建相应的享元对象。享元对象可以有多个。
public Plant getPlant(int external) {
if(!pool.containsKey(external)) {
switch(external) {
case 0 :
pool.put(0, new Tree());
break;
case 1 :
pool.put(1, new Grass());
break;
}
}
return (Plant)pool.get(external);
}
}
简单享元模式代码
最新推荐文章于 2023-01-29 12:20:29 发布