设计模式学习之适配器与外观模式

来源:互联网 发布:java的oa项目 编辑:程序博客网 时间:2024/05/16 19:22

定义:适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

适配器(Adapter)分为“对象(Object)”适配器和“类(Class)”适配器两种。 
在类适配器中,适配器继承了目标(Target)和被适配者(Adaptee);而对象适配器中,适配器利用组合的方式将请求传送给被适配者。

实例

让List类型支持枚举类型

public class ListEnumeration implements Enumeration {  
    private List list;  
    public ListEnumeration(List al) {  
        this.list = al;  
    }  
    public boolean hasMoreElements() {  
        return list.iterator().hasNext();  
    }  
    public Object nextElement() {  
        return list.iterator().next();  
    }  
}

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

结构图如下:

适用性:  
1 .为一个复杂子系统提供一个简单接口。
2 .提高子系统的独立性。
3 .在层次化结构中,可以使用 Facade 模式定义系统中每一层的入口。
实例:
// 电源  
public class Power {  
    public void connect() {  
        System.out.println("The power is connected.");  
    }  
    public void disconnect() {  
        System.out.println("The power is disconnected.");  
    }  
}  
// 主板  
public class MainBoard {  
    public void on() {  
        System.out.println("The mainboard is on.");  
    }  
  
    public void off() {  
        System.out.println("The mainboard is off.");  
    }  
}  
// 硬盘  
public class HardDisk {  
    public void run() {  
        System.out.println("The harddisk is running.");  
    }  
  
    public void stop() {  
        System.out.println("The harddisk is stopped.");  
    }  
}   
// 操作系统  
public class OperationSystem {  
    public void startup() {  
        System.out.println("The opertion system is startup.");  
    }  
  
    public void shutdown() {  
        System.out.println("The operation system is shutdown.");  
    }  
}  
// 计算机外观  
public class Computer {  
    private Power power;  
  
    private MainBoard board;  
  
    private HardDisk disk;  
  
    private OperationSystem system;  
  
    public Computer(Power power, MainBoard board, HardDisk disk, OperationSystem system) {  
        this.power = power;  
        this.board = board;  
        this.disk = disk;  
        this.system = system;  
    }  
  
    public void startup() {  
        this.power.connect();  
        this.board.on();  
        this.disk.run();  
        this.system.startup();  
    }  
  
    public void shutdown() {  
        this.system.shutdown();  
        this.disk.stop();  
        this.board.off();  
        this.power.disconnect();  
    }  
}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机4g网络变2g怎么办 生存战争2吃了腐烂的食物后怎么办 古筝调音 d的显示为b怎么办 消防建审没有原有的结构图纸怎么办 生石灰弄到脸上用水洗后发热怎么办 吃了没熟的鹅肝怎么办 蹲式厕所被袜子堵了怎么办 自热包的水喝了怎么办 火锅发热包不小心吃了怎么办 塑料螺旋饭盒盖子被吸住了怎么办 昨晚喝太多酒今天排尿拍不出怎么办 开光过的貔貅摔坏一点嘴巴怎么办 诺基亚6第二代忘记解屏密码怎么办 工厂搬迁已经般空了工人怎么办 被上司强行换了一个岗位该怎么办 上司要调整我岗位我该怎么办 我被别人打伤了警察不管怎么办 郑州共享汽车小黄车路上坏了怎么办 爱跟别人聊朋友的事怎么办 任职履历上学历写错了怎么办 六个月的宝宝老长婴儿湿疹怎么办 入伍前驾照没考完退伍后过期怎么办 在电脑上玩英雄联盟没有声音怎么办 梦幻西游新区抢不到副本积分怎么办 倒车时遇上机动车碰瓷的怎么办 电瓶车相撞对方全责但不赔偿怎么办 轻微刮蹭逃逸对方想多要钱怎么办 正常开车撞伤了闯红灯的人怎么办 发现小事故要保持现场堵车怎么办 私处刮毛外面皮肤不小心弄伤怎么办 老婆骂孩子不准老公带饿小孩怎么办 结婚3年妻子不让丈夫碰怎么办 老婆出轨现在没证据他要离婚怎么办 结婚后老婆不让碰分房睡离婚怎么办 电动车调速把手变速挡坏了怎么办 路边车辆贴条了超过15天了怎么办 违停交警拍照了没贴条 照片怎么办 支付宝违章缴费罚单输错了怎么办 交警查酒驾跑了把警车撞了怎么办 禁止进入待行区的时候进入了怎么办 今天开车把72岁老太婆撞了怎么办