#大话设计模式之适配器模式#

现在有一个需求:为不懂英语的姚明设置一个翻译

球员父类(集合了球员必备的名字与方法等属性)

package AdapterPattern;

public abstract class Player {
    String name;
    public Player(String name) {
        // TODO Auto-generated constructor stub
        this.name = name;
    }
    public abstract void attack();
    public abstract void defense();
}

球员子类(实例化前中后三类球员)

package AdapterPattern;

public class PlayerSon {

}
class Forwards extends Player{

    public Forwards(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void attack() {
        // TODO Auto-generated method stub
        System.out.println("前锋"+name+"进攻");
    }

    @Override
    public void defense() {
        // TODO Auto-generated method stub
        System.out.println("前锋"+name+"防守");
    }
    
}
class Center extends Player{

    public Center(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void attack() {
        // TODO Auto-generated method stub
        System.out.println("中锋"+name+"进攻");
    }

    @Override
    public void defense() {
        // TODO Auto-generated method stub
        System.out.println("中锋"+name+"防守");
    }
    
}
class Guards extends Player{

    public Guards(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void attack() {
        // TODO Auto-generated method stub
        System.out.println("后卫"+name+"进攻");
    }

    @Override
    public void defense() {
        // TODO Auto-generated method stub
        System.out.println("后卫"+name+"防守");
    }
    
}

外籍球员类(姚明球员实例)

package AdapterPattern;

public class ForeignCenter {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void 进攻(){
        System.out.println("外籍中锋"+name+"进攻");
    }
    public void 防守(){
        System.out.println("外籍中锋"+name+"防守");
    }
}

翻译者(间接调用姚明的方法,姚明本身不属于player父类,接口不同方法不同,但行为是一样的都是进攻防守)

package AdapterPattern;

public class Translator extends Player {
    private ForeignCenter fc = new ForeignCenter();

    
    public Translator(String name) {
        super(name);
        fc.setName(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void attack() {
        // TODO Auto-generated method stub
        fc.进攻();
    }

    @Override
    public void defense() {
        // TODO Auto-generated method stub
        fc.防守();
    }

}

界面类(此类比较简单,主要就是一个间接调用球员的方法而已,理解了翻译者和外籍球员两个类就好了)

package AdapterPattern;

public class Main {
    public void printFrame(){
        Player p1 = new Forwards("李白");
        p1.attack();
        Player p2 = new Guards("娜可露露");
        p2.attack();
        
        Player p3 = new Translator("姚明");
        p3.attack();
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.printFrame();
    }
}

使用:接口不同的时候使用,维护旧代码的时候使用,解决不同数据库接口问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值