Java的23种设计模式.pdf
《Java的23种设计模式.pdf》由会员分享,可在线阅读,更多相关《Java的23种设计模式.pdf(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java 设计模式Java设计模式(疯狂 Java 联盟版)1目录目录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 中介者模式
2、.491.3.6 备忘录模式.521.3.7 观察者模式.541.3.8 状态模式.581.3.9 策略模式.611.3.10 模板方法.631.3.11 访问者模式.65Java设计模式(疯狂 Java 联盟版)21.1.1.1.设计模式设计模式(超级详细超级详细)1.11.11.11.1 创建型模式创建型模式AbstractFactory(抽象工厂)FactoryMethod(工厂方法)Singleton(单态模式)Builder(建造者模式)Protot*pe*原型模式)1.1.11.1.11.1.11.1.1 工厂方法工厂方法*义一个用于创建对象的接口,让子类决定实例化哪一个类。Fac
3、toryMethod使一个类的实例*延迟到其子类。适用性适用性1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当*将创建对象的职责委托给多个帮助*类中的某一个,并且*希望将哪一个帮助子类是代理者这一信息局部化的时候。参与者参与者1.Product定义工厂方法所创建的对象的接口。2.ConcreteProduct实现 Product 接口。3.Creator声明工厂方法,该方法返回一个 Product 类型的对象*Creator 也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct 对象。可以调用工厂方法以创建
4、一个 Product 对象。4.ConcreteCreator重定义工厂方法以返回一个 ConcreteProduct 实例。Java设计模式(疯狂 Java 联盟版)3类图类图例子例子*roduct*roduct*roduct*roductpublic interface Work void doWork();ConcreteProductConcreteProductConcreteProductConcreteProductpublic class StudentWork implements Work public void doWork()System.out.println(学生*
5、作业!);public class TeacherWork implements Work public void doWork()System.out.println(老师审批作业!);CreatorCreatorCreatorCreatorpublic interface IWorkFactory Work get*ork();Concre*eCreatorConcre*eCreatorConcre*eCreatorConcre*eCreatorpu*lic class StudentWorkFactory implements IWorkFactory Java设计模式(疯狂 Java
6、联盟版)4public Work getWork()*eturn new StudentWork();public class TeacherWorkFactory implements IWorkFactory public Work getWork()return new TeacherWork();TestTestTestTestpublic class Test public static void m*in(Strin*args)IWorkFactory studentWorkFactory=new StudentWorkFactory();studentWorkFactory.ge
7、tWork().d*Work();IWorkFactory teacherWorkFactory*new TeacherWorkFactory();teacherWorkFactory.g*tWork().*oWork();resultresultresultresult学生做作业!老师审批作业!1.1.21.1.21.1.21.1.2 抽象工厂抽象工厂提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用性适用性1.一个系统要独立于它的*品的创建、组合和表示时。2.一个系统要由多个产品系列中的一个来配置时。3.当你要强调一系列相关的产品对象的设计以便进行联合使用时*Java
8、设计模式(疯狂 Java 联盟版)54*当你提供一个产品类库,而只想显示它们*接口而不是实现时。参与者参与者1.Ab*tractFactory声明一个创建抽象产品对象的操作接口。2.ConcreteFactory实现创建具体产品对象的操作。*.AbstractProduct为一类产品对象声明一个接口。4.ConcreteProdu*t定义一个将被相应的具体工厂创建的产品*象。实现*bstractProduct 接口。5.Client仅使用由 AbstractFactory 和 AbstractProduc*类声明的接口类图类图例子例子*bstractFactory*bstractFactory
9、*bstractFactory*bstractFactorypublic interface IAn*malFactory ICat createCat();IDog cre*teDog();ConcreteFactoryConcreteFactoryConcreteFactoryConcreteFactoryJava设计模式(疯狂 Java 联盟版)6p*blic class BlackAnimalFactory implem*nts IAnimalFactory public ICat createCat()retur*new BlackCat();public IDog createDo
10、g()return new BlackDog();public class WhiteAnimalFac*ory imp*ements IAnimalFactory public ICat createCat()return new WhiteCat();public IDog cre*teDog()return new WhiteDog();Abstrac*ProductAbstrac*ProductAbstrac*ProductAbstrac*Productpublic interface ICat void eat();public interface IDog void eat();C
11、oncrete*roductConcrete*roductConcrete*roductConcrete*roductpublic class Black*at implements ICat public void eat()System.out.println(The bl*ck cat is eating!);Java设计模式(疯狂 Java 联盟版)7public class WhiteCat implements*Cat public void eat()Sy*tem.out.prin*ln(The w*ite cat is eating!*);public class BlackD
12、og 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!);ClientClientClientClientpublic static void main(String args)IAnimalFactory blackAnimalFa*tory=new BlackAnimalFactory();I
13、Cat blackCat=blackAnimalFactory.createCat();blackCat.eat();IDog blackD*g=blackAnimalFactory.createDog();blackDog.eat();IAnimalFactory whiteAnimalF*ctory=new WhiteAnimalFactory();ICat whiteCat=whiteAnimalFactory.createCat();whiteCat.eat();IDog*hiteDog=whiteAnimalFactory.createDog();whiteDog.eat();res
14、*ltres*ltres*ltres*ltThe bla*k cat is eating!Th*black dog is eatin*!The white cat is eating!Java设计模式(疯狂 Java 联盟版)8The white dog is*ating!1.1.31.1.31.1.31.1.3 建造者模式建造者模式将一个复杂对象的构*与它的表示分离,使*同样的构建过程可以创建不同的表示。适用性适用性1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。*.当构造过程必须允*被构造的对象有不同*表示时。参与者参与者1.Builder为创建一个 Product
15、 对象的各个部件指定抽象接口。2.ConcreteBuilder实现 Buil*er 的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示*提供一个检索产品的接口。3.Director构造一个使用 Builder 接口的对象。4.Product表示被构造的复杂对象。ConcreteBuilder 创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。类图类图Java设计模式(疯狂 Java 联盟版)9例子例子Buil*erBuil*erBuil*erBuil*erpublic interface PersonBuilder void buil
16、dHead();v*id buildBody();void buildFoot()*Person buildPerson();ConcreteBuilderConcreteBuilderConcreteBuilderConcreteBuilderpublic class ManBuilder implements PersonB*ilder Person person;public ManBuilder()person=ne*Man();publ*c void build*ody()perso*.setBody(建造男人的身体);Java设计模式(疯狂 Java 联盟版)10public vo
17、id buildFoot()person.setFo*t(建造男人的脚);public void buildHead()pers*n.setHead(建造*人的头);*ublic Person buildPerson()retur*person;Dir*ctorDir*ctorDir*ctorDir*ctorpublic class PersonDirec*or public Person constructPerson(PersonBuilder pb)pb.buildHead();pb.buildBody();pb.buildFoot();return pb.buildPerson();P
18、roductProductProductProductpublic class Person private String head;private String body;private String foot;public String getH*ad()return head;public void setHead(String hea*)this.head=head;public String getBody()Java设计模式(疯狂 Java 联盟版)11return body;public void setBody(String body)this.b*dy=body;public
19、 String getFoot()return foot;public void setFoot(String foot)t*is.foot=foot;public class Man extends Person TestTestTestTestpubl*c class Testpublic static void main(String ar*s)PersonDirector pd=new PersonDirector();Person person=pd.constructPerson(new ManBuilder();System*out.println(person.getBody(
20、);System.out.println(person.getFoot();System.out.println(person.getHead();resultresultresultresult建造男人*身体建造男*的脚建造男人的头1.1.41.1.41.1.41.1.4 单态模式单态模式保证一个类仅有一个实例,*提供一个访问它的全局访*点。适用性适用性1.当类只能有一个*例而且客户可以从一个众所周知的访问点访问它时。Java设计模式(疯狂 Java 联盟版)122.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。参与者参与者Singleton定义一
21、个 Instance 操作,允许客户访问它的唯一实例。Instance 是一个类操作。可能负*创建它自己的唯一实例。类图类图例子例子SingletonSingletonSingletonSingletonpublic class Singleton private static Singleton sing;private Singleton()public st*tic Singleton get*nstance()if(sing=null)sing=new Singleto*();return sing;TestTestTestTestpublic class Test public st
22、atic void*ain(*tring args)Singleton sing=Singleton.getInstance();Singleton si*g2=Singleton.getI*stance();System.out.println(sing);System.out.pr*ntln(sing2);resultresultresultresultJava设计模式(疯狂 Java 联盟版)13singleton.Singleton1c78e57singleton.Singleton1c78e571.1.51.1.51.1.51.1.5 原型模式原型模式用原型实例指定创建对象的种类,并
23、且通过拷贝这些原型创建新的对象。适用性适用性1.当一个系统应该独立于它的产品创*、构成和表示时。2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。3.为了避免创建一个与产品类层次平行的工厂*层次时。4.当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。参与者参与者1.Prototype声明一个克隆自身的接口。2.ConcretePrototype实现一个克隆自身的操作。3.Client让一个原型克*自身从而创建一个新的对象。类图类图例子例子PrototypePrototypePrototypePrototypeJ
24、ava设计模式(疯狂 Java 联盟版)14public class Prototype implements Cloneable private String name;public void setName(String name)this.name=name;public String getName()return this.name;public Object clone()try return super.clone();catch(Exception e)e.printStackTrace();return null;ConcretePrototypeConcreteProtot
25、ypeConcretePrototypeConcretePrototypepubl*c class ConcretePrototype extend*Prototype public ConcretePrototype(String name)setName(name);ClientClientClientClientpublic clas*Test public static void main(String args)Prototype pro=new ConcretePrototy*e(prototype);Prototype pro2=(Prototype)pro.clone();*y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 23 设计 模式
限制150内