设计模式入门--设计模式学习笔记<一>
来源:互联网 发布:天津数控编程招聘信息 编辑:程序博客网 时间:2024/05/16 15:58
设计模式入门--设计模式学习笔记一
使用模式的最好方式:
把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用他。
设计原则1:
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
这个原则的另一种思考方式:“把会变化的部分取出并 封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分”。
设计原则2:
针对接口编程,而不是针对实现编程。
“针对接口编程” 真正的意思是“针对超类型 (supertype)编程”。
设计原则3:
多用组合,少用继承。
“有一个”可能比”是一个”更好
第一个设计模式:Strategy Pattern(策略模式)
定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的替换独立于使用算法的客户。
鸭子模拟:
原则1:将鸭子变化的和不变的分开。
不变:都会游泳,外貌特定不变;
变:会飞于不会飞,不同的鸭子叫声不同;
原则2:针对接口编程。
将变化的部分封装成接口:
1.使用interface封装
public interface FlyBehavior {
public void fly();
}
public interface QuackBehavior {
public void quack();
}
2.使用抽象类封装
public abstract class FlyBehavior {
public abstract void fly();
}
public abstract class QuackBehavior {
public abstract void quack();
}
实现变化部分:
public class FlyNoWay extends FlyBehavior{
@Override
public void fly() {
System.out.print("Ican't fly!!");
}
}
public class FlyWithWings extends FlyBehavior{
@Override
public void fly() {
System.out.print("Iam flying!");
}
}
public class Quack extends QuackBehavior{
@Override
public void quack() {
System.out.print("Quack\n");
}
}
public class Squeak extends QuackBehavior{
@Override
public void quack() {
System.out.print("Squeak");
}
}
原则3:多用组合,少用继承
利用接口将鸭子的变化与不变组合成superclass Duck
public abstract class Duck {
FlyBehavior mFlyBehavior;
QuackBehavior mQuackBehavior;
public Duck(){
}
public abstract void display();
public void performFly(){
mFlyBehavior.fly();
}
public void performQuack(){
mQuackBehavior.quack();
}
public void swim(){
System.out.print("Allducks float!!!");
}
}
创建subclass MallardDuck,继承自superclass Duck,这里,我们正在制造一个具体的Quack实现类的实例和一个FlyWithWings实现类的实例!违背了设计原则2,不针对实现编程。会在学习了其它模式后修改。
public class MallardDuck extends Duck {
public MallardDuck(){
mFlyBehavior = newFlyWithWings();
mQuackBehavior = newQuack();
}
@Override
public void display() {
System.out.print("I’ma real Mallard duck");
}
}
编译测试:
public class Simulator {
public static void main(String[] args)
{
Duck mallard = newMallardDuck();
mallard.performQuack();
mallard.performFly();
}
}
输出:
- 设计模式入门--设计模式学习笔记<一>
- 《Head First 设计模式》学习笔记一:设计模式入门
- 设计模式学习笔记之设计入门
- 设计模式学习笔记一
- 设计模式学习笔记 一
- 设计模式学习笔记(一)
- 设计模式学习笔记(一)
- 设计模式学习笔记(一):设计模式与设计原则
- 设计模式学习笔记-装饰模式
- 设计模式学习笔记(一): Bridge 模式
- 设计模式学习笔记(一):策略模式
- (一)设计模式入门
- 设计模式入门笔记
- 设计模式学习(一)入门篇
- java设计模式学习笔记(一)-- 简述设计模式
- 设计模式学习笔记:一、设计模式简介
- 设计模式学习笔记--23种设计模式(一)
- 设计模式学习笔记(一)设计模式六大原则
- 《华为研发》阅读 - 11 (中研部组织结构)
- linux下subversion+apache安装
- Introduction to the QML Language
- ribbon界面状态栏显示鼠标坐标
- APK反编译
- 设计模式入门--设计模式学习笔记<一>
- ARP,RARP协议笔记
- 即将逝去的大学生活
- 【翻译】一些有趣的算法代码
- [.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证
- 网页登陆 记住密码
- [.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证
- linux/centos install android develpoment environment
- Session 工作原理