入门设计模式之享元

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871456 学习更多设计模式请参考:入门设计模式之汇总篇享元模式:以共享的方式高效的支持大量的细粒度对象我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871456


学习更多设计模式请参考:入门设计模式之汇总篇


享元模式:以共享的方式高效的支持大量的细粒度对象


我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。在Java中你觉得是new几千次咖啡好还是new几十次口味好呢?享元模式就是利用的这个原理来共享的变量了。

来看一下类图:


  • FlavorFactory:口味工厂,根据客户所需口味生产咖啡
  • Client:售货员,负责通知工厂生产咖啡,以及出售咖啡和统计销售情况
  • Coffee:咖啡接口
  • Flavor:咖啡口味,实现了咖啡接口,并且持有一个口味属性,记录此咖啡的口味。

来看一下代码

public interface Coffee {
    public String getFlavor();
}

public class Flavor implements Coffee {
    private String flavor;
    Flavor(String flavor){
        this.flavor=flavor;
    }
    @Override
    public String getFlavor() {
        return this.flavor;
    }
}

public class FlavorFactory {
    private Map<String,Coffee> flavorMap=new HashMap<>();

    public Coffee getCoffee(String flavor) {
        if(flavorMap.get(flavor)!=null){
            flavorMap.put(flavor,new Flavor(flavor));
        }
       return flavorMap.get(flavor);
    }
    public int flavorNum(){
        return flavorMap.size();
    }
}

public class Client {
    private int coffeeNum;
    private FlavorFactory flavorFactory;
    Client(FlavorFactory flavorFactory){
        this.flavorFactory=flavorFactory;
    }
    public void sell(String flavor){
        flavorFactory.getCoffee(flavor);
        coffeeNum++;
    }
    public void statistics(){
        System.out.println("共卖出咖啡"+coffeeNum+"杯");
        System.out.println("共卖出风味"+flavorFactory.flavorNum()+"种");

    }
}

其实大家看了代码就明白了享元模式的核心思想,那就是重复利用以及存在的对象





本文出自https://zhixiang.org.cn/#/blog/read/9cc0a0f2-24fd-425b-b8b3-4a32341dbb9c,转载请保留。

学习更多设计模式请参考:入门设计模式之汇总篇


享元模式:以共享的方式高效的支持大量的细粒度对象


我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。在Java中你觉得是new几千次咖啡好还是new几十次口味好呢?享元模式就是利用的这个原理来共享的变量了。

来看一下类图:


  • FlavorFactory:口味工厂,根据客户所需口味生产咖啡
  • Client:售货员,负责通知工厂生产咖啡,以及出售咖啡和统计销售情况
  • Coffee:咖啡接口
  • Flavor:咖啡口味,实现了咖啡接口,并且持有一个口味属性,记录此咖啡的口味。

来看一下代码

public interface Coffee {
    public String getFlavor();
}

public class Flavor implements Coffee {
    private String flavor;
    Flavor(String flavor){
        this.flavor=flavor;
    }
    @Override
    public String getFlavor() {
        return this.flavor;
    }
}

public class FlavorFactory {
    private Map<String,Coffee> flavorMap=new HashMap<>();

    public Coffee getCoffee(String flavor) {
        if(flavorMap.get(flavor)!=null){
            flavorMap.put(flavor,new Flavor(flavor));
        }
       return flavorMap.get(flavor);
    }
    public int flavorNum(){
        return flavorMap.size();
    }
}

public class Client {
    private int coffeeNum;
    private FlavorFactory flavorFactory;
    Client(FlavorFactory flavorFactory){
        this.flavorFactory=flavorFactory;
    }
    public void sell(String flavor){
        flavorFactory.getCoffee(flavor);
        coffeeNum++;
    }
    public void statistics(){
        System.out.println("共卖出咖啡"+coffeeNum+"杯");
        System.out.println("共卖出风味"+flavorFactory.flavorNum()+"种");

    }
}

其实大家看了代码就明白了享元模式的核心思想,那就是重复利用以及存在的对象





本文出自https://zhixiang.org.cn/#/blog/read/9cc0a0f2-24fd-425b-b8b3-4a32341dbb9c,转载请保留。

相关文章
|
28天前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
41 2
|
28天前
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
28 0
|
28天前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
34 0
|
28天前
|
设计模式 算法 Java
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
14 0
|
6月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
97 0
|
2月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
4月前
|
设计模式 Java 数据安全/隐私保护
Java中的设计模式:从入门到精通
Java中的设计模式:从入门到精通
|
6月前
|
设计模式 安全 Java
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
78 0
|
设计模式 算法 Java
JAVA设计模式--从入门到精通(下)
JAVA设计模式--从入门到精通
|
设计模式 Java 测试技术
JAVA设计模式--从入门到精通(上)
JAVA设计模式--从入门到精通

热门文章

最新文章

  • 1
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    44
  • 2
    C++一分钟之-C++中的设计模式:单例模式
    51
  • 3
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    36
  • 4
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    59
  • 5
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    54
  • 6
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    39
  • 7
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    49
  • 8
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    102
  • 9
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    74
  • 10
    Go语言设计模式:使用Option模式简化类的初始化
    71