Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Design-Patterns

设计模式

单例模式

使用场景:

1、要求生成唯一序列号的环境
2、在整个项目需要一个共享访问点或者共享数据。如:Web页面上的计数器
3、创建对象需要消耗的资源过多,如:访问IO和数据库
4、需要定义大量的静态常量和静态方法

优点:

1、减少内存开支,特别是对于需要重复创建、销毁
2、减少系统开销,当一个对象需要比较多资源时,如:读取配置、产生其他依赖对象,可以在应用启动时直接产生一个单例对象,然后永久驻留内存的方式解决
3、避免对同一个资源的多重占用,例如:同时写的操作
4、系统设置全局的访问点、优化和共享资源访问。例如:可以设计 一个单例类,负责所有数据表的映射关系

缺点:

1、单例模式一般没有接口,扩展困难
2、不利于测试
3、与单一职责原则冲突

工厂模式

使用场景

1、需要构建灵活的、可拓展的框架(例如设计一个有三种协议的邮件服务器)
2、异构项目(例如:WebService与非Java的项目交互。如:类型问题,WSDL文件支持)
3、测试驱动开发的框架

优点:

1、良好的封装性,代码结构清晰
2、便于扩展
3、屏蔽产类(经典案例,JDBC的使用)
5、经典的解耦框架

抽象工厂模式

使用场景

一个对象族(或是一组没有任何关系的对象)都有相同的约束

优点

1、封装性
2、产品族内的约束为非公开状态

缺点

扩展困难,容易产生"毒代码"

模板方法模式

使用场景

1、多个子类有公有方法,并且逻辑基本相同时
2、重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现
3、重构时,模板方法模式是常用的模式,把内容相同的代码抽到父类中,通过钩子函数约束行为

优点

1、封装不变部分,扩展可变部分
2、提取公共部分代码,便于维护
3、行为由父类控制,子类实现

缺点

提高代码阅读难度

建造者模式

使用场景

1、相同的方法,不同的执行顺序,产生不同的事件结果
2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不同时
3、产品类非常复杂,或产品类中的调用顺序不同产生不同的效能
4、在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,可以采用建造者模式封装该对象的创建过程

优点

1、封装性
2、建造者独,易扩展
3、便于控制细节风险

缺点

建造者模式关注的是零件类型和装配工艺(顺序)

About

设计模式代码(Java)

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages