设计模式-结构型软件设计模式(一)

组合模式

简介

组合模式允许一致的对待复杂和原始对象的接口,在面向对象编程技术中,组合对象是一个或者多个相似对象构成的对象,各个对象有相似的功能。关键的概念是客户类以相同的方式对待单独的对象与一组对象,即所谓的组合对象。
组合模式有时候又叫做部分-整体模式,在树形结构中模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式将对象组合成树形结构,以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
这里写图片描述

示例

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类中声明所有用来管理子类的方法
透明组合模型

这样做的好处是所有的构建类具有相同的接口。缺点是不够安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一夜了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值