zoukankan      html  css  js  c++  java
  • 设计模式聚合和组合--代码执行

    ●简介:


    最近,我一直在寻找设计模式,经写过一篇文章:设计模式中的关系在代码中的实现


    之后他们问我说:聚合和组合在代码上如何表现出生命期的不同。由于当时是真心不懂。不敢回答。如今有一点点心得,和大家分享一下。


    ●定义:


    聚合:表示两个对象之间是总体和部分的弱关系,部分的生命周期能够超越总体。如电脑和鼠标。


    ▪大话上的聚合:



    ▪大话上的组合:


    表示两个对象之间是总体和部分的关系,部分的生命周期不能超越总体,或者说不能脱离总体而存在。

    组合关系的“部分”,是不能在总体之间进行共享的。



    ●异同点


    共同点:他们都是属于关联,总体与部分的关系。

    不同点:生命周期不同。聚合是独立的,不随总体共存亡的(生命周期不同步)。组合正好相反,与总体共存亡(生命周期同步)。


    ●代码中的实现


    ▪聚合


    在代码中的中的实现是比較灵活的,大雁聚合为雁群。仅仅要大雁类是雁群的成员变量即可了。


    代码有两种方式都是聚合:

    第一种方式:这样的方式一般用在大雁WideGoose是抽象类(父类)的时候。这时候,就能够传入不同的子类,这样就会使它调用的时候非常灵活。


    class WirdGooseAggregate
    {
    	private WideGoose widegoose;         //成员变量定义大雁
    	public SetWideGoose (WideGoose w)    //通过传參得到大雁的对象
    	{
    		this.widegoose = w;              
    	}
    }

    另外一种方式:这样的方式就是写死了,是不能灵活的,可是这样写也有它的优点,就是定义了一个初始值。在状态模式中就用到了这样的方式,事实上是定义了一个初始对象。


    class WirdGooseAggregate
    {
    	private WideGoose widegoose;         //成员变量定义大雁
    	public SetWideGoose ()               //通过传參得到大雁的对象
    	{
    		widegoose = new WideBlackGoose();    //WideBlackGoose是WideGoose的子类            
    	}
    }

    ▪组合关系


    在代码中就没有这样灵活了,它是强耦合的,它生命周期是同生同死的关系。我们知道一个对象被实例的时候就是我们意义上的“生”,因此我们就把组合的对象放在被组合对象的构造函数中:


    class Bird
    {
    	private Wing wing;         //成员变量定义翅膀
    	public Bird ()             //构造函数中实例化翅膀对象
    	{
    		wing = new Wing();             
    	}
    }

    总结


    我们学习东西的时候。非常想一下子就都要全懂了,事实上学习是一个不断思考、不断研究的东西。我们要做的是:知道它、研究它、会用它、交流它。






    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    产品易用性
    优化Compress components with gzip 问题
    转:稳定性测试
    Xray CA证书
    转:获取WEB各阶段响应时间
    测试用例编写注意事项
    用dd把一个空硬盘写满
    转:linux终端命令使用cpu负载到100
    JMeter命令行执行+生成HTML报告
    防F12扒代码:按下F12关闭当前页面
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4888218.html
Copyright © 2011-2022 走看看