这次寒假集训感觉自己有点临阵脱逃,快要集训的前一天回家了,给自己的理由是在学校没有了学习的状态。所以自己也在家小小的学习了下,对于学到的有了点自己的理解。
一直都在接触JAVA语言,但对于它整体的体系结构设计模式却不甚了解,这里我将分七个部分对JAVA设计模式做大概的阐述。
第一部分——设计模式
首先说说什么是设计模式,“模式”在我的理解就是一种人们惯常会用到的固定的方法,当然这个方法肯定是被很多人验证、实践过的最佳的方法。更准确一点“设计模式”就是一个已被记录的最佳的实践或一个解决方案,由此看来这个“最佳的实践”或“解决方法”肯定是在许多环境中成功的得到应用。
这样看来你是不是想到了框架呢?框架也可以被理解为一种固定的人们可以直接套用的方法呀?其实设计模式和框架还是有本质的区别的:
设计模式是一种多次适用的解决方案;
设计模式是在特定的上下文中;
设计模式是针对应用生命过程中出现的问题而给定的。
框架是一种可复用的体系结构;
框架是一组相互协作的软件组件;
框架针对某个给定的问题领域中的应用程序给定的。
第二部分——基本模式
基本模式中有:接口、抽象父类、私有方法、存取器方法(即访问者方法)、常量数据管理器、不变对象、管程。这里指的一提的是后面的四种。
1、
存取器方法也即访问者方法,顾名思义它是一种提供使用特定方法函数访问一个对象的状态的方法。在我的理解就是将表示对象状态的方法单独放到一个类中,限定不同客户对象对对象属性的直接访问。现在举一个最普遍的存取器方法的类,不同客户对象可以通过存取器方法来访问对象的状态。下面是一个使用了存取器方法的简单例子:
public class Student {
//学生姓
private String firstname;
//学生名
private String lastname;
//学生住址
private String address;
//学生行为
private boolean active;
public String getFirstname(){
return firstname;
}
public void setFirstname(String newfirstname){
firstname=newfirstname;
}
public String getLastname(){
return lastname;
}
public void setLastname(String newlastname){
lastname=newlastname;
}
public String getAddress(){
return address;
}
public void setAddress(String newaddress){
address=newaddress;
}
public boolean isActive(){
return active;
}
Public void isActive(boolean newactive){
active=newactive;
}
}
2、
常量数据管理器模式即是对于一些恒定不变的数据存放在一个单独的对象中供应用中的其他对象访问,这就提高了应用的可维护性。当需要对任何一个常量数据进行修改时只需对存放有这些数据的那个类进行修改,其他便无须改变。
3、
不变对象:一个类可以被设计为这样的形式,它的实例仅仅是相关数据的携带者,而不具有任何行为,这样的类可以称之为数据模型类,而它的实例则称数据对象。下面是没有使用不变对象模式的简单类:
public class Student {
//学生姓
private String firstname;
//学生名
private String lastname;
//学生住址
private String address;
//学生行为
private boolean active;
public Student(String fn,String ln,String adr){
firstname=fn;
lastname=ln;
address=adr;
}
/**
* 行为
* @return
*/
public boolean save(){
return true;
}
public boolean update(){
return true;
}
public String getFirstname(){
return firstname;
}
public void setFirstname(String newfirstname){
firstname=newfirstname;
}
public String getLastname(){
return lastname;
}
public void setLastname(String newlastname){
lastname=newlastname;
}
public String getAddress(){
return address;
}
public void setAddress(String newaddress){
address=newaddress;
}
}
这个类中有不变的数据也有动作行为,下面是修改后的不变版本:
public class Student1 {
//学生姓
private String firstname;
//学生名
private String lastname;
//学生住址
private String address;
//学生行为
private boolean active;
public Student1(String fn,String ln,String adr){
firstname=fn;
lastname=ln;
address=adr;
}
public String getFirstname(){
return firstname;
}
public String getLastname(){
return lastname;
}
public String getAddress(){
return address;
}
}
当一个线程可以改变数据而另一个不同的线程正在读取同一个数据时,对对象的同时访问就会导致问题。而不变对象的数据不可改变的这一性质使得它自动解决了这一问题,不变数据对象模型的使用可以保证多个客户对象对数据的同时访问不会引起任何问题。