JAVA设计模式
2016-03-07 00:00
399 查看
摘要: 简单介绍java的设计模式,java设计模式学习笔记。
创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式
结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式(11种):策略模式、行为方法模式、观察者模式、迭代子模式、责任链模式、命令模式、 备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
**里氏代换原则。**父类可以出现的地方,子类都可以出现。
**依赖倒置原则。**面向接口编程,依赖抽象不依赖具体。
**接口隔离原则。**使用多个隔离的接口,比使用单个接口要好。
**迪米特法则。**一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
**合成复用原则。**尽量使用合成/聚合的方式,而不是使用继承。
1). 普通工厂模式。建立一个工厂类, 对实现统一接口的类进行实例创建。
下面以消息发送为例来说明:
![](http://i.imgur.com/LOTYao1.png)
定义接口
创建实现类
创建工厂类
2). 多个工厂模式。是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法分别创建对象。
上面的工厂修改为:
3). 静态工厂模式。将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
上面的工厂方法修改为:
2.抽象工厂模式。
抽象工厂模式是对普通工厂模式的改进。如果想扩展工厂类的实现,就需要修改工厂类,这样就违背了“开闭原则”。抽象工厂模式就是为了解决此类问题,如果需要创建工厂需要增加新的功能,添加一个实现类即可。
![](http://i.imgur.com/xDaoSIo.png)
上面的工厂类可以这样修改
使用者可以这样调用:
(未完待续.....)
JAVA设计模式
一、设计模式分类
常见的JAVA设计模式共有23中,大体分成3类:创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式
结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式(11种):策略模式、行为方法模式、观察者模式、迭代子模式、责任链模式、命令模式、 备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
二、设计模式六大原则
**开闭原则。**对扩展开放,对修改关闭。**里氏代换原则。**父类可以出现的地方,子类都可以出现。
**依赖倒置原则。**面向接口编程,依赖抽象不依赖具体。
**接口隔离原则。**使用多个隔离的接口,比使用单个接口要好。
**迪米特法则。**一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
**合成复用原则。**尽量使用合成/聚合的方式,而不是使用继承。
三、JAVA中的23中设计模式
1. 工厂方法模式1). 普通工厂模式。建立一个工厂类, 对实现统一接口的类进行实例创建。
下面以消息发送为例来说明:
![](http://i.imgur.com/LOTYao1.png)
定义接口
public interface Sender{ public void send(); }
创建实现类
public class SMSMessageSender implements Sender{ public void send(){ System.out.println("发送短信..."); } } public class SystemMessageSender implements Sender{ public void send(){ System.out.println("发送系统消息..."); } }
创建工厂类
public class SenderFactory{ public Sender newInstance(String type){ if(type==null){ System.out.println("参数不正确"); return null; } if("system".equals(type)){ return new SystemMessageSender(); }else if("sms".equals(type)){ return new SMSMessageSender(); }else{ System.out.println("类型不正确"); return null; } } }
2). 多个工厂模式。是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法分别创建对象。
上面的工厂修改为:
public class SenderFactory{ public Sender newSmsInstance(){ return new SMSMessageSender(); } public Sender newSystemInstance(){ return new SystemMessageSender();s } }
3). 静态工厂模式。将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
上面的工厂方法修改为:
public class SenderFactory{ public static Sender newSmsInstance(){ return new SMSMessageSender(); } public static Sender newSystemInstance(){ return new SystemMessageSender();s } }
2.抽象工厂模式。
抽象工厂模式是对普通工厂模式的改进。如果想扩展工厂类的实现,就需要修改工厂类,这样就违背了“开闭原则”。抽象工厂模式就是为了解决此类问题,如果需要创建工厂需要增加新的功能,添加一个实现类即可。
![](http://i.imgur.com/xDaoSIo.png)
上面的工厂类可以这样修改
public interface SenderFactory{ public Sender newInstance(); } public class SystemSenderFactory implements SenderFactory{ public Sender newInstance(){ return new SystemMessageSender(); } } public class SMSSenderFactory implements SenderFactory{ public Sender newInstance(){ return new SMSMessageSender(); } }
使用者可以这样调用:
public class SenderTest{ public static void main(String[] args){ SenderFactory factory = new SystemSenderFactory(); Sender sender = factory.newInstance(); sender.send(); } }
(未完待续.....)
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用
- C++设计模式编程中的观察者模式使用示例
- 举例解析设计模式中的工厂方法模式在C++编程中的运用
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则