设计模式-外观模式

外观模式将一个或数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。

构建自己的家庭影院

//打开爆米花机,开始爆米花
popper.on();
popper.pop();

//调整灯光亮度
lights.dim(10);

//把屏幕放下
screen.down();

//打开投影仪
projector.on();
projector.setInput(dvd);
projector.wideScreenMode();


//打开对应功效
amp.on();
amp.setDvd(dvd);
amp.setSurroundSound();
amp.setVolume(5);

//打开DVD播放机
dvd.on();
dvd.play(movie);

以上是看电影的任务,写成对应的类和方法的调用,如何解决这混乱的现象?可以使用外观模式。

通过实现一个提供更合理的接口的外观类,你可以将一个复杂的子系统变得容易使用。如果你需要复杂子系统的强大威力,还是可以使用原来的复杂接口;如果需要的是一个方便使用的接口,那就使用外观。

定义外观模式

创建一个接口简化而统一的类,用来包装子系统中一个或多个复杂的类。外观模式允许我们让客户和子系统之间避免紧耦合。

外观模式 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

image

"最少知识"原则

最少知识原则:只和你的密友谈话。

这个原则希望我们在设计中,不要让太多的类耦合在一起,免得修改系统中一部分,会影响到其他部分。如果许多类之间相互依赖,那么这个系统就会变成一个易碎的系统,它需要花许多成本维护,也会因为太复杂而不容易被其他人了解。

不要影响太多对象

就任何对象而言,在该对象的方法内,我们之应该调用属于以下范围的方法:

  1. 该对象本身。
  2. 被当作方法的参数而传递进来的对象。
  3. 次方法所创建或实例化的任何对象。
  4. 对象的任何组件。

对以上的总结:如果某对象是调用其他方法的返回结果,不要调用该对象的方法。

//从气象站取得温度计,然后再从温度计对象获取温度(不推荐)
public float getTemp(){
    Thermometer thermometer = station.getThermometer();
    return thermometer.getTemperature();
}

//应用最少知识原则,在气象站加入一个方法,用来向温度计请求温度。这样可以减少我们所依赖的类的数目
public float getTemp(){
    return station.getTemperature();
}

将方法调用保持在界限内

以下汽车类,展示调用方法的各种做饭,同时遵守最少知识原则

/**
 * @ClassName Car
 * @Author jia_xx
 * @Date 2023/1/14 21:25
 */
public class Car {
    //实例变量
    //类的组件,可以调用它的方法
    Engine engine;
    
    public Car(){
        //初始化发动机
    }
    
    public void start(Key key){
        Doors doors = new Doors();
        
        //参数传递进来的对象,其方法可以调用
        boolean authorized = key.turns();
        
        if(authorized){
            //组件方法,可以调用
            engine.start();
            //同一个对象的本地方法,可以调用(local method)
            updateDashboardDisplay();
            //可以调用创建或实例化的对象方法
            doors.lock();
        }
    }
    
    public void updateDashboardDisplay(){
        //更新展示
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值