曾家兴 | 2021软件代码开发技术作业二 | 读书笔记----软件设计原则、设计模式
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833 |
这个作业的目标 | 学习软件设计模式的分类、各种模式的基本内容和设计原则 |
回顾在过去的软件设计实践中接触过或者使用过哪些设计原则和设计模式 |
阅读书籍
《软件秘笈:设计模式那点事》 作者:政阿奇
设计模式分类
设计原则
- “开-闭”原则
- 软件实体如类,应对外部的需求需要变化时,应当通过额外拓展来实现,而不是修改现有的内容去实现。
- 单一职责原则
- 简单来说就是一个类,应只有一个职责令它发生变化。如果职责过多便会耦合起来,产生连锁反应。
- 依赖倒置原则
- 针对于抽象编程,而不是具体实现。因为上层组件调用下层组件时,是要根据下层组件而发生变化的,如果下层变化剧烈会导致上层同样剧烈变化。而依赖于抽象则变化概率比较小。
- 接口隔离原则
- 类和类之间应该建立在最小的接口上,不同的角色交给不同的接口处理。
- 里氏替换原则
- 使用的基类可以在任何地方使用继承的子类,完美地替换基类
- 迪米特法则
- 一个类尽量减少自己对其他对象的依赖,原则是低耦合,高内聚,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率
桥接模式
我感觉在过去的实践中比较多涉及到了交接模式
桥接模式:将抽象化与实现化脱耦,使得二者可以独立地变化
解决问题:
- 以往的继承使得类之间的关联太强了
- 新建子类会使得开销变大
UML:
代码结构
关键点
- 基类:
- 接口:
电灯接口
package demo.bridge.lights.impl;
import demo.bridge.lights.ILight;
/*
白炽灯实现
*/
public abstract class IncandescentLight implements ILight{
//断开电流
public void electricCloese(){
System.out.println("白炽灯被关闭了");
}
//接通电流
public void electricConnected(){
System.out.println("白炽灯被打开了");
}
//照明
public void light(){
System.out.println("白炽灯照明");
}
}
开关基类
package demo.bridge.switchs;
import demo.bridge.lights.ILight;
/*
* 开关顶层类
*
*
*/
public class BaseSwitch {
//使用组合,设置ILight为内部私有属性,这是桥梁
protected ILight light;
//构造方法将外部的light类型注入进来
public BaseSwitch(ILight light){
this.light=light;
}
/*
开灯方法
*/
public final void makeLight(){
//打开开关,接通电流
this.light.electricConnected();
//照明
this.light.light();
//关闭开关,断开电流
this.light.electricConnected();
}
}
遥控开关
package demo.bridge.switchs.sub;
import demo.bridge.lights.ILight;
import demo.bridge.switchs.BaseSwitch;
/*
遥控开关,继承BaseSwitch拓展功能
*/
public class RemoteControlSwitch extends BaseSwitch{
//构造方法
public RemoteControlSwitch(ILight light){
super(light);
}
/*
使用遥控开关控制开灯
@param operColor
灯的颜色
*/
public final void makeRemoteLight(int operColor){
//打开开关,接通电流
this.light.electricConnected();
//照明
this.light.light();
String color = "";
switch (operColor)
{
case 1:
color = "暖色";
break;
case 2:
color = "蓝色";
break;
case 3:
color = "红色";
break;
case 4:
color = "白色";
break;
}
System.out.println("...现在是"+color+"!");
//关闭开关,断开电流
this.light.electricClosed();
}
}
白炽灯实现
package demo.bridge.lights.impl;
import demo.bridge.lights.ILight;
/*
白炽灯实现
*/
public abstract class IncandescentLight implements ILight{
//断开电流
public void electricCloese(){
System.out.println("白炽灯被关闭了");
}
//接通电流
public void electricConnected(){
System.out.println("白炽灯被打开了");
}
//照明
public void light(){
System.out.println("白炽灯照明");
}
}
水晶灯实现
package demo.bridge.lights.impl;
import demo.bridge.lights.ILight;
/*
水晶灯实现
*/
public abstract class CrystalLight implements ILight{
//断开电流
public void electricClose(){
System.out.println("水晶灯被关闭了");
}
//接通电流
public void electricConnected(){
System.out.println("水晶灯被打开了");
}
//照明
public void light(){
System.out.println("水晶灯照明");
}
}
个人心得
桥接模式是开发过程中比较常见的一种模式,这种模式是更多用于使抽象和实现独立化,便于对两个部分进行修改