Java——设计模式(简单工厂模式)

 * A:简单工厂模式概述*  简单工厂模式又叫静态工厂方法模式,它定义了一个具体的工厂类负责创建一些类的实例* B:优点*  客户端不需要再负责对象的创建,从而明确了各个类的职责*  简单来说,客户端你只需要用就可以了,就不用创建了,工厂来创建就可以了* C:缺点*  这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断地修改工厂类,不利于后期的维护*  也就是说:你得需要不断地去修改你的源码,是不利于后期的维护的* D:案例演示*  动物抽象类:public abstract Animal(public abstract void eat();)*  具体狗类:public class Dog extends Animal{}*  具体猫类:public class Cat extends Animal{}*  开始:在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就制造了一个专门的类来创建对象* * 例如:本来我们创建对象需要自己去创建,比如说,你需要一只狗,自己就创建一个,而简单工厂认为,对于这件事就不劳费客户了,创建狗对象或者是猫对象,交个简单工厂去创建就可以了* 要狗,简单工厂就会给客户提供狗,要猫,简单工厂就会给顾客提供猫;所以,现在我们就要做一个工厂,这个工厂就是用来生产狗,或者猫的;* 首先,要创建工厂得有Animal、Dog、Cat这些类
package com.yy.简单工厂;public abstract class Animal {      //创建一个动物抽象类,在这个Animal抽象类里面有个  吃  的方法public abstract void eat();}
package com.yy.简单工厂;public class Dog extends Animal {       //创建一个狗类,让Dog类去继承Animal这个抽象类public void eat(){                  //并且去重写Animal里面的的eat这个抽象方法System.out.println("狗吃肉");    //然后输出一句话:狗吃肉}}
package com.yy.简单工厂;public class Cat extends Animal {           //创建一个猫类,让Cat类去继承Animal这个抽象类public void eat() {                     //并且去重写Animal里面的的eat这个抽象方法System.out.println("猫吃鱼");        //然后输出一句话:狗吃肉}}
package com.yy.简单工厂;public class AnimalFactory {                    //创建一个动物工厂,目的是为了生产动物,可以生产狗,也可以生产猫,需要啥就创建啥对象即可/*public static Dog createDog(){              //该方法用来创建狗return new Dog();                       //返回一个狗}public static Cat createCat(){              //该方法用来创建猫return new Cat();                       //返回一个猫}*///我们发现,如果动物太多的话,必须得定义很多个方法,复用性太差//改进public static Animal createAnimal(String name){         //返回类型为Animal,参数为一个 名字if("dog".equals(name)){                             //如果传入的是一只狗的话,就对参数进行判断return new Dog();                               //参数是狗,就返回一个狗}else if("cat".equals(name)){                       //如果传入的是一只猫的话,就对参数进行判断return new Cat();                               //参数是猫,就返回一个狗}else {                                             //如果传入的是既不是狗又不是猫的话return null;                                    //就返回一个null}//如果在有一个其他的类,就会返回null,一返回null,Test这个类就会进行,null就开始调用eat这个方法,然后就会出现空指针异常,这个就是简单工厂模式的弊端所在}}
package com.yy.简单工厂;public class Test {     //做一个测试类public static void main(String[] args) {/*Dog yy = AnimalFactory.createDog();                   //想要一只狗,运用  类名.  来调用System.out.println(yy);*/                               //打印 狗 ,这里没有重写toString方法,所以返回为类名+@+HashCode16进制Dog d = (Dog) AnimalFactory.createAnimal("dog");        //通过   类名.  来调用,由于 AnimalFactory.createAnimal该方法返回的是Animal,而我们通过Dog接收,所以这时要进行强转,由Animal类型强制转换为Dog类型d.eat();                                                //类名.方法    调用Dog类里面的eat方法//输出结果:狗吃肉Cat c =  (Cat) AnimalFactory.createAnimal("cat");c.eat();//输出结果:猫吃鱼}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java ObjectOutputStream writeFloat()方法与示例

ObjectOutputStream类writeFloat()方法 (ObjectOutputStream Class writeFloat() method) writeFloat() method is available in java.io package. 在java.io包中提供了writeFloat()方法 。 writeFloat() method is used to write the given 4 bytes of a float value. writeFl…

python安全攻防---信息收集---whois查询

whois是用来查询域名的IP以及所有者信息的传输协议。简单地说,whois就是一个数据库,用来查询域名是否以及被注册,以及注册域名的详细信息(如域名所有人、域名注册商等)。 使用whois查询,首先通过pip安装py…

百度面试题:从输入url到显示网页,后台发生了什么?

参考http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html 原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会…

VS2005无法启动修复办法

c:\Program Files\Microsoft Visual Studio 8\Common7\IDE>devenv /ResetSkipPkgs 转载于:https://www.cnblogs.com/doc/archive/2008/10/10/1307887.html

Java——设计模式(工厂方法模式)

* A:工厂方法模式概述* 工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。* 简单来说:先定义一个工厂,工厂里面有些方法,这些方法就是用来创建动物的,然后有很多子工…

python安全攻防---爬虫基础---get和post提交数据

get提交数据1 get提交的数据就附在提交给服务器的url之后,以?开头参数之间以&隔开,例如/admin/user/123456.aspx?name123&id123 案例:写个脚本,在sogou自动搜索周杰伦,并将搜索页面的数据获取 程…

JavaMail中解决中文附件名乱码的问题

网上有很多类似的解决方案,很多是使用 if ((fileName ! null) && (fileName.toLowerCase().indexOf("gb2312") ! -1)){ fileName MimeUtility.decodeText(fileName); } 来解决,但对应gbk编码的附件名,这里仍不能正确处…

Java ObjectOutputStream writeBytes()方法与示例

ObjectOutputStream类writeBytes()方法 (ObjectOutputStream Class writeBytes() method) writeBytes() method is available in java.io package. writeBytes()方法在java.io包中可用。 writeBytes() method is used to write the given string as a sequence of bytes. write…

如何集中注意力(3)

如何集中注意力(3) [ 2008-10-20 10:15 ]by Glen Stansberry of LifeDev (feed). 集中注意力并不是一件很容易的事情,尤其是处在当前这个充满诱惑和纷扰的世界里。下面是继续告诉大家一些有帮助的方法: 7. Plan your day to the T…

Java——网络编程三要素

* A:计算机网络* 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。* 其实我们这些网,之所以能…

python安全攻防---爬虫基础--re解析数据

0x01 re基础 使用re模块,必须先导入re模块 import refindall():匹配所有符合正则的内容,返回的是一个列表 import restr "我的电话:10086,女朋友电话:11011" list re.findall(\d,str) print…

BSP for good 3d engine

1.open sourcehttp://irrlicht.sourceforge.net/downloads/ 2.不错的小材质http://www.permadi.com/tutorial/webgraph/index.html 3.java bsp display(demo):http://www.symbolcraft.com/graphics/bsp/index.php http://www.faqs.org/faqs/graphics/bsptree-faq/ 4.a bps ill…

Java InputStreamReader getEncoding()方法及示例

InputStreamReader类的getEncoding()方法 (InputStreamReader Class getEncoding() method) getEncoding() method is available in java.io package. getEncoding()方法在java.io包中可用。 getEncoding() method is used to get the encoding name avail for this InputStrea…

python安全攻防---爬虫基础---BeautifulSoup解析

0x01 基础 使用bs4首先要安装,安装后导入 import bs4bs对象有两个方法,一个是find,另一个是find_all find(标签名,属性值):只返回一个,返回也是bs对象,可以继续用find…

DataRabbit 3.1发布,完全支持SqlServer2005/2008

增加了对SqlServer2005/2008的新的数据类型的支持,如uniqueidentifier、time、sql_variant等。另外,EntityCreator也一起更新--不再强迫为Entity生成ToString()方法,使用者可以主动选择是否要生成。 DataRabbit 3.1 下…

Java——Socket通信原理

* Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都是电源插座,中间是啥?不就是电线啦,电…

asp.net链接mysql数据库------------【个人收集】

在web.config文件中添加如下样式的数据库链接字符串&#xff1a; <add name"dbconnection" connectionString"DataBasedatabasename;Server127.0.0.1;Uid用户名;Pwd密码;character setgbk;" providerName"MySql.Data.MySqlClient"/></c…

sql2005 远程连接

SQL Server 2005 不允许远程连接解决方法转载于:https://www.cnblogs.com/lcq135/archive/2008/11/06/1328380.html

Java GregorianCalendar computeTime()方法与示例

GregorianCalendar类computeTime()方法 (GregorianCalendar Class computeTime() method) computeTime() method is available in java.util package. java.util包中提供了computeTime()方法 。 computeTime() method is used to compute the calendar fields to the calendar …

python安全攻防---scapy基础---计算机网络各层协议

网络层次划分 比较常用的是TCP/IP五层协议。 0x01应用层 应用层是网络应用程序以及它们的应用层协议存留的地方。应用层协议和应用程序直接挂钩 DHCP(Dynamic Host Configuration Protocol)动态主机分配协议&#xff0c;使用 UDP 协议工作&#xff0c;主要有两个用途&#xf…