如何备份wordpress网站专业的营销型网站最新报价

当前位置: 首页 > news >正文

如何备份wordpress网站,专业的营销型网站最新报价,国内知名工业设计公司,禅城教育网站建站桥接#xff08;Brige#xff09;模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑#xff0c;使它们具有两个变化的维度#xff0c;乃至多个维度的变化。如何应对这种“多维度的变化”#xff1f;如何利用面向对象技术是的类型可以轻松的沿着两个乃至…桥接Brige模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑使它们具有两个变化的维度乃至多个维度的变化。如何应对这种“多维度的变化”如何利用面向对象技术是的类型可以轻松的沿着两个乃至多个方向变化、而不引入额外的复杂度 将抽象部分业务功能与实现部分平台实现分离使它们都可以独立的变化。 1.2 结构 1.3 要点 桥接模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化即“子类化”它们。桥接模式有时候类似于多继承方案但是多继承方案往往违背单一职责原则即一个类只有一个变化的原因复用性较差。桥接模式是比多继承方案更好的解决方法。桥接模式的应用一般在“两个非常强的变化维度”有时一个类也有多余两个的变化维度这时可以使用桥接模式的拓展模式。 2.伪码推导 原始代码 class Messager{ public:virtual void Login(string username, string password)0;virtual void SendMessage(string message)0;virtual void SendPicture(Image image)0;virtual void PlaySound()0;virtual void DrawShape()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 PCMessagerLite : 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 PCMessagerPerfect : 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 MobileMessagerLite : 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){MobileMessagerBase::PlaySound();//**MobileMessagerBase::Connect();//……..}virtual void SendMessage(string message){MobileMessagerBase::PlaySound();//**MobileMessagerBase::WriteText();//……..}virtual void SendPicture(Image image){MobileMessagerBase::PlaySound();//***MobileMessagerBase::DrawShape();//……..} };void Process(){//编译时装配Messager *m new MobileMessagerPerfect(); }代码推导 基类为class Messager方法可分为两部分一部分为与业务逻辑相关的“Login、SendMessage、SendPicture”另一部分与平台实现相关的“PlaySound、DrawShape、WriteText、Connect” class Messager{ public:virtual void Login(string username, string password)0;virtual void SendMessage(string message)0;virtual void SendPicture(Image image)0;virtual void PlaySound()0;virtual void DrawShape()0;virtual void WriteText()0;virtual void Connect()0;virtual ~Messager(){} };为了平台实现分别实现PCMessagerBase、MobileMessagerBase。 //平台实现 class PCMessagerBase : public Messager{//… };class MobileMessagerBase : public Messager{//… };对于不同的业务逻辑再去调用平台实现的代码 //业务抽象class PCMessagerLite : 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();//……..} };按照这种方法编写代码最终实现的类个数1基类n平台实现mn业务逻辑x平台实现。 分析代码可知对于最终的类实现平台实现是相对固定的即平台开发完成后不会修改、只会交给业务逻辑进行调用替换的话也是整个平台进行替换另一部分为业务逻辑即根据需求实现对平台的调用。 即可把原有的class Messager拆分为两部分一部分为平台相关实现另一部分为业务接口。只在最终创建的时候将平台相关的资源添加进去即运行时装配最终实现类的个数为1基类n平台实现m业务种类 修改后的基类实现为 class Messager{ protected:MessagerImp messagerImp;//… public:virtual void Login(string username, string password)0;virtual void SendMessage(string message)0;virtual void SendPicture(Image image)0;virtual ~Messager(){} };全部代码为 class Messager{ protected:MessagerImp* messagerImp;//… public:virtual void Login(string username, string password)0;virtual void SendMessage(string message)0;virtual void SendPicture(Image image)0;virtual ~Messager(){} };class MessagerImp{ public:virtual void PlaySound()0;virtual void DrawShape()0;virtual void WriteText()0;virtual void Connect()0;virtual MessagerImp(){} };//平台实现 n 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(){//} };//业务抽象 m//类的数目1nmclass MessagerLite :public Messager {public:virtual void Login(string username, string password){messagerImp-Connect();//……..}virtual void SendMessage(string message){messagerImp-WriteText();//……..}virtual void SendPicture(Image image){messagerImp-DrawShape();//……..} };class MessagerPerfect :public Messager {public:virtual void Login(string username, string password){messagerImp-PlaySound();//**messagerImp-Connect();//……..}virtual void SendMessage(string message){messagerImp-PlaySound();//**messagerImp-WriteText();//……..}virtual void SendPicture(Image image){messagerImp-PlaySound();//****messagerImp-DrawShape();//……..} };void Process(){//运行时装配MessagerImp mImpnew PCMessagerImp();Messager *m new Messager(mImp); }