无废话设计模式(9)结构型模式--享元模式

0-前言

  享元模式定义:运用共享技术有效地支持大量细粒度的对象。

1-实现

1-1、简单UML图:

 1-2、代码实现

//1、抽象父类(网站父类)
abstract class Website
{
    public abstract  void Use( String username);
}

//2、具体共享类(具体网站类)
class  ConcreteWebsite extends Website
{
    private  String websiteclassname;
    public  ConcreteWebsite(String name)
    {
        this.websiteclassname = name;
    }

    @Override
    public void Use(String username)
    {
        System.out.println("网站分类:"+ websiteclassname +"--用户:"+username);
    }
}

//3、享元工厂类(网站工厂)
class WebsiteFactory
{
    private Hashtable<String , Website> websites =new Hashtable<>();

    public Website getWebsite(String classname)
    {
        if (!websites.containsKey(classname))
        {
            websites.put(classname, new ConcreteWebsite(classname));
        }
        return websites.get(classname);
    }
}

客户端:

WebsiteFactory wf = new WebsiteFactory();
        Website fs = wf.getWebsite("企业官网");
        fs.Use("张三");

        Website fs1 = wf.getWebsite("博客");
        fs1.Use("李四");

        Website fs2 = wf.getWebsite("小程序");
        fs2.Use("王五");

运行结果:

2-应用场景简单总结

1、一个程序使用了大量对象时;

2、由于使用了大量对象造成比较大的存储开销时;

3、对象的很多状态都可以改变为外部状态时;

(0)

相关推荐

  • 设计模式-单例模式

    单例模式 优点 由于单例模式在内存中只有一个实例,减少了内存开支,特别是 一个对象需要频繁地创建.销毁时,而且创建或销毁时性能又无法优 化,单例模式的优势就非常明显. 由于单例模式只生成一个实例,所以 ...

  • MyBatis select标签

    分享 有用  返回 在 MyBatis 中,select 标签是最常用也是功能最强大的 SQL 语言,用于执行查询操作. select 示例语句如下. <select id="sel ...

  • MyBatis执行SQL的两种方式

    本节主要介绍 MyBatis 执行 SQL 语句的两种方式和它们的区别. MyBatis 有两种执行 SQL 语句的方式,如下: 1.通过 SqlSession 发送 SQL 2.通过 SqlSess ...

  • 无废话设计模式(11)结构型模式--代理模式

    0-前言 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问. 1-实现 1-1.简单UML图: 1-2.代码实现 //1.抽象父类 abstract class Actor { public ...

  • 无废话设计模式(10)结构型模式--外观模式

    0-前言 外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定了一个高层接口    这一接口使得这一子系统更加容易使用: 1-实现 1-1.简单UML图: 1-2.代码实现 //1.子系统A ...

  • 结构型模式之享元模式

    在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈.例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网 ...

  • 无废话设计模式(17)行为型模式--中介者模式

    0-前言 中介者模式定义(Mediator): 用一个中介对象来封装一系列的对象交互. 中介者对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. 1-实现 1-1.简单UM ...

  • 无废话设计模式(16)行为型模式--备忘录模式

    0-前言 备忘录模式定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 这样以后就可以将该对象恢复到原先保存的状态. 1-实现 备忘录模式设计的初衷是用于备份状态. 但是 ...

  • 无废话设计模式(15)行为型模式--观察者模式

    0-前言 观察者模式定义:定义了一种一对多的依赖关系让多个观察者对象同事监听某一主题对象. 这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能够自动更新自己: 1-实现 1-1.简单UML图 ...

  • 无废话设计模式(12)行为型模式--模板方法模式

    0-前言 模板方法模式定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中: 模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些步骤: 1-实现 1-1.简单UML图:  1-2 ...

  • 结构型模式:享元模式

    七大结构型模式之六:享元模式. 简介 姓名 :享元模式 英文名 :Flyweight Pattern 价值观 :共享富贵 个人介绍 : Use sharing to support large num ...

  • PHP设计模式之享元模式

    PHP设计模式之享元模式 享元模式,"享元"这两个字在中文里其实并没有什么特殊的意思,所以我们要把它拆分来看."享"就是共享,"元"就是元素 ...