设计模式-结构型软件设计模式(一)
来源:互联网 发布:js的缺点 编辑:程序博客网 时间:2024/05/21 14:43
组合模式
简介
组合模式允许一致的对待复杂和原始对象的接口,在面向对象编程技术中,组合对象是一个或者多个相似对象构成的对象,各个对象有相似的功能。关键的概念是客户类以相同的方式对待单独的对象与一组对象,即所谓的组合对象。
组合模式有时候又叫做部分-整体模式,在树形结构中模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式将对象组合成树形结构,以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
示例
Component类为组合模式中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。public abstract class ChessComponent{ public abstract void setPosition(int x,int y); public abstract in[] getPosition(); public abstract String showInfo(); public abstract int getColor();}组件class BlackChess extends ChessComponent{ int[] position = null; private static final int BLACK = 1; public void setPosition(int x,int y){...} public String showInfo(){...} public int getColor(){...} ...}class WhiteChess extends ChessComponent{ int[] position = null; private static final int WHITE = 0; public void setPosition(int x,int y){...} public String showInfo(){...} public int getColor(){...} ...}commposite表示组合部件,实现操作子部件的所有方法,实现所有在component的操作。class Composite extends ChessComponent{ private int[] position = null; private ArrayList<ChessComponent> chessArray = null; public void attach(ChessComponent piece) {...} public void detach(ChessComponent piece){...} public void removeAllElement(){...} ....}
示例二
component:public abstract interface Airforce{ public abstract String fight(); public abstract String getDescription();}public abstract class Fighter implements Airforce{ public abstract String fight(); public String getDescription(){return "Fighter";};}public abstract class Bomber implements Airforce{ public abstract String fight(); public String getDescription(){return "Bomber";};}给出具体的类实现public class F22 extends Fighter{ public String fight(){return "F22 Fighter";}; public String getDescription(){return "F22";};}public class B2 extends Bomber { public String fight(){return "B2 Fighter";}; public String getDescription(){return "B2";};}composite类public class AirUnit implements Airforce{ private ArrayList<Airforce> parts; public void attach(Airforce force){if(force!=null)parts.add(force);} public void detach(Airforce force){...} public String fight(){} public String getDescription(){return ...}}实现一个空军团,54个F22,12个轰炸机public class AirGroup extends AirUnit{ Airforce[] fighters = new Airforce[54]; Airforce[] bombers = new Airforce[12]; for(..) fight[i] = new F22();}
安全形式的组合模型
安全形式是指在composite类中声明所有的用来管理子类对象的方法,包括add(),remove()等。而在component接口和树叶类型的对象中不包含管理子类的对象的方法。
缺点:
安全形式的组合模型的缺点是。Component层次结构类的超类与组合子类的借口不一致。
透明形式的组合模型、
与安全形式的组合模型不同,透明形式的组合模型在component类中声明所有用来管理子类的方法
这样做的好处是所有的构建类具有相同的接口。缺点是不够安全。
阅读全文
0 0
- 设计模式-结构型软件设计模式(一)
- 设计模式-结构型软件设计模式(二)
- 设计模式-结构型软件设计模式(三)
- 设计模式-结构型软件设计模式(四)
- 设计模式-创建型软件设计模式(一)
- 设计模式-行为型软件设计模式(一)
- [设计模式]一、软件设计概要
- 设计模式之结构型模式一
- 设计模式-创建型软件设计模式(二)
- 设计模式-创建型软件设计模式(三)
- 设计模式-行为型软件设计模式(二)
- 设计模式-行为型软件设计模式(三)
- 设计模式-行为型软件设计模式(四)
- 设计模式-行为型软件设计模式(五)
- 设计模式-行为型软件设计模式(六)
- 软件设计模式---创建型模式(一)
- 设计模式 一 适配器模式 Adapter(结构型模式)
- 设计模式之结构型模式(一)-----桥接(bridge)模式
- spring <context:component-scan>使用说明
- AJAX跨域的常见方法
- [C++] 实现二叉搜索树
- Android开源项目推荐之「图片加载到底哪家强」
- 【选择排序】和【堆排序】
- 设计模式-结构型软件设计模式(一)
- LeakCanary从入门到源码分析
- Cocos2d-x 之动作 Action
- Python的排序功能
- popupwindow弹出的editTextView
- Oracle数据库基本了解
- CookieSyncManager与CookieManager
- 交易背书的基本工作流程
- 单设备登录遇到并发出现的问题