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

如何做医疗网站的专题页江西新农村建设权威网站

如何做医疗网站的专题页,江西新农村建设权威网站,wordpress侧边栏标题字数,wordpress google seo文章目录 1 设计目标2 Java2.1 涉及知识点2.2 实现2.2.1 实现两个接口飞行为和叫行为2.2.2 实现Duck抽象基类#xff08;把行为接口作为类成员#xff09;2.2.3 实现接口飞行为和叫行为的具体行为2.2.4 具体实现鸭子2.2.5 模型调用 3 C#xff08;用到了大量C2.0的知识… 文章目录 1 设计目标2 Java2.1 涉及知识点2.2 实现2.2.1 实现两个接口飞行为和叫行为2.2.2 实现Duck抽象基类把行为接口作为类成员2.2.3 实现接口飞行为和叫行为的具体行为2.2.4 具体实现鸭子2.2.5 模型调用 3 C用到了大量C2.0的知识3.1 涉及知识点3.2 实现3.2.1 实现飞行为和叫行为接口3.2.2 实现Duck基类使用委托/组合把指向抽象接口类的指针作为类成员3.2.3 实现接口类的飞行为和叫行为3.2.4 实现具体的鸭子行为3.2.5 具体调用 4 Python实现4.1 涉及知识点4.2 实现代码4.2.1 实现两个接口飞行为和叫行为4.2.2 实现Duck抽象基类把行为接口作为类成员4.2.3 实现接口飞行为和叫行为的具体行为4.2.4 具体实现鸭子4.2.5 模型调用 5 完整代码6 其他知识阅读快速入门 1 设计目标 此篇为实现篇下如果对策略者模式不熟可以看知识点篇上。 实现要求鸭子共有三种行为游泳行为所有鸭子都会飞行行为能飞/不能飞/具有火箭动力的飞行叫声行为嘎嘎叫/吱吱叫/什么都不会叫不同具体鸭子绿头鸭/模型鸭/…飞行行为和叫声行为可能不一样。 2 Java 2.1 涉及知识点 接口interface定义一种方法约束继承extend子类会具有父类的一般特性也会具有自身的特性提高代码复用性。 区别 修饰符不同接口使用interface修饰继承使用extends修饰。 多继承方式不同接口支持多继承继承只支持单继承。 定义方式不同接口只能定义全局常量和抽象方法继承可以定义属性、方法、变量、常量等。 作用不同接口是一种约束类实现接口就一定要实现它所有的方法继承是一种扩展继承了类它的私有成员以外的成员变量和成员方法子类都将拥有。组合委托把A类作为B类的成员变量具体实现在A类中B类对外暴露调用接口解耦合。抽象基类不能实例化只能作为类模版子类需要实现起抽象方法。构造函数类的初始化方法。 2.2 实现 2.2.1 实现两个接口飞行为和叫行为 public interface FlyBehavior {public void fly(); }public interface QuackBehavior {public void quack(); }2.2.2 实现Duck抽象基类把行为接口作为类成员 package com.jiangxue.strategy;public abstract class Duck {//组合委托策略类作为抽象基类的成员变量QuackBehavior quackBehavior;FlyBehavior flyBehavior;//定义抽象方法子类必须要实现public abstract void display();//调用类成员的方法public void performQuack(){quackBehavior.quack();;}public void performFly(){flyBehavior.fly();}//所有子类都有的共有行为public void swim(){System.out.println(All ducks float, even decoys);}//setter方法设置鸭子行为运行时改变行为public void setFlyBehavior(FlyBehavior fb){flyBehavior fb;}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior quackBehavior;} }2.2.3 实现接口飞行为和叫行为的具体行为 具体实现飞行为接口 public class FlyWithWings implements FlyBehavior{Overridepublic void fly(){System.out.println(Im flying);} }public class FlyNoWay implements FlyBehavior{Overridepublic void fly() {System.out.println(I cant fly);} }public class FlyRocketPowered implements FlyBehavior{Overridepublic void fly() {System.out.println(Im fly with rocket!);} }具体实现叫行为接口 public class Quack implements QuackBehavior{Overridepublic void quack() {System.out.println(Quack);} }public class MuteQuack implements QuackBehavior{Overridepublic void quack() {System.out.println(Silence);} }public class Squeak implements QuackBehavior{Overridepublic void quack() {System.out.println(Squack);} } 2.2.4 具体实现鸭子 实现绿头鸭 public class MallardDuck extends Duck{//重新构造函数public MallardDuck(){quackBehavior new Quack();flyBehavior new FlyWithWings();}public void display(){System.out.println(Im a real Mallard duck);} } 实现模型鸭 public class ModelDuck extends Duck{public ModelDuck(){flyBehavior new FlyNoWay();quackBehavior new Quack();}Overridepublic void display() {System.out.println(Im a model duck);} } 2.2.5 模型调用 public class Test {public static void main(String[] args) {//示例1Duck mallardDuck new MallardDuck();mallardDuck.performQuack();mallardDuck.performFly();//示例2Duck model new ModelDuck();model.performFly();//改变飞行行为model.setFlyBehavior(new FlyRocketPowered());model.performFly();; } }3 C用到了大量C2.0的知识 3.1 涉及知识点 纯虚函数用于实现接口【virtua和 0】在基类中声明的虚函数它在基类中没有定义但要求任何派生类都要定义自己的实现方法。有纯虚函数的类是抽象类不能生成对象只能派生。virtual析构函数当父类指针指向子类对象时执行释放操作子类对象也会被释放掉。explicit该构造函数只能显式调用禁止隐式转换。右值引用结合了移动语义和完美转发可以绑定到临时对象。 移动语义不复制对象而只是让新的对象名指向原对象名所指对象并且将原对象所指的置空。完美转发可以撰写接受任意参数的函数模版并将其转发到其他函数目标函数会接受与其转发函数所接受的完全相同的参数。 std::move把实参强制转换为右值:无条件地右值类型的强制类型转换std::forward仅对绑定到右值的引用实施向右值类型的强制转换。 针对右值引用实施std::move万能引用实施std::forward 智能指针unique_ptr独占对象不允许复制动态管理分配对象的生命周期。make_unique函数动态分配指定类型的内存并返回一个指向分配内存的唯一指针。子类继承父类的构造不能直接从初始化列表初始化基类成员应该使用父类的构造函数。公有继承基类的公有成员和保护成员的访问属性在派生类中不变 3.2 实现 3.2.1 实现飞行为和叫行为接口 class QuackBehavior{ public://纯虚函数只有函数的名字而不具备函数的功能不能被调用要求任何派生类都要定义自己的实现方法//有纯虚函数的类是抽象类不能生成对象只能派生。virtual void quack() const 0;//virtual析构函数好处当父类指针指向子类对象时执行释放操作子类对象也会被释放掉virtual ~QuackBehavior() default; };class FlyBehavior{ public:virtual void fly() const 0;virtual ~FlyBehavior() default; };3.2.2 实现Duck基类使用委托/组合把指向抽象接口类的指针作为类成员 #include memory #include FlyBehavior.h #include QuackBehavior.h #include iostreamclass Duck { protected://智能指针unique_ptr独占对象不允许复制动态管理分配对象的生命周期std::unique_ptrFlyBehavior _flyBehavior;std::unique_ptrQuackBehavior _quackBehavior; public://explicit表示该构造函数只能显式调用禁止隐式转换。/** 移动语义不复制对象而只是让新的对象名指向原对象名所指对象并且将原对象所指的置空。* 完美转发可以撰写接受任意参数的函数模版并将其转发到其他函数目标函数会接受与其转发函数所接受的完全相同的参数。* 右值引用结合了移动语义和完美转发可以绑定到临时对象。* std::move把实参强制转换为右值:无条件地右值类型的强制类型转换* std::forward仅对绑定到右值的引用实施向右值类型的强制转换。* 针对右值引用实施std::move万能引用实施std::forward*/explicit Duck(std::unique_ptrFlyBehavior flyBehavior {},std::unique_ptrQuackBehavior quackBehavior{}):_flyBehavior(std::move(flyBehavior)),_quackBehavior(std::move(quackBehavior)){}//上下文允许在运行时替换策略对象。void setFlyBehavior(std::unique_ptrFlyBehaviorflyBehavior){_flyBehavior std::move(flyBehavior);}void setQuackBehavior(std::unique_ptrQuackBehaviorquackBehavior){_quackBehavior std::move(quackBehavior);}//执行飞void performFly() const{_flyBehavior-fly();}//执行叫void performQuack() const{_quackBehavior-quack();}void swim() const{std::coutAll ducks float, even decoysstd::endl;}virtual void display() const 0;};3.2.3 实现接口类的飞行为和叫行为 实现飞行为 #include iostream #include FlyBehavior.h//公有继承基类的公有成员和保护成员的访问属性在派生类中不变 class FlyWithWings: public FlyBehavior{ public:void fly() const override{std::coutIm flyingstd::endl;} };class FlyNoWay: public FlyBehavior{ public:void fly() const override{std::coutI cant flystd::endl;} };class FlyRocketPowered : public FlyBehavior{ public:void fly() const override{std::coutIm fly with rocket!std::endl;} }; 实现叫行为 #include QuackBehavior.h #include iostreamclass Quack: public QuackBehavior{void quack() const override{std::coutquackstd::endl;} };class MuteQuack : public QuackBehavior{ public:void quack() const override{std::coutSilencestd::endl;} };class Squeak: public QuackBehavior{void quack() const override{std::coutSquackstd::endl;} };3.2.4 实现具体的鸭子行为 绿头鸭 #include Duck.h #include Quack.h #include FlyWithWings.h #include iostreamclass MallardDuck : public Duck{ public://子类继承父类的构造//不能直接从初始化列表初始化基类成员应该使用父类的构造函数explicit MallardDuck(std::unique_ptrFlyWithWings flyWithWings {},std::unique_ptrQuack quack{}): Duck(std::move(flyWithWings), std::move(quack)){}//虚函数方法重写void display() const override{std::coutIm a real Mallard duckstd::endl;}};模型鸭 #include Duck.h #include FlyNoWay.h #include Quack.hclass ModelDuck :public Duck{ public:explicit ModelDuck(std::unique_ptrFlyNoWay flyNoWay,std::unique_ptrQuack quack): Duck(std::move(flyNoWay), std::move(quack)){}void display() const override{std::coutIm a model duckstd::endl;}};3.2.5 具体调用 #include MallardDuck.h #include ModelDuck.h #include FlyRocketPowered.hvoid testCode() {//make_unique函数动态分配指定类型的内存并返回一个指向分配内存的唯一指针MallardDuck mallardDuck(std::make_uniqueFlyWithWings(),std::make_uniqueQuack());mallardDuck.performQuack();mallardDuck.performFly();ModelDuck modelDuck(std::make_uniqueFlyNoWay(),std::make_uniqueQuack());modelDuck.performFly();modelDuck.setFlyBehavior(std::make_uniqueFlyRocketPowered());modelDuck.performFly();}int main() {testCode();return 0; } 4 Python实现 4.1 涉及知识点 抽象基类继承ABC不能被实例化只能被继承。抽象方法abstractmethod继承的子类必须实现的方法。属性propertyflyBehavior.setter调用时不需要加()为的是提供更加友好访问类数据的方式。构造函数def __init__初始化类成员变量。继承super().__init__继承父类的属性。from __future__ import annotations:允许你在程序中声明变量或函数的类型并由编译器或其他工具来检查代码的类型是否正确。有助于提高代码的可读性并且有助于发现类型错误。 4.2 实现代码 4.2.1 实现两个接口飞行为和叫行为 from abc import ABC, abstractmethod# 抽象基类 class FlyBehavior(ABC):# 抽象方法abstractmethoddef fly(self):passclass QuackBehavior(ABC):abstractmethoddef quack(self):pass4.2.2 实现Duck抽象基类把行为接口作为类成员 class Duck(ABC):def __init__(self, flyBehavior: FlyBehavior, quackBehavior: QuackBehavior) - None:self._flyBehavior flyBehaviorself._quackBehavior quackBehaviorabstractmethoddef perform(self) - None:passdef performFly(self) - None:return self._flyBehavior.fly()def performQuack(self) - None:return self._quackBehavior.quack()propertydef flyBehavior(self) - FlyBehavior:return self._flyBehaviorpropertydef quackBehavior(self) - QuackBehavior:return self._quackBehaviorflyBehavior.setterdef flyBehavior(self, fly: FlyBehavior) - None:self._flyBehavior flyquackBehavior.setterdef quackBehavior(self, quack: QuackBehavior) - None:self._quackBehavior quackdef swim(self) - None:print(All ducks float, even decoys) 4.2.3 实现接口飞行为和叫行为的具体行为 具体实现飞行为接口 class FlyWithWings(FlyBehavior):def fly(self) - None:print(Im flying)class FlyNoWay(FlyBehavior):def fly(self) - None:print(I cant fly)class FlyRocketPowered(FlyBehavior):def fly(self) - None:print(Im fly with rocket!)具体实现叫行为接口 class Quack(QuackBehavior):def quack(self) - None:print(Quack)class Square(QuackBehavior):def quack(self) - None:print(Squack)class MuteQuack(QuackBehavior):def quack(self) - None:print(Silence)4.2.4 具体实现鸭子 实现绿头鸭 class ModelDuck(Duck):def __init__(self, flyBehavior: FlyNoWay, quackBehavior: Quack) - None:super().__init__(flyBehavior, quackBehavior)# 下面的初始化方法并不能继承父类的属性# _flyBehavior flyBehavior# _quackBehavior quackBehaviordef perform(self) - None:print(Im a model duck) 实现模型鸭 class MallardDuck(Duck):def __int__(self, flyBehavior: FlyWithWings, quackBehavior: Quack) - None:super().__init__(flyBehavior, quackBehavior)def perform(self) - None:print(Im a real Mallard duck) 4.2.5 模型调用 # import sys , os # base_dir os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # sys.path.append(base_dir) # 没有把当前项目加入到PYTHONPATH环境变量from Strategy.duck import *if __name__ __main__:mallardDuck MallardDuck(FlyWithWings(), Quack())mallardDuck.performQuack()mallardDuck.performFly()modelDuck ModelDuck(FlyNoWay(), Quack())modelDuck.performFly()modelDuck.flyBehavior FlyRocketPowered()modelDuck.performFly()5 完整代码 完整的实现代码见Gitee仓库。如果对您有用的话欢迎留下star谢谢。 6 其他知识阅读快速入门 Java快速入门 Python快速入门 深入了解C2.0
http://www.sczhlp.com/news/172537/

相关文章:

  • 网站建设对信息公开的作用购物商城外贸网站建设
  • 广州百度网站搭建深圳福永
  • 凡科2网站需要备案吗姑苏区网络推广服务
  • 天津网站建设的公司哪家好dz还是wordpress
  • 贵阳网站制作朝阳网站
  • 不规则网站模板东莞市企业名录
  • 一般制作一个网站要多久微信推广平台哪家好
  • 四川网站建设seo优化制作论文招聘网站的
  • 正规网站建设哪家好共创福州网站建设
  • 苏州网站建设找哪家做公司网站报价
  • 四川网站设计成功柚米科技公司网站修改 优帮云
  • 沂南网站设计做微网站哪家好
  • 网络营销导向网站建设的基础是什么上海外贸出口代理公司
  • 天空人体网站怎么做上海关键词排名搜索
  • 完整教程:Excel to JSON 插件 2.4.0 版本更新
  • Ai元人文:人文逻辑与规则逻辑的统一
  • 视频网站建设wordpress媒体文档
  • 柳州网站seoui设计就业方向
  • 做网站需要什么专业方向的员工直播网站开发步骤
  • 陕西企业网站建设网站建设如何实现检索功能
  • 对网站建设课程的心得体会wordpress音乐网站主题
  • 拓客网站建设wordpress 绿色公益主题
  • 迪士尼网站是谁做的dw做框架网站
  • 深圳网站建设-新奇网络广安网站建设兼职
  • 跟老外做网站做程序开发的网站
  • 高端品牌网站建设是什么网站字体标准
  • 南翔企业网站开发建设开发区网站建设工作职责
  • 做网站的人还能做什么电子工程师是干啥的
  • 网站开发 前端vue 后端c网页设计模板网
  • 免费做电子目录的网站网站带支付源码