设计模式
文章平均质量分 63
陵先生的笔记本
这个作者很懒,什么都没留下…
展开
-
装饰器模式
属于结构型模式。目的是在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更加有弹性的替代方案(拓展原有对象的功能) 示例 比如买煎饼这个事情,如果不使用装饰器,只是简单的使用继承,会需要用到很多类 纯煎饼类 如果不使用装饰器 /** * 煎饼类 */ public class BetterCake { /** * 名字 * @return String */ protected String getMsg(){ return "煎饼原创 2021-01-27 15:52:16 · 143 阅读 · 0 评论 -
模板模式
给定一个指定的流程(即模板),在这个指定流程下,又流出一定的可由用户选择的分支(即钩子)。用户在大体的流程上都必须按照模板进行,但在某个分支小点可以有自己选择的权利。 示例 准备一个规范的流程:一个抽象类 public abstract class NetWorkCourse { //创建一个课程的规范化流程模板 protected final void creatCrouse(){ //1.发布预习资料 this.postPreResource();原创 2021-01-26 16:38:56 · 176 阅读 · 0 评论 -
策略模式
策略模式:避免多分支(即避免if、switch) 示例 准备一个标准抽象类 /** * 优惠策略接口 */ public interface PromotionStrategy { public void doPromotion(); } 准备多种优惠策略的实现类 /** * 没有任何优惠-原价 */ public class EmptyStrategy implements PromotionStrategy{ @Override public void doPromot原创 2021-01-25 17:15:28 · 173 阅读 · 1 评论 -
委派模式
委派模式与代理模式的区别: 委派 代理 注重结果 注重过程 不属于GOF23 属于GOF 23里的一种 代码实现 总体关系 boss将任务发给指定的leader,leader在根据手下员工的特点将对应的任务分发给对应的员工 代码实现 boss类 public class Boos { public void command(String command,Leader leader){ leader.doing(command); } } lead原创 2021-01-25 11:06:01 · 97 阅读 · 2 评论 -
代理模式之cglib动态代理
前文说到了JDK动态代理,是基于接口和Proxy实现的动态生成代理类,本文继续研究cglib动态代理,据说是基于继承实现的动态生成代理类。 第一步:先不管具体理解,按照cglib代理的代码流程实现一个案例; 第二部:根据这个案例去理解cglib动态代理 目录代码实现初步分析总之:【注】cglib有个坑: 代码实现 准备一个被代理者 /** * @program: easystart * @description: 被代理的类 * @author: 陵先生 * @create: 2021-01-20原创 2021-01-22 10:40:59 · 150 阅读 · 0 评论 -
代理模式之动态代理->JDK动态代理
代理就是对某一个类进行非入侵式的增强,即在其执行前后执行某些逻辑。静态代理此处跳过,本文主要讨论JDK动态代理。 第一步:先不管具体理解,按照JDK代理的代码流程实现一个案例; 第二部:根据这个案例去理解JDK动态代理 目录代码实现1.准备一个规范的接口2.准备一个需要被代理的接口实现类3.准备一个用来完成JDK动态代理的代理功能的类4.测试分析其实现过程1.反编译2.初步查看反编译代码细看JDK动态代理的执行过程 代码实现 1.准备一个规范的接口 public interface IGamePlayer原创 2021-01-21 17:17:29 · 192 阅读 · 0 评论 -
用ThreadLocal实现伪线程安全的单例--注册式单例的容器式实现
实现代码 /** * @program: easystart * @description:在线程内包装单例的安全,但线程之间不保证--伪线程安全 * @create: 2021-01-18 20:16 */ public class ThreadLocalSingleton { /** * 构造方法私有化 */ private ThreadLocalSingleton(){} /** * 通过ThreadLocal保证线程内安全原创 2021-01-18 23:00:12 · 166 阅读 · 1 评论 -
注册式单例--容器法
通过map来模仿spring中的容器 public class ContainerSingleton { /** * 构造方法私有化 */ private ContainerSingleton(){} /** * 容器:用来存储对象 */ private static Map<String,Object> ioc = new ConcurrentHashMap<String, Object>();原创 2021-01-18 19:58:09 · 185 阅读 · 2 评论 -
单例模式的枚举实现->最安全的单例
枚举实现单例是最安全的单例实现方式 实现代码 准备枚举类 /** * 注册式单例第一种:枚举式单例 */ public enum EunmSingleton { INSTANCE; private Object data; public static EunmSingleton getInstance(){return INSTANCE;} public Object getData() { return data; } publ原创 2021-01-18 16:57:26 · 250 阅读 · 2 评论