网站类
public class WebSite{
private String name="";
public WebSite(String name)
{
this.name=name;
}
public void Use()
{
System.out.println("网站分类:"+name);
}
}
客户端代码
public class Program{
public static void main(String[] args){
WebSite fx = new WebSite("产品展示"); fx.Use();
WebSite fy = new WebSite("产品展示"); fy.Use();
WebSite fz = new WebSite("产品展示"); fz.Use();
WebSite fl = new WebSite("博客"); fl.Use();
WebSite fm = new WebSite("博客"); fm.Use();
WebSite fn = new WebSite("博客"); fn.Use();
}
}
public abstract class Flyweight{
public String intrinsic;//内部状态
protected final String extrinsic;//外部状态
//要求享元角色必须接受外部状态
public Flyweight(String extrinsic){
this.extrinsic = extrinsic;
}
public abstract void operate(int extrinsic);//定义业务操作
public String getIntrinsic(){
return intrinsic;
}
public void setIntrinsic(String intrinsic){
this.intrinsic = intrinsic;
}
}
//ConcreteFlyweight继承Flyweight超类或实现Flyweight接口,并为内部状态增加存储空间。
public class CincreteFlyweight extends Flyweight{
//接受外部状态
public ConcreteFlyweight(String extrinsic){
super(extrinsic);
}
//根据外部状态进行逻辑处理
public void operate(int extrinsic){
System.out.println("具体Flyweight:"+extrinsic);
}
}
//UnsharedConcreteFlyweight是指那些不需要共享的Flyweight子类。因为Flyweight接口使共享成为可能,但它并不强制共享。
public class UnsharedConcreteFlyweight extends Flyweight{
public UnsharedConcreteFlyweight(String extrinsic){
super(extrinsic);
}
public void operate(int extrinsic){
System.out.println("不共享的具体Flyweight:"+extrinsic);
}
}
//FlyweightFactory,是一个享元工厂,用来创建并管理Flyweight对象。它主要用来确保合理地共享Flyweight。当用户请求一个Flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)。
import java.util.HashMap;
public class FlyweightFactory{
//定义一个池容器
private static HashMap<String,Flyweight>pool = new HashMap<String,Flyweight>();
//享元工厂
public static Flyweight getFlyweight(String extrinsic){
Flyweight flyweight = null;
if(pool.containsKey(extrinsic)){//池中有该对象
flyweight = pool.get(extrinsic);
System.out.print("已有"+extrinsic+"直接从池中取--->");
}else{ //根据外部状态创建享元对象
flyweight = new ConcreteFlyweight(extrinsic);
pool.put(extrinsic,flyweight);//放入池中
System.out.print("创建"+extrinsic+"并从池中取出--->");
}
return flyweight;
}
}
//客户端代码
public class Client{
public static void main(String[] args){
int extrinsic = 22;
FlyweightFactory f = new FlyweightFactory();
Flyweight flyweightX = f.getFlyweight("X");
flyweightX.operate(--extrinsic);
Flyweight flyweightY = f.getFlyweight("Y");
flyweightY.operate(--extrinsic);
Flyweight flyweightZ = f.getFlyweight("Z");
flyweightZ.operate(--extrinsic);
Flyweight flyweightReX = f.getFlyweight("X");
flyweightReX.operate(--extrinsic);
Flyweight unsharedFlyweight = new UnsharedConcreteFlyweight("X");
unsharedFlyweight.operate(--extrinsic);
}
}
亨元模式从最初代码的一步步实现
最新推荐文章于 2021-08-19 08:31:11 发布