- 浏览: 80189 次
- 性别:
- 来自: 北京
最新评论
-
hanlingbo2008:
问题:
空中巴士(airbus)、波音(Boeing)、麦道 ...
桥梁(Bridge)模式 -
hanlingbo2008:
从Enueration到Iterator的适配
publ ...
适配器模式(Adapter) -
hanlingbo2008:
从Iterator到Enueration的适配
publ ...
适配器模式(Adapter)
文章列表
11.2 、模板方法模式中的方法
基本方法: 抽象方法(Abstract Method), 具体方法(Concrete Method), 钩子方法(Hook mehtod)
钩子方法:一个由抽象类声明并实现,而子类加以扩展。通常是抽象类给出的空实现,作为默认实现,子类加以扩展。
代码:
abstract public class AbstractClass
{ /**钩子方法*/
public void hookMethod()
{}
/**抽象方法*/
public abstract void abstract ...
- 2008-11-15 22:50
- 浏览 745
- 评论(0)
11.1 模板方法例子
考虑一个银行存款例子。假设系统需要支持两种存款账号,及货币市场账号(MoneyMarketAccount )和定期存款账号(CDAccount)。这两种账号的存款利息是不同的,因此在计算一个存户存款利息的时候,必须区分两种不同的账号。 这个系统的总行为是计算出利息,这个也就决定了两个步骤:一是确定账号类型,二是确定利息的百分比。因此系统需要两个基本方法:一个计算账号类型,一个计算利息百分比。
代码实现:
package test.biancheng.patterns.template.example1;
abst ...
- 2008-11-15 22:34
- 浏览 1123
- 评论(0)
11、模板(Template Method)方法模式
定义:准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。
角色: 抽象模板角色 和 具体模板角色
代码:
/**抽象模板类*/
public abstract class AbstractClass {
/**模板方法声明和实现*/
public void templateMethod(){
//调用基本方法(由子类实现)
doOperation1();
//调用基本方法(由子类实现)
doOperation2();
...
- 2008-11-15 22:11
- 浏览 914
- 评论(0)
10、不变(Immutable)模式
定义: 一个对象的状态在对象被创建之后就不在发生变化,这就是Immutable Pattern。
不变模式分:强不变模式和弱不变模式
弱不变模式:一个类的实例状态是不变的,但是这个类的子类实例具有可能会变化的状态。
强不变模式:一个类的实例状态是不变的,这个类的子类实例也具有不可变化的状态。实现的途径是类所有的方法都是 final类型,或者类本身就是final的
java.lang.String 类就是强不变类。
String a = "abc" ; ...
- 2008-11-15 21:44
- 浏览 808
- 评论(0)
9、桥梁(Bridge)模式
桥梁模式的结构图
这个系统含有两个等级结构:
抽象化角色(abstaction)和修正抽象化角色(RefinedAbstraction)构成抽象化等级结构
由实现化角色(Implementor)和两个具体实现化角色所构成的实现化等级
Facade模式的角色:
抽象化角色(Abstraction): 保存一个实现化对象的引用,给出抽象化定义
修正抽象化角色(Refined Abstrction): 扩展抽象化角色,改正和修正父类对抽象化的定义
实现化角色(Implementor): 给出实现化角色的接口,但不给出具体的实现
具体实现化角色(C ...
- 2008-11-15 13:01
- 浏览 1035
- 评论(1)
8、门面模式(Facade)
门面角色(Facade): 供客户端调用,分派客户端的请求到子系统中去;此角色知晓相关的子系统的功能和责任;
子系统角色(SubSystem): 可以有一个或多个子系统;每个子系统都是一个类的集合
什么是门面角色?
门面模式要求一个子系统的外部和内部的通信必须通过一个统一的门面(Facade)进行。 门面模式提供一个高层次的接口,使得子系统易于使用。
在什么情况下使用门面模式?
为一个复杂子系统提供一个统一的接口
子系统的独立性
层次化结构
实例代码:
public class Facade
{
pu ...
- 2008-11-15 12:21
- 浏览 1119
- 评论(0)
8. 代理模式(Proxy)
抽象主题角色(abstract role): 声明真实主题和代理主题的共同接口。
代理主题角色(Proxy role ): 包含真实主题的引用;创建真实引用;在调用真实主题之前和之后,执行某个真实对象没有侧操作。
真实主题角色(true role): 被代理的对象。
代理模式例子
public interface SaleComputer {
//抽象主题角色,一个接口
public void sale(String type);
}
/**
* 真实主题角色
*/
public class ComputerMaker impl ...
- 2008-11-14 17:51
- 浏览 825
- 评论(0)
7、缺省适配模式(Default Adapter)
问:在什么情况下使用该模式?
答:不准备实现一个接口的所有的方法时。
例子: 假设有一个接口,这个接口有5个方法:
/**
* 拥有5个方法的接口
*
*/
public interface A {
void f1();
void f2();
void f3();
void f4();
void f5();
}
你准备写一个ClassB实现这个接口,但是你只对接口中的某个方法 f1() 感兴趣,请给出一个可行的方案?
代码如下:
首先设计一个 ...
- 2008-11-14 17:19
- 浏览 874
- 评论(0)
6. 适配器模式(Adapter)
模式所设计的角色有:
目标角色(Target): 这里是所期待得到的接口。此目标不可以是类。
源角色(Adaptee): 现有需要适配的具体类,要包装类中的方法。
适配器(Adapter): 把源接口转换成目标接口。适配器必须是具类。
例子: 请做一个Kittie的具体类,并实现miao(), catchRat(), run() , sleep()方法,在做一个接口Puppie,要求有 wao(), fetc ...
- 2008-11-14 16:50
- 浏览 1062
- 评论(2)
5. 建造模式(builder)
抽象建造者角色(builder):给出一个抽象接口,以规范产品对象的各个组成部分的建造。一般包括两种方法:1、建造方法,比如生成零件方法等;2、结果返回方法;比如返回汽车方法。
具体建造者(Concrete Builder)角色: 实现抽象建造者Builder所声明的接口,给出创建创建产品实例的操作;在建造完成后,提供产品实例返还。
导演者(Director): 调用具体建造者创建产品. 但是导演者并没有产品类的具体知识,真正拥有产品知识的是具体建造者。
产品角色(Product ): 产品类便是建造中的复杂对象。系统中会有多种产品,所以这些产品不能有共同的接 ...
- 2008-11-14 15:46
- 浏览 871
- 评论(0)
来自:http://www.iteye.com/topic/41096
个程序员都应牢记的7种坏味道,11种原则,23种模式 (一)7种设计坏味道 1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 2.脆弱性: 对系统的改动会 ...
- 2008-11-14 12:30
- 浏览 791
- 评论(0)
开闭原则 OCP(Open-Closed Principle): 对扩展开放,对修改关闭. 抽象和接口是关键.
里氏代换原则 LSP(Liskov Substitution Principle): 如果对于每一个类型为T1的对象o1,都有类型为T2的对象o2, 使得以T1定义的所有程序P在所有对象o1都代换为o2时, 程序P的行为没有变化, 那么类型T2是类型T1的子类型。反过来代换不成立。
依赖倒转原则DIP(Dependence Inversion Principle): 第一种表述是,抽象不应当依赖与细节,细节应当依赖与抽象;第二中表述是,要针对抽象和接口编程,不要针对实现编程。
接口 ...
- 2008-11-14 11:06
- 浏览 996
- 评论(0)
4. 策略模式
环境角色(Context):持有一个Strategy类的引用。
抽象策略角色(Strategy):给出所有具体策略类所需的接口。
具体策略(ConcreteStrategy):包装相关算法和行为。
- 2008-11-14 10:30
- 浏览 1242
- 评论(0)