享元模式是对象池的一种实现,用来尽可能减少内存使用量,
使用共享对象存在大量的相似对象
1.系统中存在大量的相似对象
2.细微粒的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定状态
3.需要缓冲池的场景
实战
创建一个接口展示车票新的的函数
public interface Ticket { public void showTicket(String bunk); } 写一个具体类
public class TrainTicket implements Ticket { public String from; public String to; public String bunk; public int price; public TrainTicket(String from, String to) { this.from = from; this.to = to; } @Override public void showTicket(String bunk) { price = new Random().nextInt(300); } }享元模式工厂
public class TrainTicketFactory { static Map<String, Ticket> sTicketMap = new ConcurrentHashMap<>(); public static Ticket getTicket(String from, String to) { String key = from + "-" + to; if (sTicketMap.containsKey(key)) { System.out.print("使用缓存"); return sTicketMap.get(key); } else { System.out.print("创建对象"); Ticket ticket = new TrainTicket(from, to); sTicketMap.put(key, ticket); return ticket; } } }总结:
它可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能,但它同事提高了系统的复杂性,需要分离出外部状态和内部状态,而且外包状态具有固话特性,不应该随内部状态改变而改变,否则导致系统的逻辑混乱。
优点:
1.大幅度的降低内存中对象的数量
缺点:
1.使系统更加复杂