《Java中23种设计模式个人实用》由会员分享,可在线阅读,更多相关《Java中23种设计模式个人实用(82页珍藏版)》请在金锄头文库上搜索。
1、-Java设计模式w z-目录1. 设计模式31.1 创立型模式41.1.1 工厂方法41.1.2 抽象工厂61.1.3 建造者模式101.1.4 单态模式131.1.5 原型模式151.2 构造型模式171.2.1 适配器模式171.2.2 桥接模式191.2.3 组合模式231.2.4 装饰模式261.2.5 外观模式291.2.6 享元模式321.2.7 代理模式341.3 行为型模式371.3.1 责任链模式371.3.2 命令模式401.3.3 解释器模式431.3.4 迭代器模式451.3.5 中介者模式491.3.6 备忘录模式521.3.7 观察者模式541.3.8 状态模式5
2、81.3.9 策略模式611.3.10 模板方法631.3.11 者模式65w z-1. 设计模式(超级详细)1.1 创立型模式AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Protot*pe * 原型模式 ) 1.1.1 工厂方法 *义一个用于创立对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例*延迟到其子类。适用性 1.当一个类不知道它所必须创立的对象的类的时候。 2.当一个类希望由它的子类来指定它所创立的对象的时候。 3.当*将创立对象
3、的职责委托给多个帮助*类中的*一个,并且*希望将哪一个帮助子类是代理者这一信息局部化的时候。参与者 1.Product 定义工厂方法所创立的对象的接口。 2.ConcreteProduct 实现Product接口。 3.Creator 声明工厂方法,该方法返回一个Product类型的对象* Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。 可以调用工厂方法以创立一个Product对象。 4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。类图例子*roductpublic interface Wor
4、k void doWork();ConcreteProductpublic class StudentWork implements Work public void doWork() System.out.println(学生*作业!); public class TeacherWork implements Work public void doWork() System.out.println(教师审批作业!); Creatorpublic interface IWorkFactory Work get*ork();Concre*eCreatorpu*lic class StudentW
5、orkFactory implements IWorkFactory public Work getWork() *eturn new StudentWork(); public class TeacherWorkFactory implements IWorkFactory public Work getWork() return new TeacherWork(); Testpublic class Test public static void m*in(Strin* args) IWorkFactory studentWorkFactory = new StudentWorkFacto
6、ry(); studentWorkFactory.getWork().d*Work(); IWorkFactory teacherWorkFactory * new TeacherWorkFactory(); teacherWorkFactory.g*tWork().*oWork();result学生做作业!教师审批作业!1.1.2 抽象工厂 提供一个创立一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用性 1.一个系统要独立于它的*品的创立、组合和表示时。 2.一个系统要由多个产品系列中的一个来配置时。 3.当你要强调一系列相关的产品对象的设计以便进展联合使用时* 4*当你提供一个
7、产品类库,而只想显示它们*接口而不是实现时。参与者 1.Ab*tractFactory 声明一个创立抽象产品对象的操作接口。 2.ConcreteFactory 实现创立具体产品对象的操作。 *.AbstractProduct 为一类产品对象声明一个接口。 4.ConcreteProdu*t 定义一个将被相应的具体工厂创立的产品*象。 实现*bstractProduct接口。 5.Client 仅使用由AbstractFactory和AbstractProduc*类声明的接口类图例子*bstractFactorypublic interface IAn*malFactory ICat crea
8、teCat(); IDog cre*teDog();ConcreteFactoryp*blic class BlackAnimalFactory implem*nts IAnimalFactory public ICat createCat() retur* new BlackCat(); public IDog createDog() return new BlackDog(); public class WhiteAnimalFac*ory imp*ements IAnimalFactory public ICat createCat() return new WhiteCat(); pu
9、blic IDog cre*teDog() return new WhiteDog(); Abstrac*Productpublic interface ICat void eat();public interface IDog void eat();Concrete*roductpublic class Black*at implements ICat public void eat() System.out.println(The bl*ck cat is eating!); public class WhiteCat implements *Cat public void eat() S
10、y*tem.out.prin*ln(The w*ite cat is eating!*); public class BlackDog implements IDog public void eat() System.out.println(The black dog is eating); public class WhiteDog implements IDog public void eat() System.out.println(The white dog is eat*ng!); Clientpublic static void main(String args) IAnimalF
11、actory blackAnimalFa*tory = new BlackAnimalFactory(); ICat blackCat = blackAnimalFactory.createCat(); blackCat.eat(); IDog blackD*g = blackAnimalFactory.createDog(); blackDog.eat(); IAnimalFactory whiteAnimalF*ctory = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat(); whiteCat
12、.eat(); IDog *hiteDog = whiteAnimalFactory.createDog(); whiteDog.eat();resultThe bla*k cat is eating!Th* black dog is eatin*!The white cat is eating!The white dog is *ating!1.1.3 建造者模式 将一个复杂对象的构*与它的表示别离,使*同样的构建过程可以创立不同的表示。适用性 1.当创立复杂对象的算法应该独立于该对象的组成局部以及它们的装配方式时。 *.当构造过程必须允*被构造的对象有不同*表示时。参与者 1.Builde
13、r 为创立一个Product对象的各个部件指定抽象接口。 2.ConcreteBuilder 实现Buil*er的接口以构造和装配该产品的各个部件。 定义并明确它所创立的表示* 提供一个检索产品的接口。 3.Director 构造一个使用Builder接口的对象。 4.Product 表示被构造的复杂对象。ConcreteBuilder创立该产品的部表示并定义它的装配过程。 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。类图例子Buil*erpublic interface PersonBuilder void buildHead(); v*id buildBody(); void buildFoot()* Person buildPerson();ConcreteBuilderpublic class ManBuilder implements PersonB*ilder P