ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:159.74KB ,
资源ID:5969192      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5969192.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式1.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

设计模式1.docx

1、设计模式1自己总结的Java开发中的23种设计模式,通俗易懂有实例代码 (2011-11-24 14:14:00)转载标签:java设计模式杂谈分类:Java笔记_基础很重要从追MM谈Java的23种设计模式1、FACTORY追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory.工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客

2、户端提供。程序代码以下是引用片段:Java代码1. publciclassSample2. .3. 4. 5. publicclassAextendsSample6. .7. 8. 9. publicclassBextendsSample10. .11. 工厂类处于决定实例化那个产品类的中心位置Java代码1. publicclassFactory2. 3. /静态工厂方法,无必要再去实例化这个工厂类,增加没有必要的代码4. publicstaticSamplecreate(intwhich)5. if(which=1)6. returnnewA();7. if(which=2)8. retu

3、rnnewB();9. 10. 使用简单工厂初始化一个类Java代码1. SamplenewSample=Factory.create(1);2. 工厂方法模式植物接口及两个实现类Java代码1. publicinterfacePlant2. 3. publicclassPlantAimplementsPlant4. 5. 6. publicclassPlantBimplementsPlant7. 水果接口及两个实现类Java代码1. publicinterfaceFruit2. 3. publicclassFruitAimplementsFruit4. 5. 6. publicclassFr

4、uitBimplementsFruit7. 抽象工厂Java代码1. publicinterfaceAbstractFactory2. publicPlantcreatePlant();3. publicFruitcreatFruit();4. 工厂类AJava代码1. publicClassFactoryAimplementsAbstractFactory2. publicPlantcreatePlant()3. returnnewPlantA();4. 5. publicFruitcreatFruit()6. returnnewFruitA();7. 8. 工厂类BJava代码1. pub

5、licClassFactoryBimplementsAbstractFactory2. publicPlantcreatePlant()3. returnnewPlantB();4. 5. publicFruitcreatFruit()6. returnnewFruitB();7. 8. 工厂模式分为三种:Simple Factory模式专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。Factory Method模式将对象的创建交由父类中定义的一个标准方法来完成,而不是其构造函数,究竟应该创建何种对象由具体的子类负责决定。Abstract Factory模式提供一个共同

6、的接口来创建相互关联的多个对象。一、Simple Factory模式:水果接口:Fruit.javapackage designpattern.factory.simplefactory;public interface Fruit void plant();void enableEat();苹果类实现水果接口:Apple.javapackage designpattern.factory.simplefactory;public class Apple implements FruitOverridepublic void enableEat() System.out.println(Eat

7、 Apple);Overridepublic void plant() System.out.println(Plan Apple);葡萄类实现水果接口:Grape.javapackage designpattern.factory.simplefactory;public class Grape implements FruitOverridepublic void enableEat() System.out.println(Eat Grape);Overridepublic void plant() System.out.println(Plant Grape);买水果工厂类,可根据不同

8、的参数类型返回对应的实例:FruitFactory .javapackage designpattern.factory.simplefactory;public class FruitFactory public static Fruit getFruitFactory(String fruitType)if (fruitType.equals(Apple)return new Apple();if (fruitType.equals(Grape)return new Grape();return null;测试类,根椐不同的输入参数从工厂类中得到对应的实例并调用相应实例的方法:FruitT

9、est.javapackage designpattern.factory.simplefactory;public class FruitTest public static void main(String args) Fruit fruit = FruitFactory.getFruitFactory(Apple);fruit.plant();fruit.enableEat();A:我要需要苹果,只需向工厂角色(FruitFactory)请求即可。而工厂角色在接到请求后,会自行判断创建和提供哪一个产品。B:但是对于工厂角色(FruitFactory)来说,增加新的产品(比如说增加草莓)就

10、是一个痛苦的过程。工厂角色必须知道每一种产品,如何创建它们,以及何时向客户端提供它们。换言之,接纳新的产品意味着修改这个工厂。C:因此Simple Factory模式的开放性比较差。有什么办法可以解决这个问题吗?那就需要Factory Method模式来为我们服务了。二、Factory Method 模式:把水果工厂定义成接口再用各种水果去实现自己的实例,这样做的好处就是如果再增加一种水果,只要增加它的对象和实现工厂就可以了,而不必修改任何代码。水果接口:Fruit.javapackage designpattern.factory.simplefactory;public interface

11、 Fruit void plant();void enableEat();苹果类实现水果接口:Apple.javapackage designpattern.factory.simplefactory;public class Apple implements FruitOverridepublic void enableEat() System.out.println(Eat Apple);Overridepublic void plant() System.out.println(Plan Apple);葡萄类实现水果接口:Grape.javapackage designpattern.f

12、actory.simplefactory;public class Grape implements FruitOverridepublic void enableEat() System.out.println(Eat Grape);Overridepublic void plant() System.out.println(Plant Grape);苹果工厂类:AppleFactory.javapackage designpattern.factory.factorymodel;public class AppleFactory implements FruitFactory Overri

13、depublic Fruit getFruitFactory() return new Pear();葡萄工厂类:GrapeFactory.javapackage designpattern.factory.factorymodel;public class GrapeFactory implements FruitFactory Overridepublic Fruit getFruitFactory() return new Grape();水果工厂类:FruitFactory .javapackage designpattern.factory.factorymodel;public i

14、nterface FruitFactory public Fruit getFruitFactory();测试类:FruitTest.javapackage designpattern.factory.factorymodel;public class FruitTest public static void main(String args) /AppleAppleFactory appleFactory = new AppleFactory();appleFactory.getFruitFactory().plant();appleFactory.getFruitFactory().ena

15、bleEat();/So if you want add pear, you shall add pear and pear factory class./and not need modify anything./PearPearFactory pearFactory = new PearFactory();pearFactory.getFruitFactory().plant();pearFactory.getFruitFactory().enableEat();上面加了一个梨的水果,所以只要添加对应的代码即可。A:工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一

16、个抽象工厂 类,而简单工厂模式把核心放在一个具体类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综 合,进而推广了简单工厂模式。B:工厂方法模式退化后可以变得很像简单工厂模式。设想如果非常确定一个系统只需要一个具体工 厂类,那么就不妨把抽象工厂类合并到具体的工厂类中去。由于反正只有一个具体工厂类,所以不妨将工厂方法改成为静态方法,这时候就得到了简单工厂模式。 C:如果需要加入一个新的水果,那么只需要加入一个新的水果类以及它所对应的工厂类。没有必要修改客户端,也没有必要修改抽象工厂角色或者其他已有的具体 工厂角色。对于增加新的水果类而言,这

17、个系统完全支持开-闭原则。D:对Factory Method模式而言,它只是针对一种类别(如本例中的水果类Fruit),但如果我们还想买肉,那就不行了,这是就必须要Abstract Method模式帮忙了。三、Abstract Method 模式:A:抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。B:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。C:抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品(Fruit)等级结构;而抽象工厂模式则需要面对多个产品等级结构(

18、Fruit、Meat)。Fruit.javapackage designpattern.factory.abstractfactory;public interface Fruit void plant();void enableEat();Fruit.javapackage designpattern.factory.abstractfactory;public class Apple implements FruitOverridepublic void enableEat() System.out.println(Eat Apple);Overridepublic void plant(

19、) System.out.println(Plan Apple);Grape.javapackage designpattern.factory.abstractfactory;public class Grape implements FruitOverridepublic void enableEat() System.out.println(Eat Grape);Overridepublic void plant() System.out.println(Plant Grape);Pear.javapackage designpattern.factory.abstractfactory

20、;public class Pear implements FruitOverridepublic void enableEat() System.out.println(Eat Pear);Overridepublic void plant() System.out.println(Plan Pear);Apple.javapackage designpattern.factory.abstractfactory;public class Apple implements FruitOverridepublic void enableEat() System.out.println(Eat

21、Apple);Overridepublic void plant() System.out.println(Plan Apple);Meat.javapackage designpattern.factory.abstractfactory;public interface Meat void feed();void enableEat();Cow.javapackage designpattern.factory.abstractfactory;public class Cow implements Meat Overridepublic void enableEat() System.ou

22、t.println(Eat Cow);Overridepublic void feed() System.out.println(Feed Cow);Pig.javapackage designpattern.factory.abstractfactory;public class Pig implements Meat Overridepublic void enableEat() System.out.println(Eat Pig);Overridepublic void feed() System.out.println(Feed Pig);IFactory.javapackage d

23、esignpattern.factory.abstractfactory;public interface IFactory public Fruit getFruitFactory(Fruit whichFruit);public Meat getMeatFactory(Meat whichMeat);MyFactory.javapackage designpattern.factory.abstractfactory;public class MyFactory implements IFactory Overridepublic Fruit getFruitFactory(Fruit w

24、hichFruit) / TODO Auto-generated method stubreturn whichFruit;Overridepublic Meat getMeatFactory(Meat whichMeat) / TODO Auto-generated method stubreturn whichMeat;FruitTest .javapackage designpattern.factory.abstractfactory;public class FruitTest public static void main(String args) Fruit apple = ne

25、w Apple();Meat pig = new Pig();MyFactory my = new MyFactory();my.getFruitFactory(apple).plant();my.getFruitFactory(apple).enableEat();System.out.println(-);my.getMeatFactory(pig).feed();my.getMeatFactory(pig).enableEat();2、BUILDERMM最爱听的就是“我爱你”这句话了,见到不同地方的 MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键

26、,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。java代码/首先是一个建造工具(builder)接口1. publicinterfacebuilder2. 3. voidzhuji();/主机4. voidjianpan();/键盘5. voidxia

27、nshiqi();/显示器6. voidshubiao();/鼠标7. computergetcomputer();/返回产品8. Java代码1. /建造工具的具体建造方式:2. publicclassConcreteBuilderimplementsbuilder3. 4. privateStringzhuji;5. privateStringxianshiqi;6. privateStringjianpan;7. privateStringshubiao;8. Override9. publicvoidzhuji()10. /11. System.out.println(生产主机);12. zhuji=MAC主机;13. 14. 15. Overrid

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1