博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式17---享元模式
阅读量:4971 次
发布时间:2019-06-12

本文共 1930 字,大约阅读时间需要 6 分钟。

1.客户需要做网站,有很多客户,每个需求细节不同,但是主体框架类似,并且如何有很多客户的话,将会照成

大量的资源浪费,所以,把相同的部分进行共享,通过ID的方式来加以区别不同的部分。

2.UML

Flyweight定义了共享的部分,ConcreateFlyweight定义了内部状态,或者说相同的部分。

UnsharedFlyWeight 定义了外部状态,不同的部分。

3.code:

public abstract class WebSite {    public abstract void Use(User user);}
package com.jayfulmath.designpattern.flyweight;import java.util.Hashtable;public class WebSiteFactory {    private Hashtable
mTable = new Hashtable<>(); public WebSite getWebSiteCategory(String key) { if(!mTable.contains(key)) { mTable.put(key, new ConcreateWebSite(key)); } return mTable.get(key); } public int getWebsiteCount() { return mTable.size(); }}
package com.jayfulmath.designpattern.flyweight;public class User {    String  name;    public User(String name) {        super();        this.name = name;    }        }
package com.jayfulmath.designpattern.flyweight;public class ConcreateWebSite extends WebSite {    String name;            public ConcreateWebSite(String name) {        super();        this.name = name;    }    @Override    public void Use(User user) {        System.out.println("WebSite :"+name+"\t User:"+user.name);    }}
package com.jayfulmath.designpattern.flyweight;import com.jayfulmath.designpattern.main.BasicExample;public class FlyweightMain extends BasicExample {    @Override    public void startDemo() {        WebSiteFactory factory = new WebSiteFactory();                WebSite fx = factory.getWebSiteCategory("产品展示");        fx.Use(new User("X"));                WebSite fy = factory.getWebSiteCategory("产品展示");        fy.Use(new User("Y"));                WebSite fz = factory.getWebSiteCategory("博客");        fz.Use(new User("Z"));    }}

当事物可以分为外部状态和内部状态,而且去除外部状态后,内部状态可以归并为多组的时候,可以使用享元模式。

4.享元模式 和原型模式的区别

享元模式 和原型模式都是复制元素或者内容。

但是原型模式 是复用,也就是实例是多份,但是内容相同。

而享元模式是共用,于单例模式相识。

转载于:https://www.cnblogs.com/deman/p/4203690.html

你可能感兴趣的文章
态度决定品质
查看>>
NPOI Excel 单元格背景颜色对照表
查看>>
微信小程序去除button默认样式
查看>>
11/26
查看>>
Where does Visual Studio look for C++ Header files?
查看>>
Java打包可执行jar包 包含外部文件
查看>>
错误1919,配置ODBC数据源MS Access Database时发生错误ODEC错误
查看>>
Docker容器运行ASP.NET Core
查看>>
WPF图片浏览器(显示大图、小图等)
查看>>
.Net码农学Android---系统架构和基本概念
查看>>
Windows Phone开发(37):动画之ColorAnimation
查看>>
DevExpress的Web控件汉化方法
查看>>
js中escape,encodeURI,encodeURIComponent 区别(转)
查看>>
结对编程项目-四则运算整体总结
查看>>
Android studio怎么修改文件名
查看>>
sass学习笔记-安装
查看>>
多缓存并存
查看>>
Flask (二) cookie 与 session 模型
查看>>
修改添加网址的教程文件名
查看>>
Java作用域
查看>>