您的位置:首页 > 编程语言 > Java开发

JAVA设计模式

2016-03-07 00:00 399 查看
摘要: 简单介绍java的设计模式,java设计模式学习笔记。

JAVA设计模式

一、设计模式分类

常见的JAVA设计模式共有23中,大体分成3类:

创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式

结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

行为型模式(11种):策略模式、行为方法模式、观察者模式、迭代子模式、责任链模式、命令模式、 备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

二、设计模式六大原则

**开闭原则。**对扩展开放,对修改关闭。

**里氏代换原则。**父类可以出现的地方,子类都可以出现。

**依赖倒置原则。**面向接口编程,依赖抽象不依赖具体。

**接口隔离原则。**使用多个隔离的接口,比使用单个接口要好。

**迪米特法则。**一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

**合成复用原则。**尽量使用合成/聚合的方式,而不是使用继承。

三、JAVA中的23中设计模式

1. 工厂方法模式
1). 普通工厂模式。建立一个工厂类, 对实现统一接口的类进行实例创建。
下面以消息发送为例来说明:



定义接口

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.抽象工厂模式。
抽象工厂模式是对普通工厂模式的改进。如果想扩展工厂类的实现,就需要修改工厂类,这样就违背了“开闭原则”。抽象工厂模式就是为了解决此类问题,如果需要创建工厂需要增加新的功能,添加一个实现类即可。



上面的工厂类可以这样修改

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();
}
}

(未完待续.....)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息