11.享元模式(蝇量模式)
运用共享技术有效的支持大量细粒度的对象,常用于系统底层的开发,像数据库连接池是单例模式但是连接池里的对象是享元模式的经典运用场景
享元模式能解决重复对象的内存浪费问题,当系统种有大量相似对象,需要缓冲池时,不需要总是创建新对象,可以从缓冲池里面拿,这样可以降低系统内存,同时提高效率
抽象类:
/** * @author wuyimin * @create 2021-07-27 11:10 * @description */ public abstract class Website { public abstract void use(); }
实现类
public class ConcreteWebsite extends Website { public ConcreteWebsite(String type) { this.type = type; } public String getType() { return type; } public void setType(String type) { this.type = type; } private String type; @Override public void use() { System.out.println("目前使用的网站类型为"+type); } }
工厂类和主方法
public class WebsiteFactory { private ConcreteWebsite concreteWebsite; HashMap<String,ConcreteWebsite> pool=new HashMap<String,ConcreteWebsite>(); public Website setUsing(String type){ if(!pool.containsKey(type)){ pool.put(type,new ConcreteWebsite(type)); } return (Website)pool.get(type); } public void getNum(){ System.out.println("总数为"+pool.size()); } public static void main(String[] args) { WebsiteFactory factory=new WebsiteFactory(); Website website = factory.setUsing("新闻"); website.use(); Website website1 = factory.setUsing("博客"); website1.use(); Website website2 = factory.setUsing("新闻"); website2.use(); Website website3 = factory.setUsing("新闻"); website3.use(); factory.getNum(); } }
总结:只要内容相同就可以使用享元模式,比如五子棋,每个棋子的属性相同只是位置不同而已