设计模式——策略模式:会员价格体系的简单实现
京东会员体系有注册、铜牌、银牌、黄金、钻石五档,不同等级享有不同优惠。程序里若用一堆 if-else 硬判,后期很难维护。更合适的是设计模式里的策略模式:针对不同等级会员,每一种特权对应一种优惠策略。 定义:定义算法簇,分别封装起来,让它们可以互相替换;此模式让算法的变化独立于使用算法的客户。参考:…
京东会员体系有注册、铜牌、银牌、黄金、钻石五档,不同等级享有不同优惠。程序里若用一堆 if-else 硬判,后期很难维护。更合适的是设计模式里的策略模式:针对不同等级会员,每一种特权对应一种优惠策略。 定义:定义算法簇,分别封装起来,让它们可以互相替换;此模式让算法的变化独立于使用算法的客户。参考:…
vue-property-decorator 完全依赖 vue-class-component。在 Vue 单文件里用 TypeScript 时,它把 Options API 收成装饰器:类字段当 data、get 当 computed,@Emit / @Watch / @Prop / @Model…
单例模式是常用设计模式,核心结构里只包含一个被称为单例的特殊类:一个类只有一个实例,也就是只有一个对象实例。 系统里有些类必须唯一。例如可以有多个打印任务,但同时只能有一个在工作;售票时一共 100 张票、多个窗口同时卖,余量必须是单例,否则会超售。窗口对象如果不唯一化,会弹出多个窗口;内容相同却重…
设计模式不是孤立的招式。先把 七条设计原则(单一职责、开闭、里氏代换、依赖倒转、接口隔离、合成复用、迪米特)立住,再按创建型、结构型、行为型把 23 种模式过一遍。 每种模式保留原文的意图、优缺点、UML 图和参与者说明;文末给出对应的博客详解链接。图全部按原地址保留。 分类 模式 一句话 原则 开…
工厂模式如此常用,是因为它相当于创建实例对象的 new。我们经常要根据类生成实例,如 A a = new A()。以后再写 new 时不妨多想一步:能不能改用工厂?虽然可能多写一点代码,但能换来更大的可扩展性和尽量少的修改量。 以类 Sample 为例,创建实例本来是 Sample sample =…
Singleton(单态 / 单例)保证一个 Class 在 Java 应用里只有一个实例。建目录、拿数据库连接这类希望全局唯一的资源,常用它。 单例可以带状态:多个单态凑在一起就像状态仓库。例如论坛帖子计数器,每次浏览加 1,用 synchronize 保证安全;若要持久化到数据库,可以在不改对外…
JDK 1.2 之后,Java 在 java.util 里提供了观察者模式的接口和实现类:观察者实现 Observer,被观察者继承 Observable。 观察者必须实现 void update(Observable o, Object arg)。读者可以很轻易地用这一对类型把推送关系搭起来。 一…
装饰模式 Decorator 常被译成“装饰”,译成油漆工更形象:油漆工(decorator)刷油漆,被刷的对象叫 decoratee。这两种角色在模式里缺一不可。 定义:动态地给一个对象加上额外职责,就像在墙上刷油漆。比起靠生成子类来扩充功能,Decorator 更灵活——功能的种类、时机都可以在…