#region 车辆接口和实现 interface ivehicle { void run(); } class car : ivehicle { public void run() { console.writeline("car is running"); } } class truck : ivehicle { public void run() { console.writeline("truck is running"); } } #endregion
驾驶员类:
class driver { private ivehicle _vehicle; public driver(ivehicle vehicle) { _vehicle = vehicle; } public void drive() { _vehicle.run(); } }
服务调用方:
var driver = new driver(new car());//开汽车 driver = new driver(new truck());//开卡车 driver.drive(); //这时候你会发现,如果小女生想要开坦克的话,目前是满足不了的 //因为driver构造参数传递的是ivehicle接口,不是itank接口 //如果想要满足小女生开坦克上街的愿望,就必须改造driver,传递itank接口,请看下一个例子 console.readkey();
第二版的实现=》小女生能开坦克,但是却不能开汽车了
class driver { private itank _tank; public driver(itank tank) { _tank = tank; } public void drive() { _tank.run(); } }
var driver = new driver(new heavytank());//开坦克 driver.drive(); // 这时候你会发现, 小女生能开坦克上街了,但是你又会发现,小女生现在只会开坦克了,不会开车了 // 问题出现在哪里呢? // 我们把一个胖接口(itank)传递进来,这个胖接口中有一个我们永远用不到的功能,就是fire。 // 所以现在这个设计是违反了接口隔离原则 // 具体改造请看下一个例子 console.readkey();
#region 车辆接口和实现 interface ivehicle { void run(); } class car : ivehicle { public void run() { console.writeline("car is running"); } } class truck : ivehicle { public void run() { console.writeline("truck is running"); } } #endregion
interface iweapon { void fire(); }
interface itank:ivehicle,iweapon { } class lighttank : itank { public void fire() { console.writeline("boom!"); } public void run() { console.writeline("ka ka ka!"); } } class heavytank : itank { public void fire() { console.writeline("boom!!!!!!!!"); } public void run() { console.writeline("ka!!! ka!!!! ka!!!!!!"); } }
驾驶员类:
class driver { private ivehicle _vehicle; public driver(ivehicle vehicle) { _vehicle = vehicle; } public void drive() { _vehicle.run(); } }
服务调用方:
//接口隔离的原则是 服务的调用方不会都要 //本例子中服务的调用方的需求很简单,这是要求会run,不要求fire //因此原先的itank接口中自己包含的fire和run就符合胖接口的规则,他提供了多余的接口给调用方 //因此把itank接口隔离开是对的 var driver = new driver(new heavytank());//开坦克 driver.drive(); driver = new driver(new car());//开汽车 driver.drive(); console.readkey();
如对本文有疑问, 点击进行留言回复!!
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
FlowableException: Error initialising dmn data model报错问题
网友评论