设计模式之外观模式

设计模式之外观模式

1.定义:

          为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

2.引入:

        我们以开车时候自动挡和手动挡加速换挡为例:

       手动挡的加速换挡过程:松油门(freeAccelerator)-->踩离合踏板(pushClutch)-->换挡(shiftGear)-->放离合(freeClutch)-->踩油门(pushAccelerator

      

      代码实现:

public class User {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Car car = new CarImpl();
		car.pushClutch();
		car.shiftGear();
		car.freeClutch();
	}

}
 interface Car{
	
	//踩离合
	public void pushClutch();
	//换挡
	public void shiftGear();
	//松离合
	public void freeClutch();
}
 class CarImpl implements Car{

	@Override
	public void pushClutch() {
		System.out.println("踩离合");
	}

	@Override
	public void shiftGear() {
		System.out.println("换挡");
	}

	@Override
	public void freeClutch() {
		System.out.println("松离合");
	}
}

  

        自动挡的加速换挡过程:踩油门---->自动变速箱(踩离合踏板(pushClutch)-->换挡(shiftGear)-->放离合(freeClutch))--->踩油门


   代码实现:

public class User {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AutoShiftCar car = new AutoShiftCar();
		car.autoShift();		
	}

}
class AutoShiftCar{
	Car car = new CarImpl() ;
	public void autoShift() {
		car.pushClutch();
		car.shiftGear();
		car.freeClutch();
	}
	
}
 interface Car{
	
	//踩离合
	public void pushClutch();
	//换挡
	public void shiftGear();
	//松离合
	public void freeClutch();
}
 class CarImpl implements Car{

	@Override
	public void pushClutch() {
		System.out.println("踩离合");
	}

	@Override
	public void shiftGear() {
		System.out.println("换挡");
	}

	@Override
	public void freeClutch() {
		System.out.println("松离合");
	}
}

从类图中和代码中可以看出,自动挡的变速箱就是讲手动挡变速箱的换挡过程封装到一个方法中,这样用户使用的时候就不需要知道具体的换挡的过程,只需要去调用自动换挡的方法autoShift,它就会把整个换挡的三个方法(pushClutch---shifGear---freeClutch)组合起来。

3.说明

      外观模式就是使用一个接口group将一组特定顺序的接口(A--B--C)组合起来,当需要调用特定顺序的一组接口(A--B--C)的时候,就只需要调用对于的那个接口group就行;组合的接口顺序发生改变时(A--B--C修改为C--B--A),我们也只需要去修改接口group,引用到group的地方就会跟着被修改。

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值