zoukankan      html  css  js  c++  java
  • 【设计模式】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 !!
  • 相关阅读:
    Head First设计模式-单例模式
    mahout算法源码分析之Itembased Collaborative Filtering(四)共生矩阵乘法
    “非常PHP学习网”(www.veryphp.cn)一期上线
    IOS深入学习(19)之View object
    POJ 1005(累加)
    Plan04.学习与提升
    一个python
    【tcl脚本】改变输出字符格式
    为什么寄存器比内存快?
    我觉得epoll和select最大的区别
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5196246.html
Copyright © 2011-2022 走看看