- 浏览: 469566 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
此去经年雪123:
为啥生成的是乱码 你好
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
alonglw:
zxf0089216 写道1.为什么每次都是10001RSAK ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
zxf0089216:
1.为什么每次都是10001RSAKeyPair(" ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
dunhanson:
后台的测试main方法都能加密解密。前台加密后的密文交给后台解 ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
map612:
wula0010 写道仔细看了下,可以运行RSAUtil.ma ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
Composite
定義
:
將物件以樹形結構組織起來
,
以達成
“
部分-整體
”
的層次結構,使得用戶端對單個物件和組合物件的使用具有一致性。
Composite 比較容易理解,想到 Composite 就應該想到樹形結構圖。組合體內這些物件都有共同介面 , 當組合體一個物件的方法被呼叫執行時, Composite 將遍曆 (Iterator) 整個樹形結構 , 尋找同樣包含這個方法的物件並實現呼叫執行。可以用牽一動百來形容。
所以 Composite 模式使用到 Iterator 模式,和 Chain of Responsibility 模式類似。
Composite
好處
:
1.
使用戶端呼叫簡單,用戶端可以一致的使用組合結構或其中單個物件,用戶就不必關係自己處理的是單個物件還是整個組合結構,這就簡化了用戶端代碼。
2.
更容易在組合體內加入物件部件。
用戶端不必因爲加入了新的物件部件而更改代碼。
如何使用
Composite?
首先定義一個介面或抽象類別,這是設計模式通用方式了,其他設計模式對介面內部定義限制不多,
Composite
卻有個規定,那就是要在介面內部定義一個用於訪問和管理
Composite
組合體的物件們(或稱部件
Component
)。
下面的代碼是以抽象類別定義,一般儘量用介面 interface,
public abstract class Equipment |
抽象類別 Equipment 就是 Component 定義,代表著組合體類別的物件們 ,Equipment 中定義幾個共同的方法。
public class Disk extends Equipment |
Disk
是組合體內的一個物件,或稱一個部件,這個部件是個單獨元素
( Primitive)
。
還有一種可能是,一個部件也是一個組合體,就是說這個部件下面還有
'
兒子
'
,這是樹形結構中通常的情況,應該比較容易理解。現在我們先要定義這個組合體:
abstract class CompositeEquipment extends Equipment { private int i=0; // 定義一個 Vector 用來存放 ' 兒子 ' private Lsit equipment=new ArrayList(); public CompositeEquipment(String name) { super(name); } public boolean add(Equipment equipment) { this.equipment.add(equipment); return true; } public double netPrice() { double netPrice=0.; Iterator iter=equipment.iterator(); for(iter.hasNext()) netPrice+=((Equipment)iter.next()).netPrice(); return netPrice; } public double discountPrice() { double discountPrice=0.; Iterator iter=equipment.iterator(); for(iter.hasNext()) discountPrice+=((Equipment)iter.next()).discountPrice(); return discountPrice; }
//
注意這裏,這裏就提供用於訪問自己組合體內的部件方法。
|
上面 CompositeEquipment 繼承了 Equipment, 同時爲自己裏面的物件們提供了外部訪問的方法 , 重載了 Iterator,Iterator 是 Java 的 Collection 的一個介面,是 Iterator 模式的實現。
我們再看看 CompositeEquipment 的兩個具體類別 : 盤盒 Chassis 和箱子 Cabinet ,箱子裏面可以放很多東西,如底板,電源盒,硬碟盒等;盤盒裏面可以放一些小設備,如硬碟 軟盤機等。無疑這兩個都是屬於組合體性質的。
public class Chassis extends CompositeEquipment public class Cabinet extends CompositeEquipment |
至此我們完成了整個 Composite 模式的架構。
我們可以看看用戶端呼叫
Composote
代碼
:
Cabinet cabinet=new Cabinet("Tower");
Chassis chassis=new Chassis("PC Chassis");
//
將
PC Chassis
裝到
Tower
中
(
將盤盒裝到箱子裏
)
cabinet.add(chassis);
//
將一個
10GB
的硬碟裝到
PC Chassis (
將硬碟裝到盤盒裏
)
chassis.add(new Disk("10 GB"));
//
呼叫
netPrice()
方法
;
System.out.println("netPrice="+cabinet.netPrice());
System.out.println("discountPrice="+cabinet.discountPrice());
上面呼叫的方法 netPrice() 或 discountPrice() ,實際上 Composite 使用 Iterator 遍曆了整個樹形結構 , 尋找同樣包含這個方法的物件並實現呼叫執行。
Composite 是個很巧妙體現智慧的模式,在實際應用中,如果碰到樹形結構,我們就可以嘗試是否可以使用這個模式。
以論壇爲例,一個版 (forum) 中有很多帖子 (message), 這些帖子有原始貼,有對原始貼的回應貼,是個典型的樹形結構,那麽當然可以使用 Composite 模式,那麽我們進入 Jive 中看看,是如何實現的。
Jive
解剖
在
Jive
中
ForumThread
是
ForumMessages
的容器
container(
組合體
)
。也就是說,
ForumThread
類似我們上例中的
CompositeEquipment
。它和
messages
的關係如圖:
[thread]
|- [message]
|- [message]
|- [message]
|- [message]
|- [message]
我們在 ForumThread 看到如下代碼:
public interface ForumThread {
public void deleteMessage(ForumMessage message)
} |
類似 CompositeEquipment, 提供用於訪問自己組合體內的部件方法 : 增加 刪除 遍曆。
結合我的其他模式中對 Jive 的分析,我們已經基本大體理解了 Jive 論壇體系的框架,如果你之前不理解設計模式,而直接去看 Jive 源代碼,你肯定無法看懂。
:)
发表评论
-
设计模式之Factory
2009-10-23 16:52 849定义:提供创建对象的 ... -
設計模式之Prototype(原型)
2009-10-23 16:51 798定義: 用原型實例指定創建物件的種類,並且通過拷貝這 ... -
设计模式之Singleton(单态)
2009-10-23 16:51 750定义 : Singleton模式主要作用是保证在Jav ... -
設計模式之Builder
2009-10-23 16:50 778Builder 模式定義 : 將一個複雜物件 ... -
設計模式之Facade(外觀)
2009-10-23 16:50 854Facade 的定義 : 爲子系統中的一組 ... -
設計模式之Proxy(代理)
2009-10-23 16:49 1063理解並使用設計模式 , 能夠培養我們良好的面向物件編程 ... -
設計模式之Adapter(適配器)
2009-10-23 16:49 891定義 : 將兩個不相容的類別糾合在一起使用 ... -
設計模式之Decorator(油漆工)
2009-10-23 16:48 818Decorator常被翻譯成" ... -
設計模式之Bridge
2009-10-23 16:47 867Bridge定義 : 將抽象和行為劃分開來,各自獨立,但 ... -
設計模式之Template
2009-10-23 16:47 720Template 定義 : 定義一個操作中演算法 ... -
設計模式之Flyweight(享元)
2009-10-23 16:46 852Flyweight 定義 : 避免大量擁 ... -
設計模式之Memento(備忘機制)
2009-10-23 16:46 745Memento 定義 : memento 是一 ... -
設計模式之Observer
2009-10-23 16:45 778Java 深入到一定程度 , 就不可避免的碰到設計模 ... -
設計模式之Command
2009-10-23 16:44 739Command 模式是最讓我疑惑的一個模式 , 我在 ... -
設計模式之Chain of Responsibility(職責鏈)
2009-10-23 16:43 832Chain of Responsibility 定義 ... -
設計模式之State
2009-10-23 16:43 791State 的定義 : 不同的狀態 , ... -
設計模式之Strategy(策略)
2009-10-23 16:42 754Strategy 是屬於設計模式中 物件行爲型模 ... -
設計模式之Mediator(仲介者)
2009-10-23 16:41 851Mediator 定義 : 用一個仲介物件來封裝 ... -
設計模式之Visitor
2009-10-23 16:40 957Visitor 定義 作用於某個物件群中各 ... -
設計模式之Interpreter(解釋器)
2009-10-23 16:40 765Interpreter 定義 : 定義語言的文法 ...
相关推荐
组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...
组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,这种模式常用于需要处理树形结构的数据...
组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够以统一的方式处理单个对象和对象集合。在C++中,组合模式的应用可以帮助我们构建灵活且易于操作的对象层次结构,使得客户端...
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对单个对象和组合对象进行一致性的操作处理,即客户程序可以像操作单个对象...
这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的...
### C#面向对象设计模式纵横谈之Composite组合模式解析 #### 标题解析与核心概念 标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,...
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第9节:结构型模式Composite组合模式
**设计模式面面观:组合模式(Composite Pattern)** 组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,...
结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中,有两种基本类型的对象:叶...
结构型设计模式则关注如何组合和组织类与对象,以达到更好的结构。其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和...
组合模式是一种结构型设计模式,它将对象组织成树形结构,使得用户可以对单个对象和对象集合进行统一操作。这种模式在处理部分与整体关系时非常有用,允许我们一致地处理单个对象和对象容器。组合模式的关键在于...
**组合模式**(Composite Pattern)是一种常用的结构型设计模式,主要用于构建具有层次结构的对象系统。它允许客户端以一致的方式处理单个对象和组合对象,简化了高层模块的调用。通过组合模式,可以将多个对象组织成...
组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构...
C++设计模式之组合模式(Composite) 组合模式(Composite)是一种结构型设计模式,用于描述分支包含关系,也就是我们说的树形关系。其对象分为枝和叶,每一枝可包含枝和叶,直到全部为叶节点。 组合模式的主要...
组合模式是一种结构型设计模式,它允许我们创建部分-整体层次结构,使得部分与整体具有相同的行为。在C#中,这种模式可以帮助我们构建复杂的树形结构,使得客户端代码可以一致地处理单个对象和对象集合。让我们深入...