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 第七章 3-1

thinking in java ----reading note

JAVA I/O系统 Thinking in Java 之 File类

[THINKING IN JAVA]复用类