【小话设计模式】类之间的关系

4.组合(Composition)

定义:相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。

符号:带实心菱形实线箭头表示

1、合成关系是关联关系的一种,是比聚合关系还要强的关系。

2、它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

代码:

package com.ex.composition;
/**
 *
 * 项目名称:uml
 * 类名称:CPU
 * 类描述:  电脑的一种运算器件
 * 创建人:YinXiangBing
 * 创建时间:2014-6-20 下午04:23:33
 * @version 6.0
 *
 */
public class CPU {
	 private String code;
	 private String name;

	 public CPU(String code,String name){
	    	this.code = code;
	    	this.name = name;
	 }
}
package com.ex.composition;
/**
 *
 * 项目名称:uml
 * 类名称:Computer
 * 类描述:一种开发工具电脑
 * 创建人:YinXiangBing
 * 创建时间:2014-6-20 下午01:34:49
 * @version 6.0
 *
 */
public class Computer {
    private String code;
    private String name;
    private CPU cpu;

    //组合关系中的成员变量一般会在构造方法中赋值
    public Computer(String code,String name, CPU cpu){
    	this.code = code;
    	this.cpu = cpu;
    }
}

5.继承(Generalization)

定义:继承表示类与类(或者接口与接口)之间的父子关系。在java中,用关键字extends表示继承关系。通常所说的继承(特殊个体 is kind of 一般个体)关系。

符号:带空心箭头的实线线表示

箭头指向一般个体

代码:

package com.ex.generalization;
/**
 *
 * 项目名称:uml
 * 类名称:Animal
 * 类描述:动物
 * 创建人:YinXiangBing
 * 创建时间:2014-6-23 上午10:20:32
 * @version 6.0
 *
 */
public class Animal {

    public void eat() {
	}
    public void sleep() {
	}
}
package com.ex.generalization;
/**
 *
 * 项目名称:uml
 * 类名称:Bird
 * 类描述:鸟
 * 创建人:YinXiangBing
 * 创建时间:2014-6-23 上午10:20:49
 * @version 6.0
 *
 */
public class Bird extends Animal {
    public void fly(){

    }
}

6.实现(Implementation)

定义:表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。

符号:用虚线+空心箭头表示

箭头指向接口

    代码:

package com.ex.implementation;
/**
 *
 * 项目名称:uml
 * 类名称:USB
 * 类描述:USB接口
 * 创建人:YinXiangBing
 * 创建时间:2014-6-23 上午10:23:01
 * @version 6.0
 *
 */
public interface USB {
	 //接入电脑
	 public void connect();
	 //断开电脑
	 public void disConnect();

}
package com.ex.implementation;
/**
 *
 * 项目名称:uml
 * 类名称:Camera
 * 类描述:相机
 * 创建人:YinXiangBing
 * 创建时间:2014-6-23 上午10:44:10
 * @version 6.0
 *
 */
public class Camera implements USB {

	public void connect() {
		System.out.println("相机正常接入电脑");
	}

	public void disConnect() {
		System.out.println("相机正常断开电脑");
	}

}
package com.ex.implementation;
/**
 *
 * 项目名称:uml
 * 类名称:MP3
 * 类描述:MP3
 * 创建人:YinXiangBing
 * 创建时间:2014-6-23 上午10:44:38
 * @version 6.0
 *
 */
public class MP3 implements USB {

	public void connect() {
		System.out.println("MP3正常接入电脑");
	}

	public void disConnect() {
		System.out.println("MP3正常断开电脑");
	}

}
package com.ex.implementation;
/**
 *
 * 项目名称:uml
 * 类名称:电脑
 * 类描述:电脑
 * 创建人:YinXiangBing
 * 创建时间:2014-6-23 上午10:22:03
 * @version 6.0
 *
 */
public class Computer{

	public void useUSB(USB usb){
		usb.connect();
		usb.disConnect();
	}
    public static void main(String[] args){
	   	 Computer cpu = new Computer();
	   	 //相机
	   	 Camera cam = new Camera();
	   	 cpu.useUSB(cam);
	     //相机
	   	 MP3 mp3 = new MP3();
	   	 cpu.useUSB(mp3);
    }
}

【小话设计模式】类之间的关系,布布扣,bubuko.com

时间: 2024-10-23 12:45:07

【小话设计模式】类之间的关系的相关文章

【小话设计模式】面向对象设计原则

1.单一职责原则 单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成.英文缩写SRP  Single Responsibility Principle 单一职责原则-->"高内聚,低耦合",每个类应该只有一个职责,此外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 优点: 可以降低类的复杂度: 提高类的可读性,提高系统的可维护性: 变更引起的风险降低. 2.里氏替换原则 里氏

uml描述类与类之间的关系

工作时培训的时候公司同事讲过UML,当时没怎么听,后在在看相关技术书籍的时候,发现用到还不少,于是恶补了些.UML体系庞杂,非十天半月可以掌握,但是作为简单的工具使用,去看清楚系统的内在逻辑还是可以速成的.(非设计系统),股票市场是一场拼图游戏,而UML也可以作为拼图工具去参与面向对象体系软件设计的! 废话不多说,进入正题. 先介绍几款画UML的工具,三大知名VISIO,RationalRose,PowerDesign不多说,个人喜欢用开源的,一是免费,二是通常体积较小,运行起来比较快.我用的是

C#软件设计——小话设计模式原则之:开闭原则OCP

前言:这篇继续来看看开闭原则.废话少说,直接入正题. 软件设计原则系列文章索引 C#软件设计——小话设计模式原则之:依赖倒置原则DIP C#软件设计——小话设计模式原则之:单一职责原则SRP C#软件设计——小话设计模式原则之:接口隔离原则ISP C#软件设计——小话设计模式原则之:开闭原则OCP 一.原理介绍 1.官方定义 开闭原则,英文缩写OCP,全称Open Closed Principle. 原始定义:Software entities (classes, modules, functi

oc学习之封装与类之间的关系

1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码塞在函数/方法中. 好处: 屏蔽了内部的实现. 便于管理. 类是一种更高级别的封装: 1个类中封装数据的状态和行为. 将数据的状态和行为封装在了1个类中. 类中有很多复杂的实现. 对于外部而言无需关心. 只需要知道这个类是干啥的? 怎么用? 把哪些复杂的东西. 方法,属性.封装成1个类的整体. 2.

第十五节(多态,接口和抽象类的区别,类之间的关系)

多态的定义: 1. 多态是同一个行为具有多个不同表现形式或形态的能力 2. 多态性是对象多种表现形式的体现 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴等等. 那么我到宠物店说"请给我一只宠物",服务员给我小猫.小狗或者蜥蜴都可以,我们就说"宠物" 这个对象就具备多态性. 多态的条件是:有继承或实现,有方法覆盖或实现,父类对象(接口) 指向子类对象 public class Animal{ // 成员方法 pub

java中的面向对象和类之间的关系

1.面向对象 a.分析问题中需要用到哪些类以及对象 b.分析以上类中或对象中应该具有哪些属性及方法 c.分析类之间的关系 (合适的方法应该出现在合适的类中) 2.举例:模板-实物 a.白板笔 b.员工(年龄.姓名.性别.工作岗位) (显示姓名,年龄,修改姓名,修改年龄,变更工作岗位) (区分对象:一般通过方法是无法区分对象的,通过属性可以区分对象) 3.类与对象 a.类是具有共同特征的一类事物的一个抽象 b.对象是这个类具体的某一个实例 4.类(对象)之间的4种关系 a.依赖关系(Depende

Python之面向对象(二)类的空间问题及类之间的关系

6.3 类的空间问题及类之间的关系 类空间的问题 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex obj = A("alex") obj.age = 18 # 通过__init__方法添加 print(obj.__dict__) obj1 = A("wusir") obj.func("男") # 通过f

全面解释java中StringBuilder、StringBuffer、String类之间的关系

http://www.jb51.net/article/33398.htm String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似 1. String 类  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不

今天最主要的就是掌握了类与类之间的关系

今天编写出了表达式计算器的第一版程序,主要还是更加熟悉了类与类之间的关系.第一版程序有个问题,就是它任何情况下都执行右结合律,比如正常输入8-9+1,程序处理成8-(9+1).明天学习改进的方法. 今天整理了一下类与类之间各种关系的区别.如下文 http://www.cnblogs.com/mingdimowang-lyw/p/6598184.html 今天的学习是比较痛苦的,一度想让自己放弃. 后来冷静了一下,思考一下为什么会想放弃.其实是因为自己试图去完全靠自己编写程序,但是自己距离这个程度