Java如何实现动态的组合, Thinking in Java 这本书中 说过 动态的组合就是聚合, 谁能给我举个简单例子?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java如何实现动态的组合, Thinking in Java 这本书中 说过 动态的组合就是聚合, 谁能给我举个简单例子?相关的知识,希望对你有一定的参考价值。
谁能给我举个 简单的 “动态“ 组合的例子, 小弟不胜感激!!!!!
(组合的关系就是拥有的关系 )
其中,聚合和组合都属于关联。
在具体编程中:
依赖表现为如果A类依赖于B,则B体现为A的局部变量,方法参数或静态方法的调用。
eg:
class B
Static void function1();
void function2();
public class A
public static void main(String[] args)
....
B.function1();//A类中调用了B类的静态方法
....
聚合和组合都属于关联,很难区分,但是只要记住一点,区分它们就容易多了:
处于聚合关系的两个类生命周期不同步,则是聚合关系;处于组合关系的两个类的生命周期同步;
eg:
聚合关系,当A创建的时候,B不一定创建;当A消亡时,B不一定消亡。
class A
private B;
class B
....
组合关系,当创建一个A对象时,也会创建一个B对象;当A对象消亡时,作为A的属性的B对象也会消亡。
class A
private b=new B();
....
class B
....
参考技术A 所谓动态 就是数组长度可以增加
String[] str = new String[10] //初始长度是10
当你需要将这个str的长度增加的时候
String[] strTemp = new String[20] //新数组长度是20
然后把str数组的数据放到strTemp数组的前十位
然后再 str = strTemp ;
这样str的长度由原来10变成了现在的20
当然 推荐使用集合 因为集合也是数组 只是长度自动增长 参考技术B 留言等待答案,共同学习 参考技术C 你想问的是工厂方法嘛? 表述不是很清楚,有点不大理解!
你想说的 是不是在 类的 构造过程中 创建啊?
那就是面向接口编程,可以用 工厂方法写在配置文件 或者XML 等里边,然后不修改源码的情况下实现动态装配。
我也不清楚 你想问的是什么 或者你问的是动态代理? 详细一点吧
thinking in java ----reading note
# thinking in java 4th
# reading note
# victor
# 2016.02.10
chapter 1 对象入门
1.1 抽象的进步
(1) 所有东西都是对象。
(2) 程序是一大堆对象的组合,对象间通过消息联系。
(3) 通过封装现有对象,可制作出新型对象。
(4) 每个对象都有一种类型(某个类的实例)。
(5) 同一类的所有对象都能接受相同的消息。
1.2 对象的接口 & 1.3 实现方法的隐藏
接口规定了可对一个特定的对象发出哪些请求(访问权限)。
public: 任何人均可访问。
private: 只有自己可访问。
protected: 本包内均可访问,除自己所在包之外只有继承的类可访问。
default: 所在package范围内使用。
1.4 方案的重复使用
在现有类的基础上组织一个新类(将现有类的对象置入一个新类),有时组织也被称作"包含"关系,比如一辆车包含了一个发动机.
对象的组织具有很大的灵活性,新类的成员对象通常设为私有(private),这样可以在不干扰客户代码的前提下,从容地修改.
1.5 继承:重新使用接口
使用继承相当于创建了一个新类,新类不仅包含了现有类的成员,同时,复制了基础类的接口。
若只是继承一个类,而不作其他事情,那么来自基础类的接口就会直接照搬到派生类。这意味着派生类和基础类之间存在一种"等价"关系。完全可以将派生类的对象换成基础类的对象。
有两种方法将派生类和基础类区分开:
(1) 为派生类添加新函数。
(2) 改善基础类的函数,即为派生类的函数建立一个新定义(重写)。
很多时候,我们必须为衍生类加入新的接口元素,所以不仅扩展了接口,也创建了一种新的类型。这种新类型仍可以替换成基础类型,但这是"类似"的关系(父类不能调用子类的新方法)。
1.6 多形对象的互换使用
base class shape(method: draw();erase();move();...)
sub class: Circle;Square;Triangle;
对于这一系列类,我们要将派生类的对象当作基础类的一个对象对待。如果增加一个子类:三角形,也能很好适用,这样程序有了扩展性。
void dostuff(Shape s){
s.erase();
s.draw();
}
Circle c = new Circle();
dostuff(c);
dostuff(c)将派生类Circle当作基类shape处理,这一过程叫作"upcasting"(上溯造型)。
1.6.1 动态绑定
将一条消息发给对象时,如果并不知道对象的具体类型是什么(Cricle or Square ...),但是采取的行动是正确的,这种情况就叫作"多形性",面向对象语言实现多形性的方法叫作"动态绑定"。
1.6.2 抽象的基础类和接口
抽象类和抽象方法
1.7 对象的创建和存在时间
1.8 解决错误
exception 控制 : try catch throw
1.9 多线程
线程与锁:同一时间只有一个线程使用特定的内存空间。程序员创建一个对象,代表一把锁,所有线程访问资源时都必须检查这把锁。
1.10 永久性
程序结束后,对象的生存期也结束。如果将对象声明成"永久性",即程序停止运行后,对象也能继续存在。
1.11 java & web
1.12 分析与设计
以上是关于Java如何实现动态的组合, Thinking in Java 这本书中 说过 动态的组合就是聚合, 谁能给我举个简单例子?的主要内容,如果未能解决你的问题,请参考以下文章
Serializable与transient的联合使用:动态管理成员属性——《Thinking in Java》随笔033
Thinking in Java第七章学习笔记----复用类
thinking in java ----reading note