看博客中的设计模式总结,和看java应用架构设计模块化模式与OSGI书的感想:
六大规则(zuoxiaolong8810(左潇龙)总结的非常好了)
1.单一职责原则(六大规则中的小萝莉,人见人爱):描述的意思是每个类都只负责单一的功能,切不可太多,并且一个类应当尽量的把一个功能做到极致。
单一职责原则是内聚。内聚表示类完成单一功能的程度。内聚的类更易理解,同时还易维护。
2.迪米特原则(六大原则中最害羞的姑娘,不太爱和陌生人说话):也称最小知道原则,即一个类应该尽量不要知道其他类太多的东西,不要和陌生的类有太多接触。
3.里氏替换原则(六大原则中最文静的姑娘,但却不太招人喜欢):这个原则表达的意思是一个子类应该可以替换掉父类并且可以正常工作。
4.接口隔离原则(六大原则当中最挑三拣四的挑剔女,胸部极小):也称接口最小化原则,强调的是一个接口拥有的行为应该尽可能的小。
在java应用架构设计模块化模式与OSGI中原则:
众多的接口要优于单一的,通用性的接口。
5.依赖倒置原则(六大原则中最小鸟依人的姑娘,对抽象的东西非常依赖):这个原则描述的是高层模块不该依赖于低层模块,二者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。
6.开-闭原则(六大原则中绝对的大姐大,另外五姐妹心甘情愿臣服):最后一个原则,一句话,对修改关闭,对扩展开放。
例:
一个金融机构,我们要允许顾客使用不同类型的账户存款。
Account类与AccountType抽象类产生了关联。换句话说,Account类与AccountType
继承体系的抽象层产生了耦合。因为,Savings和Checking都继承自AccountType类,
所以通过动态绑定的方式,就能引用AccountType类的地方替换这些类的实例。
Account类:
publicclass Account {
private AccountType _act;
public Account(String act){
Class c;
try {
c = Class.forName(act);
this._act=(AccountType) c.newInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
publicvoid deposit(int amt){
this._act.deposit(amt);
}
}
AccountType接口:
publicinterface AccountType {
publicvoid deposit(int amt);
}
Checking类:
书中居然写的类是
publicclass Checking extends AccountType{
实在是不明白作者到底有没有亲自写这段代码.
publicclass Checking implements AccountType{
@Override
publicvoid deposit(int amt) {
// TODO Auto-generated method stub
System.out.println("Amount deposited in "+
"checking account:"+ amt);
}
}
Savings类:
书中居然写的类是
publicclass Savings extends AccountType{
和上面一样,费解啊。
publicclass Savings implements AccountType{
@Override
publicvoid deposit(int amt) {
// TODO Auto-generated method stub
System.out.println("Amount deposited in "+
"Savings account:"+ amt);
}
}
因为Account并没有直接与具体的Savings或Checking类耦合,所以我们不用修改Account就可以扩展AccountType类,创建新的实现如MoneyMarket.
因此,OCP的一个原则就是将类之间的耦合降低到抽象级别。
我们不是在两个具体的类之间建立关联,而是在具体类和抽象类之间建立关联,在java中也就是在具体类和接口之间。
7.在java应用架构设计模块化模式与OSGI中没有迪米特原则相应的是组合重用原则
这一原则应该是包设计原则中一种
优先选择对象的多态组合而不是继承。
组合重用原则能够让我们避免犯一个灾难性的错误,这个错误会导致面向对象的系统遭受灭顶之灾,那就是:使用继承作为主要的重用机制。
导致错误的使用合成,聚合与继承的一个常见的原因是错误的把“Has-a”关系当作“Is-a”关系。
“Has-a”代表一个类时另外一个类的角色。
“Is-a”代表一个类时另外一个类的一种。
举个例子:
把“人”当成一个类,然后把“雇员”,“经理”,“学生”当成是“人”的子类。这个的错误在于把“角色”的等级结构和“人”的等级结构混淆了。“雇员”,“经理”,“学生”是一个人的角色,一个人可以同时拥有上述角色。若按照继承来设计,一个人是雇员的话,那就不可能是学生了。所以创建一个类图:
父类人下面有非洲人,和亚洲人,两个子类,那么角色下载有经理,学生,雇员三个角色。
无论是什么样的人都可以是经理,学生,雇员角色,所以只需要人员类和角色类变成关联关系而不是继承关系。
java应用架构设计模块化模式与OSGI读起来很吃力啊,还到处是错误,感觉白花了50大洋啊。
相关推荐
读书笔记:《Java应用架构设计模块化模式与OSGi》源代码
总结来说,OSGi提供了一个强大的模块化系统,通过服务导向的架构,使Java应用更加灵活和可维护。开发者通过掌握OSGi,能够构建更高效、可扩展的系统,同时也能更好地应对复杂的应用场景和持续变化的需求。如果你计划...
总的来说,OSGi是一个强大的模块化框架,能帮助开发者构建更灵活、可维护的Java应用程序。通过理解其核心概念、熟练使用相关工具,并在实践中不断探索,我们可以充分利用OSGi的优势来提升软件项目的质量和效率。
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle包含自己的类加载器和资源。这些bundle可以通过动态安装、启动、停止、更新和卸载...
OSGi是一个Java平台上的动态模块化系统,它允许开发者创建可热部署、互相依赖的模块,从而实现更加灵活、可维护的软件架构。 ## OSGi简介 OSGi的核心概念是模块,每个模块称为一个Bundle。这些Bundle之间可以通过...
通过OSGi框架,开发者能够创建具有高度模块化和动态化的Java系统,这些系统可以灵活地进行服务的注册、发现和升级。 OSGi Alliance成员共同开发并免费提供规范,但兼容性程序只对成员开放。目前OSGi Alliance有12个...
OSGi是一种模块化系统,它允许Java应用程序以模块化的方式进行构建、部署和管理,而Spring框架则是一个广泛使用的Java企业级应用开发框架。这篇笔记可能探讨了如何将Spring的功能与OSGi的模块化优势相结合,以实现更...
- **OSGI**: Open Service Gateway Initiative,提供了一种标准化的服务平台,支持模块化的应用程序部署和运行环境。它允许动态地安装、卸载和更新模块。 #### 四、Java集合框架 **4.1 接口继承关系和实现** - **...
OSGi(Open Services Gateway Initiative)是一个开放的标准,用于创建模块化和动态的Java应用程序。它允许开发者将应用程序拆分成小的、独立的模块,这些模块称为服务或bundle,每个都有自己的类路径,并且可以在...
Apache Felix是一个流行的开源实现,遵循Java企业版(Java EE)中的服务组件运行时(OSGi)规范,用于创建模块化应用。在这个项目中,开发者可能在学习如何将应用分解为可独立更新和管理的模块。 描述中提到的链接...
Eclipse基于OSGi(Open Service Gateway Initiative)框架,采用模块化设计,使得每个功能都以插件的形式存在。这些插件之间通过API进行交互,形成了一个庞大的生态系统。Eclipse的插件由三部分组成:插件项目...
OSGi是一种Java平台上的服务导向架构,它允许应用程序以模块化的方式进行构建、部署和管理,使得组件能够独立升级、替换或动态发现彼此。 OSGi的核心概念包括: 1. **模块系统**:每个模块称为一个Bundle,封装了类...
为了更好地学习Eclipse插件开发,可以加入相关的Java学习群组,例如文档中提到的“Java学习群:***”,在其中可以与首席架构师以及其他学习者交流心得、共享资源,甚至能够免费接受首席架构师的讲课,这些都是非常...
1. **模块化架构**:JBoss7引入了全新的模块化设计理念,每个组件被划分为独立的模块,这使得应用程序的部署更加灵活,同时减少了类加载冲突的可能性。这种设计提高了服务器启动速度和内存效率。 2. **基于AS7的...
- OSGi(Open Service Gateway Initiative)是Eclipse的基础,它定义了一种模块化系统,使得插件可以独立更新和加载。 2. **插件开发环境搭建**: - 首先,你需要下载Eclipse IDE for Java Developers或Eclipse ...
### Fuse ESB 4.3.1 使用笔记 #### 一、概述 Fuse ESB (Enterprise Service Bus) 4.3.1 是一个强大的企业级服务总线平台,基于Apache Karaf容器构建,用于集成不同的应用程序和服务。它支持多种集成模式和技术栈,...
Eclipse采用插件化架构,每个功能模块都是一个插件,这些插件通过OSGi(开放服务网关协议)框架进行交互。开发者可以通过编写插件,扩展Eclipse的功能,如代码编辑器、调试器、构建工具等。 2. **Plugin.xml文件**...
Eclipse采用模块化设计,其架构可以分为以下几个层次: 1. **平台运行时(OSGi)** - 包含OSGi框架和插件运行时。 - 负责管理插件的生命周期、类加载器及服务注册等。 2. **SWT** - Swing Widget Toolkit的简称...
Eclipse基于OSGi框架,每个插件都是一个独立的模块,通过声明依赖关系与其他插件协同工作。在开始开发之前,你需要安装Eclipse IDE并配置相应的插件开发环境,这通常包括安装Plugin Development Environment (PDE)...