首页 > 编程知识 正文

原型模式和享元模式区别,双层优化模型

时间:2023-05-06 03:28:32 阅读:167759 作者:2544

0. 前言

刚开始写的,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再复习理论介绍。 那时,你就知道我在重点上做了红色的标记。 对帮助理解设计模式有不可思议的效果哦。 正文的原件请转载出处为SEU_Calvin的博客。

春天买火车票是件疯狂的事,同一时刻大量的查票请求涌向服务器,服务器必须做出响应才能满足我们的购票需求。 请考虑一下这些要求包含很多重复。 例如,从a地到b地的车票的情况。 如果每次都重复创建查询结果的对象,GC的任务会非常繁重,会影响性能。 这是用于我们的享受模式。 当然也有不重复的请求。 例如,我想买从a地到b地的高铁票,想买从a地到b地的移动车票。

http://www.Sina.com/http://www.Sina.com /

享受元模式的定义:

享元模式通过共享方式有效地支持大量细粒度的对象。 在享元模式下只有内部状态(不随环境变化)可以共享,春运的例子中具体表示a地到b地,根据外部状态)环境变化)表示不能共享,在例子中是顾客想购买a地到b地的高铁票,还是购买移动票

元模式使用场景:

当需要在一个APP应用程序中创建大量类似对象,并且需要用对象缓冲池时。

享受源模式包含的角色:

(1)抽象享受源Flyweight类)享受源对象抽象基类或接口。

)2)具体享受元ConcreteFlyweight类)实现抽象享受元类。

)3)享元工厂的FlyweightFactory类)享元模式的核心模块负责管理享元连接池,创建享元对象,保证享元对象被系统恰当共享。 当客户端对象调用共享源对象时,共享源工厂角色会检查系统中是否已经存在满足请求的共享源对象,如果已经存在,则共享源工厂角色会提供现有的共享源对象。 如果没有的话就制作一个。

http://www.Sina.com/http://www.Sina.com /

在上面所示的角色类中,试着实现文章开始时的例子吧。 代码也很简单:

/**@SEU_Calvin*@2016/12/31*///抽象享受基类public interface Ticket{ //显示运费,参数为列车类型publicvoidshowprice (strinstring //具体为元类publicclassconcreteticketimplementsticket { string from; 字符串到; publicconcreteticket (string from,String to ) { this.from=from; this.to=to; } @ overridepublicvoidshowprice (string type ) if ) type.equals )“Gaotie”) { System.out.println“从” }//享元厂系publicclassticketfactory { staticmapstring,ticket map=newconcurrenthashmapstring,ticket (; publicstaticticketgetticket (string from,String to ) ) { String key=from to; 映射内容密钥(key ) ({ System.out.println ) (使用缓存查询)密钥); returnmap.get(key; }else{ System.out.println ('创建对象查询' key ); ticket ticket=newconcreteticket (from,to ); map.put(key,ticket ); 返回主题; }//使用时TicketFactory. getTicket (南京)、杭州) ).showprice ) Gaotie ); TicketFactory. getTicket (南京)、杭州) )、showprice )、dongche );

从上面的代码中可以看出,我们避免了创建与利用Map大量查询南京到杭州的列车信息相关的ConcreteTicket实例对象,避免了频繁的GC的产生。 从输出结果中还可以看到,第二次查询是从缓存中获得的ConcreteTicket对象。 在本例中,内部状态为南京至杭州,外部状态为列车类型和价格,价格随列车类型而变化。

JDK中String类的相关属性也符合享元模式的实现原则,这与常量池的概念有关。 具体内容已经在从JVM的角度比较equals和==的差异的文章中进行了介绍,感兴趣的学生请参考。

http://www.Sina.com/http://www.Sina.com /

元模式的优点:

元模式可以大大减少内存中的对象数量,从而提高程序性能。

享受元模式的缺点:

)1)为了能够共享对象,需要将几种状态外部化,从而使程序的逻辑复杂化。

)2)享受元模式需要额外的维护缓存池。

转载于:https://www.cn blogs.com/qitian1/p/6461448.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。