1、类适配器模式
早上刚来,看到弟弟在喝水,我突然感觉不太好了,说道:今天天气有点阴沉,估计又要下雨了,到处湿漉漉的,就连刚学的设计模式也感觉是注水了!
弟弟撇了我一眼,道:此话怎讲?
我说:你可知晓类适配器模式?想来你是知道的,就是通过类之间的关系构建的适配器;
它是由三部分组成:现有资源,适配的方法接口,目标资源。现有资源以目标资源作为父类,通过实现接口的方法,调用父类的属性或者方法。从而实现现有资源做出目标资源的操作。给你看个图图!
看图说话:从关系上来看,大古继承了迪迦,大古拥有了变身器,大古打不动怪兽,迪迦可以打怪兽看。大古想要打怪兽,需要通过实现打开变身器,才能调用迪迦的各种能力,实现打怪兽。
/**
* 迪迦奥特曼
*
* @author czy
* @date 2021/6/18
*/
public class UltramanTiga {
public void action(){
System.out.println("迪迦使用宇宙射线击打宇宙小金刚");
System.out.println("迪迦对怪兽造成了100点伤害");
}
}
/**
* 大古
* 大古想要变身迪迦,需要一个变身器
*
* @author czy
* @date 2021/6/18
*/
public class BigGu extends UltramanTiga implements ShapeShifter{
@Override
public void becomeBigPerson() {
this.action();
}
}
/**
* 变身器
*
* @author czy
* @date 2021/6/18
*/
public interface ShapeShifter {
/**
* 变成巨人
*/
void becomeBigPerson();
}
/**
* 快来看奥特曼变身打怪兽
*
* @author czy
* @date 2021/6/18
*/
public class Test {
public static void main(String[] args) {
//我有一个大古,我想打怪兽
BigGu bigGu = new BigGu();
//我想要个迪迦
bigGu.becomeBigPerson();
}
}
弟弟:继承耦合有点高啊!在实际生产中应该不适用吧。
我:没错继承父类实现适配耦合性高
我:没错,明明继承父类,调用父类方法就行了,这种模式还要通过实现接口,通过实现接口方法中调用父类接口,感觉多此一举,完全是在水经验,故此,我说它是在灌水!
2、对象适配模式
弟弟:那有没有好的解决方法呢?
我:将继承改成组合就行了,每个人身体中都有迪迦,需要通过希望之光激发他。这就是对象适配模式。卡卡兔!!!
/**
* 迪迦奥特曼终极版
*
* @author czy
* @date 2021/6/18
*/
public class UltramanTiga {
public void action(){
System.out.println("迪迦使用宇宙射线击打宇宙小金刚");
System.out.println("迪迦对怪兽造成了100点伤害");
}
}
/**
* 每个人
* 每个人的信念心中都有迪迦,通过希望之光操作迪迦打怪兽
* @author czy
* @date 2021/6/21
*/
public class EveryBody implements Light{
private UltramanTiga ultramanTiga;
public EveryBody(UltramanTiga ultramanTiga) {
this.ultramanTiga = ultramanTiga;
}
@Override
public void becomeBigPerson() {
ultramanTiga.action();
}
}
/**
* 希望之光
*
* 适配接口
*
* @author czy
* @date 2021/6/21
*/
public interface Light {
/**
* 变成巨人
*/
void becomeBigPerson();
}
/**
* 每个人都是迪迦
*
* @author czy
* @date 2021/6/21
*/
public class Test {
public static void main(String[] args) {
EveryBody body = new EveryBody(new UltramanTiga());
body.becomeBigPerson();
}
}
你看看多个接口在这增加代码量!是不是水!
弟弟:确实水!明明能直接不用接口实现的!
我心中窃笑,表面稳如老狗:这就是面向接口编程啊骚年!七大原则忘了吗?依赖倒置原则啊,面向接口而非面向实现,所以是我在灌水哦!