动机:由于某些类型具有多种不同方向的变化(平台与实现),应对多维度的变化解耦合
class Message{
public login(){ ... }
public play(){ ... }
}
class PCMessage extends Message{
@Override
public play(){ ... }
}
class PEMessage extends Message{
@Override
public play(){ ... }
}
class ClassicalPCMessage extends PCMessage{
@Override
public login(){
...
super.play();
}
}
class ClassicalPEMessage extends PEMessage{
@Override
public login(){
...
super.play();
}
}
class perfectPCMessage extends PCMessage{
@Override
public login(){
...
super.play();
}
}
class perfectPEMessage extends PEMessage{
@Override
public login(){
...
super.play();
}
}
class Test{
public static void main(String [] args){
Messge ms=new perfectPCMessage();
}
}
这里出现了非常多类,由于平台PC,PE不同,导致后期不同版本(金典版,完美版。。。)的发布需要非常多类,这里混淆了平台和实现版本两个不同的方向,放入一个类中继承导致的
class Message{
MessageImp messageImp;//PCMessageImp或者PEMessageImp
//运行时编译成不同的平台播放
public Message(){ ... }
public login(){ ... }
//public play(){ ... }
}
class MessageImp{
public play(){ ... }
}
class PCMessageImp extends MessageImp{
@Override
public play(){ ... }
}
class PEMessageImp extends MessageImp{
@Override
public play(){ ... }
}
class ClassicalMessage extends Message{
//PCMessage pcMessage;子类中有相同的类型,需要往上(父类)升级
@Override
public login(){
...
//super.play();
}
}
class pefectMessage extends Message{
//PEMessage peMessage;子类中有相同的类型,需要往上(父类)升级
@Override
public login(){
...
//super.play();
}
}
class Test{
public static void main(String [] args){
MessageImp imp=new PCMessageImp();
Messge ms=new pefectMessage(imp);
}
}