软件设计原则
文章平均质量分 72
设计模式热身
程序猿胖虎
这个作者很懒,什么都没留下…
展开
-
1. 开闭原则
上述代码要完成的是电商的折扣卷计算的方法,Order 类包含一个计算折扣金额的方法,它根据不同的折扣类型应用折扣。当我们需要添加新的折扣类型时,就不得不需要修getDiscountedAmount 方法的代码,这显然是不合理的,这就违反了开闭原则。在程序需要拓展的时候,不能去修改原有代码,实现一个热插拔的效果(即插即用),这样写出来的程序才能具有良好的扩展性,易于维护性。假如我们妲己最近玩的人很多,又想出一款新的皮肤,那么我们只需要创建一个新的类去实现抽象皮肤类去实现方法即可。(修改模块、类、方法等)。原创 2024-09-22 01:02:50 · 588 阅读 · 0 评论 -
2.里氏替换原则
我们可以看到resize这个方法是长方形具备的,但是正方形不具备的,所以这不满足lsp,这不是一个合理的继承关系,当然了,你要非得继承也是可以的,直接在正方形的resize中设置,调用resize就抛异常,直接屏蔽了正方形中的resize方法,但是不合理。假如我们想要开发一款与几何图形的软件相关的系统,我们通常都是让正方形继承长方形。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法(注意是尽量,而不是必须!lsp原则要求我们:子类可以扩展父类的功能,但不能改变父类原有的功能。原创 2024-09-23 00:13:46 · 329 阅读 · 0 评论 -
3. 依赖倒转原则
我们在日常开发代码中,写的方法,里面是不是经常会看到参数是接口的形式,比如我们要接收一个collection集合,但是在实现的时候是不是可以把list传进去。是对象间耦合度最弱的一种关联方式,在代码中,某个类的方法通过局部变量,方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。依赖倒转原则是开闭原则的一种实现,大家可以想一想,开闭原则的内容:对扩展开放,对修改关闭。继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系。原创 2024-09-23 00:14:51 · 440 阅读 · 0 评论 -
4. 接口隔离原则
因为我们的高端品牌的防盗门太贵了,不亲民,所以我们需要研发一款价格比较亲民的,但是功能没那么多的,只有防盗和防火功能,那么此时还去继承SafetyDoor 就会违背接口隔离原则。假设我们现在有一个A类,A类中有两个方法,方法1和方法2,我们还有一个B类,想使用方法1,我们应该怎么做?这里有一个问题:就是B只想使用方法1,不使用方法2,但是我们的B继承了A,就被迫依赖了它不需要的方法。所以我们可以按照能力来创建接口,防盗功能是一个接口,防火功能是一个接口,防水功能是一个接口。是不是此时有一点感觉了!原创 2024-09-23 18:19:43 · 500 阅读 · 0 评论 -
5. 迪米特法则
再比如,我们都是程序员,如果有一家公司想做一款app,他会去找软件工程师呢,还是软件开发公司,他一定回去找开发公司。明星由于全身心投入艺术,还需要唱跳打篮球,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务治淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。假如现在我要买房,我去卖房软件上,看到了一个自己喜欢的房,打电话,接电话的人大多都是房产中介。存在关联,聚合,组合,依赖关系的都可以直接访问这些对象的方法,不需要中间商。【案例-明星与经纪人】原创 2024-09-23 21:48:51 · 242 阅读 · 0 评论 -
6.合成复用原则
在这个例子中,Car类通过组合的方式包含了Engine类的对象,而不是通过继承。这是不允许的,因为GasolineCar和ElectricEngine之间没有继承关系,它们都是Vehicle的子类,但彼此之间并不相关。首先,我们定义一个简单的Engine类,这个类包含一些基本的属性和方法,比如发动机的型号、功率以及启动发动机的方法。接下来,我们定义一个Car类,这个类通过一个Engine类型的成员变量来引用一个发动机对象。----> NO!通常类的复用分为:合成复用(推荐) 与 继承复用。原创 2024-09-23 22:59:07 · 973 阅读 · 0 评论