读banq的设计模式+最近的面试

09-07-09 pushengying
              

最近经历了好多场面试

都有意无意的问到了模式

我自己是很中意模式的

因为编程中加入模式后,可让程序的可复用性可维护性强了

让编程看起来像艺术了

让自己不再累死在code上了

很熟悉吧,有些话是从banq哪里学过来的

面试中面试官问我的几个模式问题

1,解释 桥接模式

2,log4j用了什么模式

写出两种单例模式

3,写出facade模式的

典型代码

很高兴他们会问模式,虽然我有些没有答出来

其中桥接模式我没有答出来

回来后,我看了下,原来我看过好几次的,是抽象与行为分离

问题形象描述:

小杯咖啡加牛奶 小杯咖啡不加牛奶

中杯咖啡加牛奶 中杯咖啡不加牛奶

大杯咖啡加牛奶 大杯咖啡不加牛奶

问题的可变元素 不加牛奶而是加葡萄果汁呢

那么是不是又有很多种呢

有没有办法解决呢,桥接模式

类 咖啡

属性(抽象),杯子

行为,加牛奶

把他们分离,这就是桥接模式(将属性与行为解耦)

对抽象编程

责任划分,把加牛奶\不加牛奶这种行为,划分给谁合适呢

这是个要考虑的问题,这个每个人的想法不同,理由不同,可做不同的设计

下面代码过程中,我们主要关注属性怎么与行为分离

public abstract class Coffee{

private CoffeeImpl coffeeImpl;

//需要加把coffeeImpl实例化了

public void pour(){

coffeeImpl.pour();

}

}

public interface class CoffeeImpl{

public void pour();

}

public MilkCoffeeImpl implements CoffeeImpl{

public void pour(){

System.out.println("我是要加牛奶的");

}

}

桥接模式,看看名字,我想我们应该能想得到,那个是桥,为什么是桥,怎么桥接的

如果把杯子大小抽象为属性

那么好像跟策略模式有些相似呀,简直一模一样呀

log4j,是全局的,还有管理日记资源的,所以很容易想到是单例模式的

facade模式

就有理清关系和能提供简单接口的功能呀

banq书的facade模式一章中,里画了两张图,一看就明白了

不过他让我写出典型代码我就不知所措了

持有一个复杂类的引用

在抽象出的简单的接口的实现中,调用复杂类的方法

这么实现有点疑惑,怎么有点像适配模式呀

不同的模式有不同的问题域

应该有不同的解决方案呀,我怎么看起来有些方案相同呀

疑惑

明天再接着看书,找资料看看能不能解决这些问题

              

2
banq
2009-07-10 08:44

有思考才有进步,欢迎继续写出你的思考过程,帮助更多人,因为每个人语境不一样,你写出来和我写出来对于初学者来说不一样,他们可能难看懂我的文字,但是容易懂你的文字。

pushengying
2009-07-16 11:03

谢谢banq鼓励

YiBanXiaoRen
2009-10-01 12:26

即使设计模式的路在漫长!一个好的开端定是成功的一半!

amiaq
2009-11-06 16:00

LZ说的那个问题形象描述,说得不应该是装饰器模式吗?

2Go 1 2 下一页