设计模式之适应设计模式_Adapter模式_加一个适配器以便复用
前言
博主个人博客http://blog.healerjean.com
1、Adapter
介绍
1.1、Adapter
模式。有两种
Adapter
模式。有两种
1、使用继承的适配器:类适配器模式
2、使用委托的适配器:对象适配器
1.2、适配器模式和装饰器模式的区别
装饰器与适配器都有一个别名叫做 包装模式(
Wrapper
),它们看似都是起到包装一个类或对象的作用,但是使用它们的目的很不一样。
1、适配器模式将一个接口转变成另一个接口或者添加新的接口
2、装饰器模式不是要改变被装饰对象的接口,而是恰恰要保持原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方式而提升性能。所以这两个模式设计的目的是不同的。
2、适配器模式
现在实际情况是 我们的电压是100V的,但是我们想要的是220V的电压,现在我们希望底层还是用它,也就是说基于100V 的实现,但是我们以后都不会再用着100V了
2.1、实际情况
2.1.1、实际情况 Banner
/**
* 目前的实际情况
*/
public class Banner {
public String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
2.1.2、测试Main
public class Main {
public static void main(String[] args) {
Banner s = new Banner("\"Hello\"") ;
s.showWithAster();
s.showWithParen();
}
2.2、第一种:使用继承的适配器
2.2.1、Print
接口
public interface Print {
void printWeak();
void printStrong();
}
2.2.2、PrintBanner
适配器,继承实现
适配器继承上面的 banner
,这样就具备了 banner
里面的公共属性
/**
* 适配器角色
*/
public class AdapterPrintBanner extends Banner implements Print {
public AdapterPrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
2.2.3、测试Main
public class Main {
public static void main(String[] args) {
Print p = new AdapterPrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
2.3、第二种:使用委托的适配器
2.3.1、Print
抽象类
public interface Print {
void printWeak();
void printStrong();
}
2.3.2、AdapterPrintBanner
适配器委托实现
/**
* 适配器,委托实现,聚合
*/
public class AdapterPrintBanner implements Print {
private Banner banner;
public AdapterPrintBanner(String string) {
this.banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
2.3.3、测试Main
public class Main {
public static void main(String[] args) {
Print p = new AdapterPrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
2.4、现在的情况
我们使用的是 Print
接口来进行编程的,对于 Mian
而言,Banner
类中的被隐藏起来了,这就比如是 220V
的工作了起来,但是实际上是 100V
的电压转化而成的。
3、UML
3.1、 类适配器模式(使用继承)
3.2、对象适配器模式(使用委托)
3.3、Adapter
登场角色
3.3.1、Target
(对象)
该角色负责定义所需要的方法,示例程序中
3.3.2、Client
(请求者)
该角色q负责使用
Target
角色所定义的方法进行具体处理,示例程序中的Main
扮演这个角色
3.3.3、Adapter
(适配器 )
该角色是主人公,使用Adaptee角色的方法匹配旧的需求,然后
实现
或者继承
Print来满足现状的需求
3.3.4、Adaptee
(被适配)
该角色是被适配的角色 在继承中是被继承 、在委托中是被聚合