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

邵东做网站网站推广的方法

邵东做网站,网站推广的方法,微信营销模式有,app商城开发定制假设现在一个场景: 某物流公司,当前有以下业务:汽车运输和轮船运输。客户可以选择任一运输方式进行运输。 此时,应该如何使用代码将这个现实业务进行抽象实现? 在没有学习工厂模式前,我是这样想的&#x…

假设现在一个场景:
某物流公司,当前有以下业务:汽车运输和轮船运输。客户可以选择任一运输方式进行运输。

此时,应该如何使用代码将这个现实业务进行抽象实现?

在没有学习工厂模式前,我是这样想的,分别写个物流公司的类,然后它依赖汽车类和轮船类,让汽车类和轮船都实现运输接口,然后让用户传递一个参数,参数将决定给用户返回汽车或者轮船,这样就实现了。
在这里插入图片描述

代码如下:

from abc import ABC,abstractmethodclass Logistics:def __init__(self,transport):self.transport_map = {"car":Car(),"ship":Ship()}self.transport = self.transport_map[transport]def deliver(self):return self.transport.deliver()class Delivery(ABC):@abstractmethoddef deliver(self):passclass Car(Delivery):def deliver(self):return "A car has delivered."class Ship(Delivery):def deliver(self):return "A ship has deliverd"def client(transport):print(Logistics(transport).deliver())if __name__ == "__main__":client("car")client("ship")

执行结果如下:
在这里插入图片描述

这样写是能够满足这篇文章最初的要求的,但是随着公司的扩展,业务又支持火车运输了,此时,应该怎么写代码?一定是要修改Logistic类的对吗?每增加一种运输方式,我们就要修改一次Logistics类的代码,对吗?

此时就存在一个问题,我们违背了SOLID原则中的开闭原则:对修改关闭,对扩展开放。我们这里只是写了一个很简单的场景,实际的场景中,一旦违背这个原则,可能会引入很多问题,甚至会威胁软件本身。比如,我们要将一个系统提供给用户,让用户可以自定义增加运输类型,让用户修改代码,或者让用户写的代码通过我们提供的方式植入到原有的代码中,都可能会带来安全隐患。

此时,我们可以通过工厂模式,让父类决定对外的功能,让子类决定创建的具体的对外服务的对象,则可以在不修改代码的情况下,进行扩展。

比如这个在这个题目中,我们让物流公司(后面称为总公司)下面创建两个子公司:陆路物流公司、海洋物流公司。物流总公司定义一个创建运输工具的接口,让子公司通过实现这个接口来创建自己的运输工具。物流总公司定义“运输”的方法,所有它的子公司都将支持“运输”。至于“运输”如何实现,可以让子公司来实现,也可以让运输工具来实现,都是可以的,但是出于对以后扩展性的考虑,可以让运输工具来实现。因为,比如让陆路物流公司实现“运输”方法,那意味着陆路公司只有1种“运输”方法,那么万一这个陆路物流公司后面又支持了火车运输怎么办?而如果让汽车这个运输工具来实现运输方法,则当以后陆路物流公司支持火车运输时,火车可以扩展出自己的运输方法。
在这里插入图片描述
代码如下:

from abc import ABC,abstractmethodclass Logistics(ABC):@abstractmethoddef createTransport(self):passdef planDelivery(self):transport = self.createTransport()result = transport.deliver()return resultclass Transport(ABC):@abstractmethoddef deliver(self):passclass RoadLogistics(Logistics):def createTransport(self):return Car()class SeaLogistics(Logistics):def createTransport(self):return Ship()class Car(Transport):def deliver(self):return "A new car has delivered."class Ship(Transport):def deliver(self):return "A new ship has delivered."def client(logistic):print(logistic.planDelivery())if __name__ == "__main__":client(RoadLogistics())client(SeaLogistics())

执行结果如下:
在这里插入图片描述

总结:当不同子类有一些差别时,我们可以把创建对象的工作让子类来完成,此时就可以用工厂模式。

http://www.dtcms.com/wzjs/805622.html

相关文章:

  • 个人网站建设规划网站建设数据库类型
  • 请人做个网站多少钱网站建设切片效果是什么
  • 推广网站推荐网站域名是什
  • 备案网站有哪些佛山市官网网站建设怎么样
  • 上海3d网站建设深圳网站建设公司哪家专业
  • 热可可怎么做视频网站wordpress路径爆出
  • wordpress手机站h5优化上海 专业网站设计 母婴类
  • 免费云主机试用一年郑州优化网站关键词
  • 搭建网站的网站网站二维码代码
  • 建设部建筑招投标网站wordpress 桌面通知
  • html5 php 网站源码门户网站建设课程设计
  • 网站集约化建设的优势wordpress 微信二维码
  • 中国建设银行网站密码是什么意思网站备案幕布尺寸
  • 网站建设项目明细表家居装修设计平台
  • 河南建设工程造价管理协会网站域名绑定网站
  • 网站绑定别名好吗小语种网站案例
  • 如何将视频添加到网站上wordpress排序插件
  • 淘宝做网站的wordpress多站批量发布
  • 织梦高端html5网站建设工作室网络公司网站模板湖北自适应网站建设报价
  • 付网站建设服务费记账做一个公司官网
  • 泉州建设人才网站去哪个网站可以做写手
  • 可视化网站后台wordpress修改html代码
  • 做网站英语老师的简历wordpress球形标签
  • 摄影摄像网站建设网络营销与直播专业学什么
  • 网站美化的目标适用于手机的网站怎么建设
  • 做网站的是什么职业php中switch做网站
  • js网站特效私域运营软件
  • 设计与绘制一个网站首页中国手机网
  • 中国做趋势的网站网站建设推广关键词
  • 网站充值这么做wordpress怎么禁google