您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > GOF23种设计模式详解-tony
21种设计模式详解作者:行者买刀做最棒的软件开发交流社区第1/89页本书由JavaEye提供的电子书DIY功能自动生成于2010-02-26目录1.J2SE1.1设计模式之略见一斑(工厂模式Factory).................................................41.2设计模式之略见一斑(单例模式singleton)...............................................81.3设计模式之略见一斑(建造模式builder)................................................111.4设计模式之略见一斑(原型模式Prototype)..............................................141.5设计模式之略见一斑(适配器模式Adapter).............................................161.6设计模式之略见一斑(桥梁模式bridge).................................................211.7设计模式之略见一斑(外观模式Facade)................................................231.8设计模式之略见一斑(组合模式Composite).............................................261.9设计模式之略见一斑(装饰模式decorator)..............................................291.10设计模式之略见一斑(代理模式Proxy)................................................341.11设计模式之略见一斑(享元模式flyweight).............................................451.12设计模式之略见一斑(命令模式Command)............................................461.13设计模式之略见一斑(解释器模式Interpreter)..........................................491.14设计模式之略见一斑(状态模式State).................................................571.15设计模式之略见一斑(策略模式strategy)..............................................611.16设计模式之略见一斑(TemplateMethod模板方法模式)..................................661.17设计模式之略见一斑(Memento备忘录模式)...........................................681.18设计模式之略见一斑(Observer观察者模式)...........................................721.19设计模式之略见一斑(ChainofResponsibility责任链模式)...............................77页1.20设计模式之略见一斑(Mediator中介者模式)...........................................831.21设计模式之略见一斑(Visitor访问者模式)..............................................84页1.1设计模式之略见一斑(工厂模式Factory)发表时间:2010-02-01在开发中其实我们已经不知道用到了设计模式中的很多模式,只是有些我们还未知它具体是哪种模式来着。如工厂模式,单例,适配,外观模式等一些常见模式。下面是自己学习的一些相关笔记,以做备忘录.1.工厂模式分为三类:1)简单工厂模式(sipplefactory)也叫静态工厂模式,一般是具体产品的继承类或者是接口的实现,如下拿一个司机开多种车的例子。publicinterfaceCar{voiddrive();}privateclassQQCarimplementsCar{publicvoiddrive(){System.out.println(QQCar);}}publicclassBaoMaCarimplementsCar{publicvoiddrive(){System.out.println(BaoMaCar);}}publicclassBenChiCarimplementsCar{设计模式之略见一斑(工厂模式Factory)第4/89页publicvoiddrive(){System.out.println(BenChiCar);}}publicstaticCargetCar(Stringcarname){if(carname.equalsIgnoreCase(QQCar)){returnnewQQCar();}elseif(carname.equalsIgnoreCase(BaoMaCar)){returnnewBaoMaCar();}elseif(carname.equalsIgnoreCase(BenChiCar)){returnnewBenChiCar();}returnnull;}publicstaticvoidmain(String[]args){Carcar=FactoryStatic.getCar(QQCAR);car.drive();}2)工厂方法模式(factorymethod)如上,如果是一部车对应一个司机的话,可先要叫得这个司机,然后再去取车子publicclassBenChiCarimplementsCar{publicvoiddrive(){System.out.println(BenChiCar);}}publicinterfaceDriver{CardriveCar();设计模式之略见一斑(工厂模式Factory)第5/89页}publicclassQQDriverimplementsDriver{publicCardriveCar(){returnnewQQCar();}}publicclassBaoMaDriverimplementsDriver{publicCardriveCar(){returnnewBaoMaCar();}}publicclassBenChiDriverimplementsDriver{publicCardriveCar(){returnnewBenChiCar();}}publicstaticvoidmain(String[]args){Driverdirver=newQQDriver();Carcar=dirver.driveCar();car.drive();}3)抽象工厂模式(abstractfactory)抽象工厂模式比工厂方法模式的条件更多,如多个司机拥有种式种类的车,如跑车(宝马,奥迪),商务车(丰田,本田),越野车(路虎)等,如此就需要在车的基础上新加一个车的接口privateinterfaceCarType{publicCargetSportCar(Stringcarname);publicCargetBuiCar(Stringcarname);publicCargetFastCar(Stringcarname);}设计模式之略见一斑(工厂模式Factory)第6/89页如此基础上对新式的各种各样的车进行区别,从而当新增一款车型时或者新增一类车型时就对应加入相应的类和方法设计模式之略见一斑(工厂模式Factory)第7/89页1.2设计模式之略见一斑(单例模式singleton)发表时间:2010-02-01单例模式是属于比较常用的一例,一个类(class)在内存中只有一个实例。常用方式如下:第一种(饿汉式):publicclassSingleton{ privateSingleton(){} //在自己内部定义自己一个实例,是不是很奇怪? //注意这是private只供内部调用 privatestaticSingletoninstance=newSingleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问 publicstaticSingletongetInstance(){ returninstance; }}第二种方式:(懒汉式)publicclassSingleton{ privatestaticSingletoninstance=null; publicstaticsynchronizedSingletongetInstance(){ //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率!设计模式之略见一斑(单例模式singleton)第8/89页 if(instance==null) instance=newSingleton(); returninstance; }}比较安全的使用方式是第一种privatestaticSingletoninstance=newSingleton();单例的陷井:多个虚拟机当单例类被运行在多个虚拟机下的时候,在每个虚拟机都可以创建一个实例对歇脚。像使用了EJB,JINI,RMI技术的分布式系统的时候,因为中间件屏蔽了分布式系统在物理上的差异,这个时候想知道在哪个虚拟机下运行着哪个单例对象很困难。因此在使用分布式技术时,应该避免使用多个类加载器当存在多个类加载器,即使它们加载的相同包名,相同类名甚至每个字节都完全相同的类,也会被区别对待的。因为不同的类加载器会使用不同的命名空间来区分同一个类,因此,单例类在多加载器的环境下会产生多个单例对象。也许你认为出现多个类加载器的情况不多,其实多个类加载器存在的情况不少,在很多J2EE服务器上允许存在多个SERVLET引擎,而每个引擎是采用不同的类加载器的,浏览器的APPLET小程序通过网络加载类的时候,由于安全因素,采用的是特殊类加载器,等等。在这种情况,由状态的单例模式也会给系统带来隐患。因此除非系统由协调机制,在一般情况下不要使用存在状态的单例模式。错误的同步处理在使用上面介绍的懒汉式单模式的时候,同步得理恰当与否也是很,不然要能达不到想要的单例效果,还可能引发死锁等。因此在使用懒汉式单例模式时一定要对同步有所了解,不过使用饿汉式单例模式就可以避免这个问题。设计模式之略见一斑(单例模式singleton)第9/89页子类破坏了对象控制如果构造器变得不再私有,就有可能失去对对象的控制串行化(可序列化)为了使一个单例类变成可串行化的,仅仅在声明中添加“implementsSerializable是不够的,因为一个串行化的对象在每次反串
本文标题:GOF23种设计模式详解-tony
链接地址:https://www.777doc.com/doc-6099347 .html