浅析JAVA设计模式(一)
第一写技术博客,只是想把自己一天天积累的东西与大家分享。今天在看《大型网站架构和java中间件》这本书时,其中提到代理模式的动态代理。作为java中间件的一个重要基础,我觉的有必要整理和分析下java的23种设计模式,如有不对的地方,请大家留贴指正。
一、设计模式的分类
总体来说,Java的设计模式分为三个大类(创建型模式、结构型模式、行为型模式)
创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式:适配器模式、装饰模式、代理模式、外观模式(又称门面模式)、桥接模式(桥梁模式)、组合模式、享元模式。
行为型模式:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
在讲设计模式前,先来说说java设计模式的六大原则。
二、JAVA设计模式的六大原则
1、单一职责原则:SRP(Single Responsibility Principle)职责单一,定义为有且只有一个因素引起类或接口的改变。顾名思义就是说针对不同的类或接口定义方法单一的方法,这里的单一不是说只定义一个方法,是指一类行为的方法。
例如:类A负责两个不同的职责:职责A1,职责A2。当由于职责A1需求发生改变而需要修改类A时,有可能会导致职责A2功能发生改变,导致程序出现异常。这时就需要将类A拆分为两个不同的类或者接口去执行不同的职责。
举个例子说明下:
public interface IStudent {
//身高
void tHeigh(double height);
double getHeigh();
//体重
void setWeight(double weight);
double getWeight();
//吃饭
boolean brunch(boolean hungry);
//游戏
boolean playGame(boolean free);
}
这个接口定义的职责就很不清晰。因此我们可以将它拆分为两个接口IStudentBo,IStudentAction。
属性接口IStudentBO:
public interface IStudentBO {
//身高
void setHeight(double height);
double getHeight();
//体重
void setWeight(double weight);
double getWeight();
}
行为接口IStudentAction:
public interface IStudentAction{ boolean brunch(boolean hungry);
boolean playGame(boolean free); }
然后各自定义实现类去实现各种的接口方法。这样将属性方法和行为方法分割开来,各自类不会受到多点的因素而发生改变。这个就是所谓的单一职责。是不是很简单呢。当然我们只能尽量去遵守单一职责原则。具体还得看项目需求。至少在后面讲到的部分设计模式就违背了单一职责原则。
浅析JAVA设计模式(一)的更多相关文章
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- 浅析JAVA设计模式之工厂模式(二)
1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...
- 浅析JAVA设计模式(三)
4.接口隔离原则: ISP(Interface Segregation Principle) 客户端不应该依赖它不需要的接口,或者说类的依赖的关系应该建立在最小的接口上.举个例子,直接上代码: 1 ...
- 浅析JAVA设计模式(二)
2. 里氏替换原则:LSP(Liskov Substitution Principle)里氏替换原则,定义为只要父类出现的地方子类就可以出现,而且用子类替换后,程序也不会出现问题,使用者根本不用关心是 ...
- 阿里架构师浅析Java设计模式之虚拟代理模式
虚拟代理模式(Virtual Proxy)是一种节省内存的技术,它建议创建那些占用大量内存或处理复杂的对象时,把创建这类对象推迟到使用它的时候.在特定的应用中,不同部分的功能由不同的对象组成,应用启动 ...
- 浅析java设计模式(一)----异构容器,可以存储任何对象类型为其他类提供该对象
最近在着手重构一个java UI桌面项目,发现这个项目在一开始的时候由于需求不明确,以及开发人员对swing框架不熟悉等问题造成了页面代码混乱的情况:为了能够在各个类里都可以拿到其他类的引用去进行相应 ...
- JAVA 设计模式遵循的六大基本准则
JAVA 设计模式遵循的六大基本准则 一.单一职责原则:(Single Responsibility Pinciple) 一个类只负责一项职责. 当超过一项职责需要负责时,需要增加新的类来负责新的职 ...
- java设计模式- (1)单例模式
参加校园招聘的笔试,发现公司都会考一些java设计模式,所以上网查询相关内容,总结常用的几种单例模式. 单例模式(Singleton Pattern)是 Java中最简单的设计模式之一.这种类型的设计 ...
- JAVA 设计模式 桥接模式
用途 桥接模式 (Bridge) 将抽象部分与实现部分分离,使它们都可以独立的变化. 桥接模式是一种结构式模式. 结构
随机推荐
- ALV 插入可编辑的空行
在FCAT 中 设置需要的字段为 可以编辑,然后LOOP 显示 ALV 的内表,将不需要的行设置为 不可编辑 1. 在ALV用的内表中添加控制 style 的 内表 TYPES:BEGIN OF TY ...
- iOS 有关自动轮播图片
//初始化当前视图 _currentImageView = [[UIImageView alloc] init]; [_currentImageView setImageWithURL:[NSURL ...
- SQL Server内存性能分析
内存概念: Working Set = Private Bytes + Shared Memory Working Set:某个进程的地址空间中,存放在物理内存的那一部分 Private Bytes: ...
- Windows Phone开发-开发环境和结构
Windows Phone 7.1的开发工具发布了,一直对WP7很关注,现在终于可以开始学习了.其实09年就学习过silverlight,看过3的SDK文档,当时因为工作,断断续续也没有坚持下来,所以 ...
- UIView上添加了一个按钮和一个单击手势的事件相应,互相不影响的处理方法。。
tapGesture.delegate = self; - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shoul ...
- 使用air进行移动app开发常见功能和问题(二)
1. Air如何判断android.ios 平台网络连接状态? Android,使用as3原生api: if(NetworkInfo.isSupported)//只有android支持 Networ ...
- error “base class has incomplete type”
error "base class has incomplete type" 如果base.h是你的基类,那么在子类derive中,写成如下形式: class base; clas ...
- Web安全测试周末公开班计划5月24、25日开课,欢迎报名参加!
Web安全测试周末公开班计划5月24.25日开课,欢迎报名参加! 课程大纲参考: http://gdtesting.com/product.php?id=107 报名咨询: 黎小姐 QQ:241448 ...
- mac mysql error You must reset your password using ALTER USER statement before executing this statement.
安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个 step 1: SET PASSWORD = PASSWORD('your new password'); step 2: ALTER ...
- Azure PowerShell (一)如何安装和配置 Azure PowerShell
什么是 Azure PowerShell? Azure PowerShell 是一组模块,提供用于通过 Windows PowerShell 管理 Azure 的 cmdlet.你可以使用 cmdle ...