• 【设计模式】6、适配器模式


    抽象类

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:适配器模式
     6  *         将一个类的接口转换成客户希望的另外一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
     7  * 适用性:你想使用一个已经存在的类,而它的接口不符合你的需求
     8  *          你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
     9  *         你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的类接口
    10  * 时间:2016年2月17日下午5:43:46
    11  * 作者:cutter_point
    12  */
    13 public abstract class Player
    14 {
    15     protected String name;    //运动员名字
    16     
    17     public Player(String name)
    18     {
    19         this.name = name;
    20     }
    21     
    22     //进攻
    23     public abstract void attack();
    24     //防守
    25     public abstract void defense();
    26 }

    前锋

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:这个是我们的前锋类,这个我们不需要适配
     6  * 时间:2016年2月17日下午5:50:01
     7  * 作者:cutter_point
     8  */
     9 public class Forwards extends Player
    10 {
    11 
    12     public Forwards(String name)
    13     {
    14         super(name);
    15     }
    16 
    17     @Override
    18     public void attack()
    19     {
    20         System.out.println("前锋" + name + "进攻");
    21     }
    22 
    23     @Override
    24     public void defense()
    25     {
    26         System.out.println("前锋" + name + "防守");
    27     }
    28 
    29 }

    中锋

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:我们的中锋类
     6  * 时间:2016年2月17日下午5:54:50
     7  * 作者:cutter_point
     8  */
     9 public class Center extends Player
    10 {
    11 
    12     public Center(String name)
    13     {
    14         super(name);
    15     }
    16 
    17     @Override
    18     public void attack()
    19     {
    20         System.out.println("中锋" + name + "进攻");
    21     }
    22 
    23     @Override
    24     public void defense()
    25     {
    26         System.out.println("中锋" + name + "防守");
    27     }
    28 
    29 }

    后卫

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:后卫
     6  * 时间:2016年2月17日下午5:56:12
     7  * 作者:cutter_point
     8  */
     9 public class Guards extends Player
    10 {
    11 
    12     public Guards(String name)
    13     {
    14         super(name);
    15     }
    16 
    17     @Override
    18     public void attack()
    19     {
    20         System.out.println("后卫" + name + "进攻");
    21     }
    22 
    23     @Override
    24     public void defense()
    25     {
    26         System.out.println("后卫" + name + "防守");
    27     }
    28 
    29 }

    翻译者,我们的适配器类

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:翻译者,为了适配外籍中锋
     6  * 时间:2016年2月17日下午6:00:36
     7  * 作者:cutter_point
     8  */
     9 public class Translator extends Player
    10 {
    11     
    12     private ForeignCenter fc = new ForeignCenter();
    13     
    14     public Translator(String name)
    15     {
    16         super(name);
    17         fc.setName(name);
    18     }
    19 
    20     @Override
    21     public void attack()
    22     {
    23         fc.ForeignAttack();
    24     }
    25 
    26     @Override
    27     public void defense()
    28     {
    29         fc.foreignDefense();
    30     }
    31 
    32 }

    被适配类,外籍中锋

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:外籍中锋
     6  * 时间:2016年2月17日下午5:57:09
     7  * 作者:cutter_point
     8  */
     9 public class ForeignCenter
    10 {
    11     private String name;
    12     
    13     //默认构造函数
    14     public ForeignCenter()
    15     {}
    16     
    17     public ForeignCenter(String name)
    18     {
    19         this.name = name;
    20     }
    21     
    22     //进攻
    23     public void ForeignAttack()
    24     {
    25         System.out.println("foreignCenter" + name + "attack !!");
    26     }
    27     
    28     //防守
    29     public void foreignDefense()
    30     {
    31         System.out.println("foreignCenter" + name + "defense !!");
    32     }
    33 
    34     public String getName()
    35     {
    36         return name;
    37     }
    38 
    39     public void setName(String name)
    40     {
    41         this.name = name;
    42     }
    43     
    44 }

    测试代码:

     1 package com.shejimoshi.structural.Adapter;
     2 
     3 
     4 /**
     5  * 功能:适配器模式的使用
     6  * 时间:2016年2月17日下午6:03:03
     7  * 作者:cutter_point
     8  */
     9 public class Test
    10 {
    11     public static void main(String[] args)
    12     {
    13         Player z = new Forwards("周星驰");
    14         z.attack();
    15         
    16         Player y = new Center("姚明");
    17         y.attack();
    18         
    19         //使用翻译者作为适配器使用外籍中锋类
    20         Player cp = new Translator("cutter_point");
    21         
    22         cp.attack();
    23         cp.defense();
    24         
    25     }
    26 }

    显示结果:

    1 前锋周星驰进攻
    2 中锋姚明进攻
    3 foreignCentercutter_pointattack !!
    4 foreignCentercutter_pointdefense !!
  • 相关阅读:
    csv与xlsx导出
    行业报告
    How JavaScript works: an overview of the engine, the runtime, and the call stack
    CAS单点登陆/oAuth2授权登陆
    YChaos生成混沌图像
    Why数学图像生成工具
    WHY数学图形可视化工具(开源)
    WHY翻写NEHE与红龙的3D图形程序 [开源]
    四边形密铺平面
    数学图形(1.50)三曲线
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5196246.html
Copyright © 2020-2023  润新知