`
duolaaqian
  • 浏览: 14426 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论
文章列表
/** * 享元模式 * * 如果程序中存在大量的对象,并且对象之间也较为类似 * 这样,对象之间类似的部分就可以共享出来,这样就减少了内存开销 * * 1、具体实体类(大量对象中可共享部分) * 2、工厂类(共享池,返回已有对象或创建新对象) * 3、外部状态(大量对象中可不共享部分) * * 优点: * 1、节省内存开销 * 缺点: * 1、增加了系统度 * 2、虽然节省了内存,但增加了运行时长 * * 场景: * 1、五子棋 * 共享部分:颜色(黑、白) * 分共享部分:位置(1...3 ...
  /** * 建造者模式 * * 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 * * 1、建造者接口,定义建造者需要提供的功能 * 2、指挥者类,定义了建造过程 * 3、具体建造者提供建造的具体实现 * * 优点: * 1、客户端调用时不用知道内部细节,指定建造者即可 * 2、建造者之间是相互独立又可相互替换的,便于维护/扩展 * * 与工厂模式的区别 * 工厂模式:侧重组装过程 * 建造者模式:侧重组装所需零件的生产过程 * * 工厂模式就像玩积木,原料都差不多 ...
学习实践   目标: 1、简化POI导出Excel的调用,方便使用(只提供数据即可)。 2、具有一定的扩展性(整体默认样式、单元格样式)。 3、对一些设计模式的具体实践。   技术要求: 对POI进行扩展。 模仿JSONObject(JsonValueProcessor)、easyui的datagrid(formatter/styler)。 模板方法模式、桥接模式。   涉及的类: ExportGenerator 核心类 导出具体实现类,子类可对其进行扩展 ExportConfig 核心类 用于保存导出相关配置 CellValueProces ...
  /** * 模板方法模式 * * 实现算法时,整体过程很固定,只有部分易改变 * 则可以将固定的部分提取到父类中实现,由子类实现易变的部分 * * 基本方法: * 1、抽象方法:父类声明,由子类具体实现 * 2、具体方法:父类实现,子类可以根据情况进行覆盖或直接继承 * 3、钩子方法:子类重写的父类方法 * * 优点: * 1、简化了子类的代码,方便维护 * 2、如有特殊情况也可重写父类多个方法,具有一定扩展性 * * 场景: * JDBCTemplate、HibernateTemplate * ...
效果图:   各文件路径(我的extra文件夹与easyui文件夹在同一等级): extra\fieldset\lq.fieldset.js 主要js文件 extra\fieldset\lq.fieldset.css 主要样式文件 extra\fieldset\lq.fieldset.html 测试页面 extra\fieldset\images\panel_tools.png 按钮图标(拷贝于easyui,可根据主题不同进行修改)   lq.fieldset.js /* Easyui1.4.2 Create time:2015-11-0 ...
  /** * 装饰模式 * * 类似于代理模式 * 与代理的区别: * 1、真实角色持有(?) * 代理:代理角色并不一定需要调用者提供真实角色(调用者不需要持有真实角色) * 装饰:调用者需要持有真实角色,并提供给装饰器 * 2、真实角色控制 * 代理:代理角色返回任意真实角色,甚至不返回真实角色 * 装饰:对传入的真实角色进行装饰,然后将装饰后的角色返回 * * 代理:我通过 代理(代理角色) 买一套精装修的房子 * 装饰:我先买房,再找 人(装饰角色) 给我装修 */ public class Decorator ...
  /** * 备忘录模式 * * 1、源发器类(具体的业务类/需要备份的类) * 2、备忘录类(拷贝类,用于恢复) * 3、负责人类(管理所有的拷贝) * * 将对象在某个时间点信息保存起来,方便以后查看 * * 优点: * 1、具体 ...
  /** * 桥接模式 * 解决多维度可变属性造成的多类问题 * (用到了组合,但与 组合模式 没关系) * * 场景: * 各大品牌生产电子产品 * 品牌:联想、戴尔、苹果 * 产品:台式机、笔记本、pad * * 如果采用继承的方式实现类结构,那类的数量则是一个乘积的关系 * (联想、戴尔、苹果)*(台式机、笔记本、pad) * 这样会产生一些问题: * 1、产生大量的类,类之间还会有重复的功能(冗余) * 2、品牌 和 类型 之间是有关系的(没有解耦) * 3、添加其中一个实现,则需要添加一定数量的另一 ...
  /** * 适配器模式 * 1、源角色(已有的角色) * 2、目标角色(需要成为的角色) * 3、适配器角色(将 原角色 转换成 目标角色) * * 优点: * 1、不用修改已有代码 * 2、复用已有代码 * 缺点: * 1、会造成类相互之间的关系不清晰 * * 注意: * 属于"补丁"方法,尽量不要有机会使用 * * 场景: * 功能复合需求,但是调用跟需求不匹配时,中间通过一个转换类来实现两者之间的调用 * * NBA不可轻易改变,CBA不可轻易改变 * CBA球员 ...
  /** * 模拟 观察者模式 * 场景: * 小孩睡觉,家长工作 * 小孩醒来,家长喂饭 */ public class ObserverDemo01 { public static void main(String[] args) throws InterruptedException { MyBaby b = new MyBaby(); MyParent p1 = new MyParent("爸爸"); MyParent p2 = new MyParent("妈妈"); MyParent ...
/** * 所有工厂模式都是为了让对象的调用者和对象创建过程分离,简化调用端代码,便于维护 * 简单地对象创建则不需要使用工厂模式 */ /** * 简单工厂(静态工厂) * * 1、创建产品接口 * 2、创建工厂类 * 3、工厂类通过传入参数的不同返回不同的产品 * * 优点: * 1、代码调用简单,类之间的关系也较简单 * 缺点: * 1、拓展性稍差,如果需要增加新的产品,则需要修改已有代码(工厂类),不符合开闭原则(可扩展、禁修改) */ public class SimpleFactroy { publ ...
        /** * 灰烬之灵EM(同一场景、同一资源) */ public class EM { /** * 最大充能数量 */ private final int MAX_F_COUNT = 3; /** * 火之余烬F 充能个数 */ private int count; /** * 火之余烬 个数是否已满 */ private boolean isFull(){ return count >= MAX_F_COUNT; } /** * 火之余烬 个数是否不为0 */ ...
  /** * 通过 java.lang.reflect.Proxy 实现动态代理基本写法 * * 由于代理类实现代理功能的模式基本相同,所以我们可以写一个通用的方法去代理所有的实现类 * * 实现大致思路(动态编译): * 1、通过String去拼 XxxProxy.java ...
  /** * 通过接口方式实现静态代理(聚合) * * 1、定义公共接口(IMoveable) * 2、定义真实对象 继承接口(IMoveable) 实现功能(Tank) * 3、定义代理类 继承接口(IMoveable) 实现前后逻辑/业务逻辑(TankTimeProxy/TankLogProxy) * * 调用的时候可以通过修改代理顺序来来改变逻辑实现顺序(test1/test2) * 优点: * 业务类只关注逻辑本身,灵活,重用性较好 * 缺点: * 1)一个接口只能服务于一种功能类,多功能类就需要多接口+多代理类(此时 ...
创建线程三种方法: /** * 线程创建方法1:创建线程类 * 1、创建线程类,继承Thread并重写 run() 方法 * 2、创建对象实例,调用对象 start() 方法来启动线程 */ public class CreateTest1 { public static void main(String[] args) { Rabbit rab = new Rabbit(); Tortoise tor = new Tortoise(); rab.start(); tor.start(); for(int i=0;i<100 ...
Global site tag (gtag.js) - Google Analytics