Java设计模式-图解-附代码
Java设计模式(疯狂Java联盟版)
目录
目录 ..................................................................................................................................................... 1 1. 设计模式 ........................................................................................................................................ 2
1.1 创建型模式 .......................................................................................................................... 2
1.1.1 工厂方法 ................................................................................................................... 2 1.1.2 抽象工厂 ................................................................................................................... 4 1.1.3 建造者模式 ............................................................................................................... 6 1.1.4 单态模式 ................................................................................................................... 6 1.1.5 原型模式 ................................................................................................................. 10 1.2 结构型模式 ........................................................................................................................ 11
1.2.1 适配器模式 ............................................................................................................. 12 1.2.2 桥接模式 ................................................................................................................. 13 1.2.3 组合模式 ................................................................................................................. 15 1.2.4 装饰模式 ................................................................................................................. 17 1.2.5 外观模式 ................................................................................................................. 19 1.2.6 享元模式 ................................................................................................................. 20 1.2.7 代理模式 ................................................................................................................. 23 1.3 行为型模式 ........................................................................................................................ 24
1.3.1 责任链模式 ............................................................................................................. 25 1.3.2 命令模式 ................................................................................................................. 27 1.3.3 解释器模式 ............................................................................................................. 28 1.3.4 迭代器模式 ............................................................................................................. 30 1.3.5 中介者模式 ............................................................................................................. 32 1.3.6 备忘录模式 ............................................................................................................. 34 1.3.7 观察者模式 ............................................................................................................. 36 1.3.8 状态模式 ................................................................................................................. 38 1.3.9 策略模式 ................................................................................................................. 40 1.3.10 模板方法 ............................................................................................................... 42 1.3.11 访问者模式 ........................................................................................................... 43
1
Java设计模式(疯狂Java联盟版)
1. 设计模式
1.1 创建型模式
AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Protot*pe * 原型模式 )
1.1.1 工厂方法
*义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例*延迟到其子类。
适用性
1.当一个类不知道它所必须创建的对象的类的时候。
2.当一个类希望由它的子类来指定它所创建的对象的时候。
3.当*将创建对象的职责委托给多个帮助*类中的某一个,并且*希望将哪一个帮助子类是代理者这一信息局部化的时候。
参与者
1.Product
定义工厂方法所创建的对象的接口。 2.ConcreteProduct 实现Product接口。 3.Creator
声明工厂方法,该方法返回一个Product类型的对象*
Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。 可以调用工厂方法以创建一个Product对象。 4.ConcreteCreator
重定义工厂方法以返回一个ConcreteProduct实例。
类图
2
Java设计模式(疯狂Java联盟版) 例子 *roduct
public interface Work { void doWork(); }
ConcreteProduct
public class StudentWork implements Work { public void doWork() {
System.out.println(\学生*作业!\ } }
public class TeacherWork implements Work { public void doWork() {
System.out.println(\老师审批作业!\ } }
Creator
public interface IWorkFactory { Work get*ork(); }
Concre*eCreator
pu*lic class StudentWorkFactory implements IWorkFactory { public Work getWork() {
*eturn new StudentWork(); } }
public class TeacherWorkFactory implements IWorkFactory { public Work getWork() {
return new TeacherWork(); } }
Test
public class Test {
public static void m*in(Strin*[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory(); studentWorkFactory.getWork().d*Work();
IWorkFactory teacherWorkFactory * new TeacherWorkFactory(); teacherWorkFactory.g*tWork().*oWork(); } }
result
学生做作业! 老师审批作业!
3
Java设计模式(疯狂Java联盟版)
1.1.2 抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
1.一个系统要独立于它的产品的创建、组合和表示时。 2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。 4.当你提供一个产品类库,而只想显示它们接口而不是实现时。
参与者
1. AbstractFactory
声明一个创建抽象产品对象的操作接口。 2.ConcreteFactory
实现创建具体产品对象的操作。 3.AbstractProduct
为一类产品对象声明一个接口。 4.ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。 实现abstractProduct接口。 5.Client
仅使用由AbstractFactory和AbstractProduct类声明的接口
类图
例子
*bstractFactory
public interface IAnimalFactory { ICat createCat();
IDog createDog(); }
ConcreteFactory
public class BlackAnimalFactory implements IAnimalFactory { public ICat createCat() { return new BlackCat(); }
public IDog createDog() { return new BlackDog(); }
4