设计原则实验总结
实验名称
设计原则。
实验目的
设计并实现符合面向对象设计原则的某一演示系统。
实验类型
设计型。
实验环境
编程环境:Visual Studio Code;
运行环境:Windows 10等。
实验内容
该演示系统分为车、路、人三个抽象类,符合依赖倒置原则;车抽象类分出汽车、公交车两个子类,路分为高速公路、市区街道两个子类,人分为男人、女人两个子类,符合里氏替换原则;每个类下只实现一个功能,符合单一职责原则。人看到路上行驶车,因此路依赖车、人依赖路。
系统类图,如图1所示:
实验运行结果,如图2所示:
实验总结
通过本次实验我对面向对象设计的常用几种原则有了深刻的理解,并且通过模拟一个小的系统实现了单一职责原则、依赖倒置原则、里氏代换原则,为自己写一个可重复利用的良好代码养成了良好的习惯。
代码如下:
// 汽车是一个维度,有多种不同的车型
abstract class AbstractCar {
abstract run(): void;
}
// 路是一个维度,有多种不同的路
abstract class AbstractRoad {
car: AbstractCar;
abstract snapshot(): void;
}
class SpeedRoad extends AbstractRoad {
constructor(car: AbstractCar) {
super();
this.car = car;
}
snapshot(): void {
console.log('在高速公路上');
this.car.run();
}
}
class Street extends AbstractRoad {
constructor(car: AbstractCar) {
super();
this.car = car;
}
snapshot(): void {
console.log('在市区街道上');
this.car.run();
}
}
class Car extends AbstractCar {
run(): void {
console.log('开着小汽车');
}
}
class Bus extends AbstractCar {
run(): void {
console.log('开着公共汽车');
}
}
function carRunOnRoadDemo(): void {
// 在高速公路上,开着小汽车
const car = new Car();
const speedRoad = new SpeedRoad(car);
speedRoad.snapshot();
// 在市区街道上,开着公共汽车
const bus = new Bus();
const street = new Street(bus);
street.snapshot();
}
carRunOnRoadDemo();
/* 人,汽车和路三个维度*/
abstract class Person {
road: AbstractRoad;
abstract see(): void;
}
class Man extends Person {
constructor(road: AbstractRoad) {
super();
this.road = road;
}
see(): void {
console.log('男人看到');
this.road.snapshot();
}
}
class Woman extends Person {
constructor(road: AbstractRoad) {
super();
this.road = road;
}
see(): void {
console.log('女人看到');
this.road.snapshot();
}
}
function personSeeCarOnRoadDemo() {
// 男人看到 在市区街道上 开着小汽车
console.log("----------");
const car = new Car();
const street = new Street(car);
const man = new Man(street);
const woman = new Woman(street);
man.see();
woman.see();
}
personSeeCarOnRoadDemo();