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

* A:工厂方法模式概述*  工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。*  简单来说:先定义一个工厂,工厂里面有些方法,这些方法就是用来创建动物的,然后有很多子工厂,顾客想创建猫,就来个猫工厂,想创建狗,就来个狗工厂*  创建针对的对象就是创建针对的工厂* B:优点*  客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性*  也就是,不用修改原来的代码,工厂定义完了,猫工厂,狗工厂定义完了之后,影响不大,以后想要再扩展的话,就在创建一个工厂,想要啥,就创建啥工厂就可以了,不用改原来的工厂,也不用该原来的设备* C:缺点*  需要额外的编写代码,增加了工作量* D:案例演示:*  动物抽象类:public abstract Animal(public abstract void eat();)*  工厂接口:public interface Factory(public abstract Animal creatAnimal();)*  具体狗类:public class Dog extends Animal{}*  具体猫类:public class Cat extends Animal{}*  开始:在测试类中每一个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就制造了一个专门的类来创建对象,发现每次修改代码太麻烦,用工厂方法改进*  针对每一个具体的实现提供一个具体的工厂*  狗工厂:public class DogFactory implements Factory{*          public Animal createAnimal(){~~~}*      }*  猫工厂:public class CatFactory implements Factory{*          public Animal creatAnimal(){~~~}*      }
package com.yy.工厂方法;public interface Factory {          //先定义一个   工厂   接口public Animal createAnimal();   //该接口里面有个createAnimal方法,目的是为了创建动物//返回值类只能是Animal类型,不能是返回后狗,猫之类的;也就是所谓的多态的思想
}
package com.yy.工厂方法;public class DogFactory implements Factory {        //创建一个  狗  工厂(DogFactory类),让DogFactory去实现Factory这个接口@Overridepublic Animal createAnimal() {                  //然后再重写Factory这个接口里面的createAnimal方法return new Dog();                           //返回一只狗}   }
package com.yy.工厂方法;public class CatFactory implements Factory {        //创建一个  猫  工厂(CatFactory类),让CatFactory去实现Factory这个接口public Animal createAnimal() {                  //然后再重写Factory这个接口里面的createAnimal方法return new Cat();                           //返回一只猫}}
package com.yy.工厂方法;public class Test {                                 //创建一个测试类public static void main(String[] args) {DogFactory df = new DogFactory();           //创建 狗 工厂对象Dog d = (Dog) df.createAnimal();            //强制类型转换df.createAnimal();因为,createAnimal这个方法的返回值类型是Animal,想要用 Dog类型接收,就得将Animal类型强转为Dog类型d.eat();}}

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

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

相关文章

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…

一点心得(0)

1, 在C中&#xff0c;如果栈里的空间不足的话&#xff0c;要考虑用new命令在堆上动态生成数据&#xff0c;比如说保存所有无符号整数型的bitset&#xff0c;得用bitset<UINT_MAX1>* bs new bitset<UINT_MAX1>;来声明定义&#xff0c;最后别忘了delete掉。 2, make…

Java——UPD输出及优化再优化

* UPD传输不区分客户端跟服务端&#xff0c;* 这里用Send和Receive这两个方法决定谁发谁收 * 1.发送Send * 创建DatagramSocket,随机端口号* 创建DatagramPacket,指定数据、长度、地址、端口* 创建DatagramSocket发送DatagramPacket* 关闭DatagramSocket 代码如下&…

FLEX:图形制作皮肤vs编程制作皮肤

Styles&#xff08;样式&#xff09;提供了一个可以自定义flex外观的层.可以图形制作皮肤&#xff0c;也可以编程实现. &#xff08;小小菜鸟翻译&#xff09; 图形制作皮肤的 优点是 很容易实现&#xff0c;通过位图&#xff0c;矢量图&#xff0c;swf。 缺点是功能有限。…

Java文件类boolean canExecute()方法(带示例)

文件类boolean canExecute() (File Class boolean canExecute()) This method is available in package java.io.File.canExecute(). 软件包java.io.File.canExecute()中提供了此方法。 This method is used to execute the file and the file is represented by the abstract …

python安全攻防---scapy使用

导入scapy包 from scapy.all import *构造包 a Ether()/IP(dst114.114.114.114)/TCP(dport80)/应用层数据我们如果记不得每个包的选项使&#xff0c;可以使用show()来查看 print(a.show())发送包 sr(IP(dst‘192.168.1.0/24’)/TCP(dport(1,65535)), timeout2) &#xff1…