《Head.First设计模式读书笔记》之设计原则一、二和三

简介:
ü   设计原则 1 :找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
例如:对于一个鸭子类,不同的鸭子(真鸭子,木头鸭子等)有不同的飞行行为,呱呱叫行为,所以要把这两个行为从鸭子类中分离出来,在鸭子类中只保存那些不变的部分。
 
ü   设计原则 2 :针对接口编程而不是针对实现编程。
这里的接口有多个含义,它可以是 java 中的 interface ,也可以是抽象类。 “针对接口编程”, 关键就在多态 。利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”这句话,可以更明确地说成“变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口,如此,只 要是具体实现此超类型的类所产生的对象,都可以指定给这个变量
举个例子:
假设有一个抽象类 Animal ,其下有两个实现类  Dog Cat 继承自 Animal 。做法如下:
²  针对实现编程:
Dog dog = new Dog();
bj.bark();
注: 声明变量“ dog   Dog 类型 ( Animal 的具体实现 ) ,会造成我们必须针对具体实现编码。
²  针对接口 / 抽象类编程 :
Animal animal = new Dog();
Animal.makeSound();
注:利用 animal 进行多态的调用。
 

设计原则3:多用组合(composition),少用继承

使用组合建立系统具有很大的弹性,不仅可将行为封装成类,更可以“在运行时动态地改变行为 ,只要组合的行为对象符合正确的接口标准即可。
 
     例如:在设计原则一中我们把“飞行行为”和“呱呱叫行为”这两个变化的行 为从鸭子类中分离出来。这里我们就设计这两个行为和鸭子类:
以上     以上为两个行为接口和它的实现类。此时我们要做的就是把两个行为整合到鸭子类中,具体怎么整合?继承吗?继承只能继承一个特定的类,因此用继承将不能“在运行时动态地改变行为”。那么我们选用组合。
        Duck类中“加入两个实例变量”,分别为“flyBehavior”与“quackBehavior”,声明为接口类型(而不是具体类实现类型),每个鸭子对象都会动态地设置这些变量以在运行时引用正确的行为类型(例如:FlyWithWingsSqueak等)
 
此时我们就把两个行为组合到 Duck 类中了,既然使用了组合,我们怎么 在运行时动态地改变行为呢?如下我们写一个 main 函数来看看:
    p ublic static void mian(String args[]){
       Duck duck = new Duck();
       duck .setFlyBehavior(new FlyNoWay());
       duck .setQuackBehavior(new Quack());
        // 此时若想要鸭子能飞,我们可以通过 setter 方法 在运行时动态地改变行为
       duck.setFlyBehavior(new FlyWithWings());
    }
         Sping 中依赖注入(IOC)使用的就是组合。









本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/193800,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
设计模式 关系型数据库
【设计模式——学习笔记】设计模式简介+七大设计原则介绍(下)
【设计模式——学习笔记】设计模式简介+七大设计原则介绍
21 0
|
6月前
|
设计模式 前端开发 算法
设计模式之设计原则
程序设计的要遵循的一些理论,也可以理解为程序设计的一种要求和目标,是面向对象程序设计的基石,也是面向对象程序设计的质量保障和依据。
37 0
|
7月前
|
设计模式 Java 关系型数据库
Java设计模式中的设计原则 2
Java设计模式中的设计原则
55 0
|
3月前
|
设计模式 关系型数据库 程序员
【设计模式】设计原则
【1月更文挑战第12天】【设计模式】设计原则
|
4月前
|
设计模式 程序员
设计模式-设计原则
设计模式-设计原则
|
6月前
|
设计模式 存储 Java
JAVA设计模式第一讲:设计原则
JAVA设计模式第一讲:设计原则
|
6月前
|
设计模式 Java 程序员
【设计模式——学习笔记】设计模式简介+七大设计原则介绍(上)
【设计模式——学习笔记】设计模式简介+七大设计原则介绍
29 2
|
7月前
|
设计模式 算法 Java
Java设计模式中的设计原则 1
Java设计模式中的设计原则
66 0
|
9月前
|
设计模式 算法 关系型数据库
设计模式——设计模式简介、分类及面向对象设计原则
23 种设计模式中有些模式今天已经不流行了,有些模型已经被语言机制替代了,有些模式你可能常常会忘记,但这些都不重要,重要的是设计原则,因为有了这些设计原则,你有可能发明自己的模式,你也可以理解未来千千万万其他领域的模式。
49 1
|
9月前
|
设计模式 关系型数据库 区块链