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

最近经历了好多场面试
都有意无意的问到了模式
我自己是很中意模式的
因为编程中加入模式后,可让程序的可复用性可维护性强了
让编程看起来像艺术了
让自己不再累死在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模式一章中,里画了两张图,一看就明白了
不过他让我写出典型代码我就不知所措了

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

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

不同的模式有不同的问题域
应该有不同的解决方案呀,我怎么看起来有些方案相同呀
疑惑
明天再接着看书,找资料看看能不能解决这些问题

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

谢谢banq鼓励

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

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

我想那个问题形象描述是这样理解的吧:有一种饮料A1,需要加入另一种饮料B1,问题在于A1可能变化成其他的饮料C1,而B1也可能变化成其他的饮料D1。

不知道是不是这个理解?

2009年11月06日 16:00 "amiaq"的内容
LZ说的那个问题形象描述,说得不应该是装饰器模式吗?