设计模式(3)之Adpater模式

一、Adapter(适配器模式)模式介绍

1、适配器模式的目的:填补"现有的程序"和"所需的程序”之间的差异。

2、适配器模式分为类适配器模式(使用继承)、对象适配器模式(使用委托)。

3、UML关系类图

  (1)类适配器模式类图

(2)对象适配器模式的关系类图

二、代码实现

代码共同的实现目标是,将字符串"wjwlh"输出字符串"*wjwlh*"

(1)类适配器模式代码

    1、Target角色

//打印接口------需求的目的接口
//Target角色(对象角色)
public interface Print {

	public abstract void printWeak();
	
	public abstract void printStrong();
}

  2、Adaptee角色

//被继承类(Banner类-----横幅)-----需要被适配的类
//Adaptee角色(被适配角色)
public class Banner {
   private String string;
   public Banner(String string) {
	   this.string=string;
   }
   
   //
   public void showWithParen() {
	   System.out.println("("+string+")");
   }
   
   //
   public void showWithAster() {
	   System.out.println("*"+string+"*");
   }
}

  3、Adapter角色

//中间适配器类(将Banner中的方法封装到Print接口的方法中,使Banner类中的方法隐藏起来)
//Adpater角色(适配器角色)
public class PrintBanner extends Banner implements Print{

	public PrintBanner(String string) {
		super(string);
	}

	@Override
	public void printWeak() {
		showWithParen();
	}

	@Override
	public void printStrong() {
		showWithAster();
	}

     
}

 4、Client角色(类适配器模式测试类)

//测试使用继承的适配器--------类适配器模式
//Client角色(请求者)
public class ClassAdpaterTest {
  public static void main(String[] args) {
	Print p=new PrintBanner("hello");
	p.printWeak();
	p.printStrong();
}
}

(2)对象适配器模式代码

     1、Target角色

      

//打印接口------需求的目的接口(Target)
//Target角色
public abstract class Print {

	public abstract void printWeak();
	
	public abstract void printStrong();
}

     2、Adaptee角色

//被继承类(Banner类-----横幅)-----需要被适配的类(Adaptee)
//Adaptee角色
public class Banner {
   private String string;
   public Banner(String string) {
	   this.string=string;
   }
   
   //
   public void showWithParen() {
	   System.out.println("("+string+")");
   }
   
   //
   public void showWithAster() {
	   System.out.println("*"+string+"*");
   }
}

     3、Adapter角色

//适配器类(adapter)
//adpater角色
public class PrintBanner extends Print{

	private Banner banner;
	
	public PrintBanner(Banner banner) {
		this.banner=banner;
	}
	
	@Override
	public void printWeak() {
		banner.showWithParen();
	}

	@Override
	public void printStrong() {
		banner.showWithAster();
	}

}

     4、Client角色

//对象适配器模式测试类(Client)
//Client角色
public class ObjectAdapterTest {

    public static void main(String[] args) {
        Banner banner=new Banner("lihao");
        PrintBanner printBanner=new PrintBanner(banner);
        printBanner.printStrong();
        printBanner.printWeak();        
    }
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值