WebSite.java
package com.godv.flyweight;
public abstract class WebSite {
//外部状态方法
public abstract void use(User user);
}
ConcreteWebSite.java
package com.godv.flyweight;
public class ConcreteWebSite extends WebSite {
// 共享的部分,内部状态map的key
private String type = "";
// 构造器
public ConcreteWebSite(String type) {
this.type = type;
}
@Override
public void use(User user) {
// TODO Auto-generated method stub
System.out.println("type :" + type + "User:" + user.getName());
}
}
User.java
package com.godv.flyweight;
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
WebSiteFactory.java
package com.godv.flyweight;
import java.util.HashMap;
public class WebSiteFactory {
// 集合, 充当池的作用
private HashMap<String, ConcreteWebSite> pool = new HashMap<>();
public WebSite getWebSiteCategory(String type) {
if (!pool.containsKey(type)) {
// 池中不包含则创建新的对象,并放入到池中
pool.put(type, new ConcreteWebSite(type));
}
//包含直接返回
return pool.get(type);
}
//获取池中的连接数
public int getWebSiteCount() {
return pool.size();
}
}
Client.java
package com.godv.flyweight;
public class Client {
public static void main(String[] args) {
WebSiteFactory factory = new WebSiteFactory();
WebSite webSite1 = factory.getWebSiteCategory("IDLE");
webSite1.use(new User("tom"));
WebSite webSite2 = factory.getWebSiteCategory("PLAY");
webSite2.use(new User("jack"));
WebSite webSite3 = factory.getWebSiteCategory("PLAY");
webSite3.use(new User("smith"));
WebSite webSite4 = factory.getWebSiteCategory("PLAY");
webSite4.use(new User("king"));
System.out.println("分类共=" + factory.getWebSiteCount());
}
}