zoukankan      html  css  js  c++  java
  • 入门设计模式之享元模式

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

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

    我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。在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 Json 数据下划线与驼峰格式进行相互转换
    Java反射常用示例
    ApplicationContextAware 快速获取bean
    Spring AOP自动代理创建者
    Spring依赖检查
    Bean作用域实例
    注入值到Spring bean属性
    用javaConfig 代替 xml 配置
    spring使用@Autowired装载
    Spring 概述
  • 原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9249012.html
Copyright © 2011-2022 走看看