Java程序设计的基本原则1
★ 面向接口编程
1)这是Java编程里面大家公认的第一原则。
2)接口很重要的一个功能:封装隔离
3)接口是功能块或封装块的外观
图片:
例如:(部分代码在后边)
package cn.hncu.patterns.exercise.interfaceExercise;
import cn.hncu.patterns.exercise.interfaceExercise.imp.AA;
import cn.hncu.patterns.exercise.interfaceExercise.imp.BB;
import cn.hncu.patterns.exercise.interfaceExercise.imp.CC;
import cn.hncu.patterns.exercise.interfaceExercise.inter.C;
/*
* 假设某公司接到一个订单,
* 客户要求:
* 1)输出"aaaaaaaaaaaaa"
* 过了不久客户对该公司提出了一个新的要求,
* 2)输出"bbbbbbbbbbbbbbb"
* 当软件发布后,客户提出添加一个新的功能,
* 3)这时要输出"cccccccccccccc"
*/
public class Client {
public static void main(String[] args) {
// test1();
// test2();
/*
* 项目做法,
* 记住软件是“对新增开放,对修改关闭”
* 定义一个接口,
* Java虚拟机会调用Class.forName("CC.class")方法,
* 找到该接口的具体实现类。
*/
C c = new CC();
c.t3();// 输出cccccccccccccc
}
private static void test2() {
BB b = new BB();
b.t2();// 输出bbbbbbbbbbbbbbb
}
private static void test1() {
AA a = new AA();
a.t1();// 输出aaaaaaaaaaaaa
}
}
具体思想:
-----面向接口编程思想
接口及相关机制最基本的作用:通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。根据接口可以了解对象的交互界面,而不需要了解对象所属的类。
面向对象程序设计讲究“提高内聚,松散耦合”,那么不同的程序模块怎么相互访问呢,就是通过接口,也就是接口是各部分对外的统一外观。接口在Java程序设计中体现的思想就是封装隔离,因为接口只是描述一个统一的行为,所以开发人员在面向接口编程时并不关心具体的实现。
由以上讲到的接口的作用和基本思想可以看到,接口在面向对象的Java程序设计中占有举足轻重的地位。事实上在设计阶段最重要的任务之一就是设计出各部分的接口,然后通过接口的组合,形成程序的基本框架结构。
-----对于行为模型,优先选用接口,尽量少用抽象类
-----既为约束子类的功能,又要提供一些公共的功能,就选用抽象类
★ 优先使用对象组合而非类继承
package cn.hncu.patterns.exercise.interfaceExercise;
import cn.hncu.patterns.exercise.interfaceExercise.imp.AA;
import cn.hncu.patterns.exercise.interfaceExercise.inter.A;
/*
* 假如Test类想用A类中的函数t1(),
* 那么我们该怎么选择能?
* 下面的两种方法我们称子为危险的游戏平衡。
*/
public class Test {
/*
* 第一种定义一个类:
* 称为饿汉式
* A为接口
* AA实现了A接口的类
*/
A a = new AA();
public void t1(){
a.t1();
}
/*
* 第二种方法,
* 调用t2()方法时才会用t1()方法,
* 称为懒汉式
*/
public void t2(){
new AA().t1();
}
}
class Test1 extends AA {
/*
* 方法1
*/
public void t1(){
super.t1();
}
/*
* 方法2,
* 可以直接调用
*/
}
★ 分层( 最典型的三层结构: 表现层 --> 逻辑层 --> 数据层 )
博客超链接:点击打开链接
思想图解:
★ 层间交互的基本原则
① 表现层调用逻辑层,逻辑层调用数据层,不可以反过来。
② 层间交互也应该通过接口进行调用,以确保各层的实现独立变化。
第一部分代码:
package cn.hncu.patterns.exercise.interfaceExercise.imp;
import cn.hncu.patterns.exercise.interfaceExercise.inter.A;
public class AA implements A {
@Override
public void t1() {
System.out.println("aaaaaaaaaaaaa");
}
}
package cn.hncu.patterns.exercise.interfaceExercise.imp;
import cn.hncu.patterns.exercise.interfaceExercise.inter.B;
public class BB implements B {
@Override
public void t2() {
System.out.println("bbbbbbbbbbbbbbb");
}
}
package cn.hncu.patterns.exercise.interfaceExercise.imp;
import cn.hncu.patterns.exercise.interfaceExercise.inter.C;
public class CC implements C {
@Override
public void t3() {
System.out.println("cccccccccccccc");
}
}
package cn.hncu.patterns.exercise.interfaceExercise.inter;
public interface A {
public void t1();
}
package cn.hncu.patterns.exercise.interfaceExercise.inter;
public interface B {
public void t2();
}
package cn.hncu.patterns.exercise.interfaceExercise.inter;
public interface C {
public void t3();
}
第二部分代码:
无。。
第三部分代码:
无。。
第四部分代码:
无。。