Java设计思想首部曲

组件封装体设计思想

设计思想讲解:
对“组件”概念的理解:从设计角度来看,本质上,系统、子系统、模块、组件等这些都是一个组件,只是根据其相对大小而给予的一个称呼。如有的软件项目称为系统,但如果把它整合到一个更大的项目中,那它就被称为一个子系统甚至模块或组件了。如一个类似航天航空那样的大项目,其中的一个小模块比别人的整个系统都要大多少倍。这就好比大公司的一个部门,比别人一个公司的规模还要大得多。
组件:能完成一定功能的封装体。即它里面的所有东西都是封装起来,不对外开放,只提供相应的功能调用(接口),如空调,里面的所有东西都封装在内,对外只提供电源插头、控制面板和进出风口等接口。我们不需要知道它里面的压缩机、内部电路部件、工作原理这些东西,只需要知道如何使用(与其它组件对接上相应的接口,传参调用)就行了。
总之,组件是一个封装体,封装体的概念就是自身能够完成一定的功能,且自身内部不对外。小到一个类,大到整个系统,从设计角度上讲,都可以称为组件。
一个组件,设计好之后,总有一部分要对外,那对外的部分就是接口(API,应用程序接口)。采用对外接口的好处是:只要接口不变,里面的东西可以随意更新维护,不影响其它交互组件的设计与使用。同时,里面的部分还可以隐藏设计细节(这对外部的使用者其实也会带来很大的便利,这就好象一台空调,如果把内部的东西全部摊开不封装,使用者用起来也会非常不方便,功能调用接口不直观)。总之,如果组件之间需要参与到彼此的细节当中去才能相互工作运转,这对组件的生产者与使用者都是非常不方便的,对整个系统的开发设计与维护同样非常不利(一个组件的修改要影响到所有使用它的其他组件,要通知所有其它组件的开发者进行修改,被动修改的组件进而又会影响到所有使用该组件的另一些组件,因此系统维护的麻烦是显然的)。

/*
 * 对象组合设计思想
 * 在一个项目里面,优先使用对象的组合而不是继承
 * 继承是一种资源,对象组合正好可以将其保留
 * 
 * 另一方面,如果使用继承,只能是单继承
 */
public class A {
	//对象组合方法1:
	//内存占用多,对象存留时间长,在Web项目里面的做法通常是这种
	B b = new B();
	public void f1(){
		b.f3();
		b.f4();
	}
	
	//对象组合方法2:
	//节省内存,速度慢
	public void f2(){
		new C().f5();
		new C().f6();
	}
}

面向接口编程思想

接口及相关机制最基本的作用:面向接口思想是程序设计的第一原则!通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。根据接口可以了解对象的交互界面,而不需要了解对象所属的类。
面向对象程序设计讲究“提高内聚,松散耦合”,那么不同的程序模块怎么相互访问呢,就是通过接口,也就是接口是各部分对外的统一外观。接口在Java程序设计中体现的思想就是封装隔离,因为接口只是描述一个统一的行为,所以开发人员在面向接口编程时并不关心具体的实现。
由以上讲到的接口的作用和基本思想可以看到,接口在面向对象的Java程序设计中占有举足轻重的地位。事实上在设计阶段最重要的任务之一就是设计出各部分的接口,然后通过接口的组合,形成程序的基本框架结构

对于行为模型,优先选用接口,尽量少用抽象类。既为约束子类的功能,又要提供一些公共的功能,就选用抽象类

内聚就是指组件所有功能尽量在内部实现,所需要的功能尽量在内部都能够找到,即使是小到一个类也一样,一个方法所需要的其它方法尽量在该类内部都实现了。
耦合是指组件之间的横向联系,即一个组件要使用别的组件的功能。此时,如果别的组件修改了,那么当前组件也要进行修改。当然,我们也不可能把所有的功能都在内部实现,跟外部完全没有任何交互(除非只写一个HelloWorld)。类的设计有一个原则,就是类的功能要单一(不能把所有的功能都写在一个类中)。因此,这两者间要进行权衡。这样,一个组件在设计时肯定是要和其它组件耦合的,为了减少耦合时产生的连动影响同时又要保持内聚性,采用面向接口编程是比较合理的解决方案,接口体现的“封装隔离”的设计思想,其中的封装就是提高内聚,而隔离就是减少耦合。组件中设计时,内部实现都封装隐藏起来,对外只提供接口(如果组件修改了,只要接口没变,使用该组件的其它组件就不用修改。一方面让组件间的耦合松散了,另一方面也实现对组件内部实现的封装)。
接口本身不会增加程序的功能(因为它没有实现代码),但是采用接口可以让整个程序的体系结构更加灵活,它的作用不要体现在体系结构设计上,使用程序更容易扩展。

/*
 * 面向接口编程是第一原则
 * 具有高内聚,低耦合的特点
 * 普通的类只能单继承,但是接口可以多继承
 * 接口本质上也是一个类,它继承自Object,所以通过接口可以访问Object中的所有方法
 */
public interface Inte {
	//public abstract是可以省去的,因此需要注意权限
	public abstract void fun1(Object object);
}
import org.junit.Test;

public class Impl implements Inte{
	@Override
	public void fun1(Object object) {
		System.out.println(object);
	}
	/*
	 * 不能直接对实现方法进行测试。。。
	 */
	@Test
	public void test(){
		fun1(1);
	}
}

经典三层结构设计模式


  • 表现层功能:展示数据、人机交互、收集参数调用逻辑层。
  • 逻辑层功能:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层。
  •  数据层功能:实现数据持久化、实现对象和持久化数据的双向映射。

面向接口思想和三层结构设计模式我之前写过一个小程序的,有兴趣的博友可以参考下:  联系人信息管理小程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值