【知识点】 漫谈设计模式 02
?
第一篇 模式介绍
- 为什么要学习和使用设计模式?
---------------- chat 1 谈面向对象的设计模式 ----------------
#1 什么是对象
- 面向对象的本质 :是包含一些行为和属性的组合体。
- 三个基本特征 : 封装(隐藏数据,避免造成程序之间过度依赖;引起对象状态不一致)
? ? ? ? ? ? ?继承(继承父类的功能,扩展父类的功能)
?多态(实现了相同的方式处理不同类型的对象)
#2 面向对象的好处
- 易于理解和抽象
- 更加容易重用代码
- 天生具有拓展性和开放性
- 易于测试和调试
#3 重用
- Favor Composition over inheritance.
- 模式能够让我们从思想上重用有应验的开发人员的解决方案来解决问题。
#4 模式的简史
- Gang of Four Gof 四人帮
#5 什么是模式
- A pattern is a solution to a problem in a context.
- 4个基本要素: pattern name, problem, solution, consequence.
- 在特定的上下文,相关的类和对象如何协作来解决这些常见的问题。
- 通过阅读,纵横拓展我们的视野
#6 学习设计模式常见问题
- 设计模式和OO的关系? 最基本的模式都是面向对象的,并不代表只有面向对象才有模式。
- Service-Oriented Architecture/Agile/open service Gateway initiative. SOA,Agile,OSGI.
- OO的眼光看问题和解决问题。
- 解决问题才是根本,模式只是解决问题的经验总结。
- 软件的核心是什么? 模型
---------------- chat 2 第一个设计模式 Template method ----------------
#1 从回家过年说起
买票-乘交通工具-回家
#2 Don't repeat yourself
- The only thing in the world that doesn't change is change itself.
- 谁能从容应对软件开发中的变化
- develop or maintenance.
- Duplication is Evil 复制是魔鬼
- once and only once.
- 变化+重复,如何维护
#3 模板方法模式
- 使用继承
订票和在家里吃团圆饭是相同的逻辑,回家的方式各不用。父类有3个方法,2个相同逻辑的已实现;子类各自实现回家的方式。
[code-begin]
public abstract class 春节回家{
//模板方法
public void 庆祝春节(){?
订票();
乘车();
在家庆祝();
}
protected final void 订票(){
System.out.println("订票...");
}
protected abstract void 乘车();
protected final void 在家庆祝(){
System.out.println("在家庆祝...");
}
}
[code-end]
- 模板方法模式
- 子类可以覆盖其中某些部分
- 不能改变步骤的执行顺序
#4 引入回调(Callback)
- 过份的使用Template Method Pattern,子类会泛滥
- Java使用内部匿名类实现
[code-begin]
public class 春节回家{
//模板方法
public void 庆祝春节(HandlerTool ht){?
订票();
ht.乘车();
在家庆祝();
}
private final void 订票(){
System.out.println("订票...");
}
//protected abstract void 乘车();
private final void 在家庆祝(){
System.out.println("在家庆祝...");
}
}
public class Test{
?new 春节回家().庆祝春节(new HandlerTool(){
public void 乘车(){
System.out.println("飞机...");
}
?});
}
[code-end]