美文网首页
适配器模式

适配器模式

作者: hao小子 | 来源:发表于2017-03-28 19:51 被阅读0次

    2017年3月24日16:38:39


    结构型模式

    描述如何将类或对象结合在一起形成更大的结构。

    --分为类结构型模式、对象结构型模式。


    几种结构性模式:

    模式名 --
    适配器模式 Adapter
    桥接模式 Bridge
    组合模式 Composite
    装饰模式 Decorator
    外观模式 Facade
    享元模式 FlyWeight
    代理模式 Proxy

    这里我只学习几种常用的

    适配器 组合 外观 代理


    适配器模式:

    类适配器 和 对象适配器

    这里是对象适配器

    这个用得比较多


    package ninthTestModel;
    
    /*
     * 原来有一个程序 使用鸭子对象 
     * 现在想让他使用火鸡对象
     * 写一个火鸡适配器 是使它看起来像鸭子...
     */
    
    //      -- 鸭子接口
    interface Duck{
        public void quack();
        public void fly();
    }
    
    //      -- 野鸭
    class MalardDuck  implements Duck{
    
        @Override
        public void quack() {
            // TODO Auto-generated method stub
            System.out.println("野鸭在叫...嘎嘎嘎");
        }
    
        @Override
        public void fly() {
            // TODO Auto-generated method stub
            System.out.println("野鸭在飞...呼呼呼");
        }
    }
    
    //      --火鸡接口
    interface Turcky{
        public void gobble();
        public void fly();
    }
    
    class WildTurcky implements Turcky{
    
        @Override
        public void gobble() {
            // TODO Auto-generated method stub
            System.out.println("野火鸡在叫...咕咕咕");
        }
    
        @Override
        public void fly() {
            // TODO Auto-generated method stub
            System.out.println("野火鸡在飞...呼呼呼");
        }
    }
    
    //  --火鸡适配器
    
    class TurckyAdapter implements Duck{
        Turcky turcky;//火鸡
        
        public TurckyAdapter(Turcky turcky) {
            // TODO Auto-generated constructor stub
            this.turcky=turcky;
        }
        /*
         * 相当于在适配器里面配置一个和原来类一样的方法 但是里面调用的是新的类的方法。
         * (non-Javadoc)
         * @see ninthTestModel.Duck#quack()
         */
        @Override
        public void quack() {
            // TODO Auto-generated method stub
            turcky.gobble();
        }
    
        @Override
        public void fly() {
            // TODO Auto-generated method stub
            
                turcky.fly();
            
        }
        
        //??需要使用鸭子对象
        public static void testDuck(Duck duck) {
            duck.quack();
            duck.fly();
        }
        
        
        
    }
    
    // 需要一个程序 用来使用
    
    /*
     * 有两个类 一个原先的使用类 一个最新的使用类
     * 适配器的使用
     * 给最新的使用类一个适配器 对它的方法进行封装
     * 从而使当你使用适配器的时候
     * 调用方法和原先类的调用方法一致
     * 但是你实际调用的是最新类的方法。
     * 
     * 
     */
    public class AdapterModel {
        public static void testDuck(Duck duck) {
            duck.quack();
            duck.fly();
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //原先的使用
            System.out.println("\n------这是原先的使用--------\n");
            Duck duck=new MalardDuck();
            duck.quack();
            duck.fly();
            
            System.out.println("\n------这是适配器的使用---------\n");
            //适配器的使用
            Turcky turcky=new WildTurcky();
            Duck turckyAdapter=new TurckyAdapter(turcky);
            turckyAdapter.quack();
            turckyAdapter.fly();
            
            System.out.println("\n---------测试适配器是否可以当做原先接口使用------\n");
            testDuck(turckyAdapter);
        }
    
    }
    
    

    输出结果:

    
    
    ------这是原先的使用--------
    
    野鸭在叫...嘎嘎嘎
    野鸭在飞...呼呼呼
    
    ------这是适配器的使用---------
    
    野火鸡在叫...咕咕咕
    野火鸡在飞...呼呼呼
    
    ---------测试适配器是否可以当做原先接口使用------
    
    野火鸡在叫...咕咕咕
    野火鸡在飞...呼呼呼
    
    
    

    相关文章

      网友评论

          本文标题:适配器模式

          本文链接:https://www.haomeiwen.com/subject/ziksottx.html