这篇文章清晰的讲述了继承, 实现, 依赖, 关联,组合的概念及他们之间的关系,以下是原文内容:
这是一堂关于UML基础知识的补习课;现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范建模了;本篇主要就以前自己一直感觉很迷糊的几种class之间的关系进行整理,让我们在真正用UML进行比如类图设计时能够更加清晰明了;以下就分别介绍这几种关系:
继承
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;
实现
指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;
依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;
关联
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;
对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准确定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
当我们使用静态的Scaffolding的时候, 我们经常会用到一些自定义的validator, 那么我们怎样自定义国际化的message呢?
或者说我们定义怎样的一个key, Grails能查到它呢?
这里,用户自定义Validator的key的pattern是:
[Class Name].[Property Name].validator.invalid
我们在开发使时常会用到资源文件,这可能是为了多语言、国际化的需要,也可能是使用了国外开源项目的原因,这就需要中文转ascii将中文转换为ASCII 编码,或者将 ASCII 转换为中文,那么我们就可以使用 JDK 自带的转换工具 native2ascii 。
for example:
No1、中文转换为 ASCII 编码
步骤:1 、在 D 盘新建 chinese.txt 文件,内容为:
parameter.project.title=这是中文
2、在环境变量中设置好 JDK 路径
3、进入 dos 控制台,并进入 D 盘目录
4、输入命令: native2ascii -encoding gb2312 chinese.txt ascii.txt 回车
那么在D 盘目录下生成 ascii.txt 文件,内容为:
parameter.project.title=\u8fd9\u662f\u4e2d\u6ascii码 中文587
No1、 ASCII 编码转换为中文
步骤:1 、在 D 盘新建 ascii.txt 文件,内容为:
parameter.project.title=\u8fd9\u662f\u4e2d\u6ascii码 中文587
2、在环境变量中设置好 JDK 路径
3、进入 dos 控制台,并进入 D 盘目录
4、输入命令: native2ascii -reverse -encoding UTF8 ascii.txt chinese.txt 回车
那么在D 盘目录下生成 chinese.txt 文件,内容为:
parameter.project.title=这是中文
1. chkconfig脚本格式:
#!/bin/sh
#chkconfig 2345 55 45
#上面为固定格式:2345 表示运行级别,55表示开机执行顺序,45为关机顺序
#description:this is just a demo of chkconfig script
case “$1” in
start)
<start-script>
;;
Stop)
<stop-script>
;;
Status)
Echo <the information you want to display>
;;
*)
Echo “the usage of the script”
Case
2. 然后将脚本保存,并赋予执行权限,再复制到/etc/init.d目录
#chmod a+x <myscript>
#copy <myscript> /etc/init.d
3. 使用chkconfig命令添加成服务
#chkconfig --add <myscript>
#chkconfig --level 35 <myscript > on
#chkconfig --list <myscript>
4. 然后就可以通过service命令管理了
#service <myscript> start | stop | status
5. 下面是我写的一个实例脚本,大家可以参考一些格式:
#!/bin/sh
#chkconfig: 2345 99 99
#description:the script to set the network at run level 2345
IN=eth0
OUT=eth1
HOST_NAME=cluster1.yang.com
INIP=192.168.10.10
OUTIP=192.168.136.10
MASK=255.255.255.0
IP=/sbin/ip
IFC=/sbin/ifconfig
ROUTE=/sbin/route
#flush the address
case "$1" in
start)
#echo "flush the address..."
#$IP addr flush dev eth0
#$IP addr flush dev eth1
echo "set the address..."
$IFC $IN $INIP netmask $MASK up
$IFC $OUT $OUTIP netmask $MASK up
echo "set the hostname..."
hostname $HOST_NAME
echo "set the default gateway..."
$IP route flush all
$ROUTE add default gw 192.168.136.2
echo "finshed!!!"
;;
stop)
echo "flush the network setting..."
$IP addr flush dev eth0
$IP addr flush dev eth1
echo "flush finshed!!!"
;;
status)
echo "hostname is $HOST_NAME"
$IFC eth0
$IFC eth1
;;
*)
echo "requires start,stop or status"
;;
esac
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
在Linux中chkconfighttpd任务添加,Apache服务器的最新稳定发布版本是httpd-2.2..0,官方下载地址是:http://httpd.apache.org/download.cgi。我们通过下面的步骤来快速的搭建一个web服务器。
1、下载源码文件httpd-2.2.0.tar.gz 到linux服务器的某个目录。
2、解压文件 # tar zxvf httpd-2.2.0.tar.gz .
3、配置 # ./configure –refix=/usr/local/apache //指定安装目录,以后要删除安装就只需删除这个目录。
4、编译和安装。 # make ; make install .
5、编写启动脚本,把它放到目录 /etc/rc.d/init.d/里,这里取名为httpd,其内容如下:
- #!/bin/bash
- #description:http server
- #chkconfig: 235 98 98
- case "$1" in
- start)
- echo "Starting Apache daemon..."
- /usr/local/apache2/bin/apachectl -k start
- ;;
- stop)
- echo "Stopping Apache daemon..."
- /usr/local/apache2/bin/apachectl -k stop
- ;;
- restart)
- echo "Restarting Apache daemon..."
- /usr/local/apache2/bin/apachectl -k restart
- ;;
- status)
- statusproc /usr/local/apache2/bin/httpd
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|status}"
- exit 1
- ;;
- Esac
注意:#description:http server 这一行必须加上,否则在执行命令
# chkconfig –add httpd
时会出现“service apache does not support chkconfig”的错误报告。
#chkconfig: 2345 98 98 表示在执行命令
# chkconfig –add httpd 时会在目录 /etc/rc2.d/ 、/etc/rc3.d/ /etc/rc5.d 分别生成文件 S98httpd和 K98httpd。这个数字可以是别的。
6、执行命令 # chkconfig –add httpd ,进入目录/etc/rc3.d/检查是否生成文件 S98httpd及K98httpd.
7、启动服务 # service httpd start .