由于某些类型的固有的实现逻辑,使得他们具有两个变化维度,乃至多个维度的变换
如何应对这种”多维度的变化“?如何利用面向对象技术来是使得类型可以轻松地沿着两个乃至多个方向变换而不引入额外地复杂度?
将抽象不分(业务功能)与实现部分(平台实现)分离,是他们都可以独立变化。
PC端和Mobile端平台和业务分离 朴素
class Messager{
public:
virtual void Login(string username,string password) = 0;
virtual void SendMessage(string message) = 0;
virtual void SendMessage(Image image) = 0;
virtual void PlaySound() = 0;
virtual void PlayShape() = 0;
virtual void WriteText() = 0;
virtual void Connect() = 0;
virtual ~Messager(){
}
}
//平台实现
class PCMessagerBase : public Messager{
public:
virtual void PlaySound(){
//...
}
virtual void DrawSHape(){
//,,
}
virtual void WriteText(){
//..
}
virtual void connect(){
//,,
}
}
class MobileMessagerBase : public Messager{
public:
virtual void PlaySound(){
//...
}
virtual void DrawSHape(){
//,,
}
virtual void WriteText(){
//..
}
virtual void connect(){
//,,
}
}
//业务抽象
//精简版
class PCMessageLite : public PCMessagerBase{
public :
virtual void Login(string username,string password){
PCMessagerBase::Connect();
//..
}
virtual void SendMessage(string message){
PCMessagerBase::WriteText();
//..
}
virtual void SendPicture(Image image){
PCMessagerBase::DrawShape();
//..
}
}
//完美版
class PCMessagePerfect : public PCMessagerBase{
public :
virtual void Login(string username,string password){
PCMessagerBase::PlaySound();
//....
PCMessagerBase::Connect();
//...
}
virtual void SendMessage(string message){
PCMessagerBase::PlaySound();
//...
PCMessagerBase::WriteText();
//...
}
virtual void SendPicture(Image image){
PCMessagerBase::PlaySound();
//...
PCMessagerBase::DrawShape();
//...
}
}
//精简版
class MobileMessageLite : public MobileMessagerBase{
public :
virtual void Login(string username,string password){
MobileMessagerBase::Connect();
//..
}
virtual void SendMessage(string message){
MobileMessagerBase::WriteText();
//..
}
virtual void SendPicture(Image image){
MobileMessagerBase::DrawShape();
//..
}
}
//完美版
class MobileMessagerPerfect : public MobileMessagerBase{
public :
virtual void Login(string username,string password){
MobileMessagerPerfect::PlaySound();
//....
MobileMessagerPerfect::Connect();
//...
}
virtual void SendMessage(string message){
MobileMessagerPerfect::PlaySound();
//...
MobileMessagerPerfect::WriteText();
//...
}
virtual void SendPicture(Image image){
MobileMessagerPerfect::PlaySound();
//...
MobileMessagerPerfect::DrawShape();
//...
}
}Bridge桥模式
class Messager{
private:
MessagerImp * messager;
public:
Messager():messager(messager){
}
virtual void Login(string username,string password) = 0;
virtual void SendMessage(string message) = 0;
virtual void SendMessage(Image image) = 0;
virtual ~Messager(){
}
}
class MessagerImp{
public:
virtual void PlaySound() = 0;
virtual void PlayShape() = 0;
virtual void WriteText() = 0;
virtual void Connect() = 0;
virtual ~MessagerImp(){
}
}
//平台实现
class PCMessagerImp : public MessagerImp{
public:
virtual void PlaySound(){
//...
}
virtual void DrawSHape(){
//,,
}
virtual void WriteText(){
//..
}
virtual void connect(){
//,,
}
}
class MobileMessagerImp : public MessagerImp{
public:
virtual void PlaySound(){
//...
}
virtual void DrawSHape(){
//,,
}
virtual void WriteText(){
//..
}
virtual void connect(){
//,,
}
}
//业务抽象
//精简版
class PCMessageLite : public Messager{
public :
virtual void Login(string username,string password){
messageImp->Connect();
//..
}
virtual void SendMessage(string message){
messageImp->WriteText();
//..
}
virtual void SendPicture(Image image){
messageImp->DrawShape();
//..
}
}
//完美版
class PCMessagePerfect : public Messager{
public :
virtual void Login(string username,string password){
messageImp->PlaySound();
//....
messageImp->Connect();
//...
}
virtual void SendMessage(string message){
messageImp->PlaySound();
//...
messageImp->WriteText();
//...
}
virtual void SendPicture(Image image){
messageImp->PlaySound();
//...
messageImp->DrawShape();
//...
}
}
//精简版
class MobileMessageLite : public Messager{
public :
virtual void Login(string username,string password){
messageImp->Connect();
//..
}
virtual void SendMessage(string message){
messageImp->WriteText();
//..
}
virtual void SendPicture(Image image){
messageImp->DrawShape();
//..
}
}
//完美版
class MobileMessagerPerfect : public Messager{
public :
virtual void Login(string username,string password){
messageImp->PlaySound();
//....
messageImp->Connect();
//...
}
virtual void SendMessage(string message){
messageImp->PlaySound();
//...
messageImp->WriteText();
//...
}
virtual void SendPicture(Image image){
messageImp->PlaySound();
//...
messageImp->DrawShape();
//...
}
}
void Process(){
//运行时装配
MessagerImp *mImp = new PCMessagerImp();
Messager *m = new MobileMessagerPerfect(mImp);
}发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168512.html原文链接:https://javaforall.cn