版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、类的创建与工厂模式1类的五种创建方式开发准备,先创建一个普通类public class BBxiang implements Serializableprivate static final long serialVersionUID = 1L;void eat()System. out .println( bbxiang is eating );void sport() System. out .println( bbxiang is sporting );1.1 new关键字创建代码如下public class NewDemo public static void main(String口
2、args ) BBxiang bb = new BBxiang();bb.eat();1.2克隆使用clone时,需要在po类中重写clone方法,并将其提升为 public ,并且实现Cloneable 接口public class BBxiang implements Serializable, Cloneable protected Object clone() throws CloneNotSupportedException return super .clone();private static final void eat()System. out .println( void
3、sport() System. out .println( Overridelong serialVersionUID = 1L;bbxiang is eating );bbxiang is sporting );示例代码如下public class CloneDemo public static void main(String口 args ) throws Exception BBxiang bb = new BBxiang();BBxiang bbb = (BBxiang) bb .clone();bbb.eat();类加载器类加载器可以使用 forName(String classNa
4、me) 方法,和newInstance()方法创建对象forName方法是,需要使用全路径名public class ClassDemo public static void main(String口 args ) throws ExceptionBBxiang bb = (BBxiang)Class.forName (com.bbxiang.BBxiang).newInstance();bb.sport();BBxiang bbb = BBxiang. class .newInstance(); bbb.eat();构造器构造器底层采用反射机制,故也可称之为放射创建public class
5、ReflectDemo public static void main(String口 args ) throws Exception Constructor constructor = BBxiang. class .getConstructor(); BBxiang bb = constructor .newInstance();bb.sport();反序列化反序列化,是通过读取已经编译好的字节码文件,进行对象创建故克隆的类必须实现Serializable 接口需注意的是,必须先使用ObjectOutputStream创建一个字节码文件public class ReverseDemo pu
6、blic static void main(String口args ) throws ExceptionObjectOutputStream out = new ObjectOutputStream( new FileOutputStream( data.obj );out .writeObject( new BBxiang();ObjectInputStream in = new ObjectInputStream( new FileInputStream( data.obj ); BBxiang bb = (BBxiang) in .readObject();bb.eat();out .c
7、lose(); in .close(); 2工厂模式静态工厂popublic class BBxiang void eat() System. out .println( bbxiang eat ); factorypublic class StaticFactory static BBxiang createBBxiang() throws Exception return (BBxiang)Class. forName (com.bbxiang.BBxiang ).newInstance(); demopublic class StaticDemo public static void m
8、ain(String args ) throws Exception BBxiang bb = (BBxiang)StaticFactory.createBBxiang ();bb.eat();方法工厂即一个工厂接口,多个工厂实现类,接口定义规范,实现类之间互不干扰popublic interface Man void eat();public class BBxiang implements Man public void eat() System. out .println( bbxiang eat ); public class GGxiang implements Man public
9、 void eat() System. out .println( ggxiang eat ); factorypublic interface InterfaceFactory Man createMan() throws Exception ;public class BBxiangFactory implements InterfaceFactorypublic Man createMan() throws Exception return BBxiang. class .newInstance();public class GGxiangFactory implements Inter
10、faceFactorypublic Man createMan() throws Exception return GGxiang. class .newInstance();demopublic class Demo public static void main(String args ) throws ExceptionBBxiang bb =(BBxiang) new BBxiangFactory().createMan(); bb.eat();GGxiang gg = (GGxiang) new GGxiangFactory().createMan(); gg.eat();案例分析:
11、当工厂生产BBxiang时,需要通过BBxiangFactory 进行创建当工厂生产GGxiang时,需要通过GGxiangFactory进行创建在具体需求中,生产细节可能不一定相同,这时修改或新增某个类时,便无需更改之前的代码只需在新增或是在原来的工厂中修改即可,工厂之间互不影响抽象工厂方法工厂基于接口,抽象工厂基于抽象类在接口的下一层次,定义一个抽象类,以解决复杂需求时出现的耦合问题,并在其中,完成开闭原则,不修改 之前的代码。popublic interface Man void fly();public abstract class BBMan implements Manpublic
12、 abstract class PerfitMan implements Man public abstract class SuperMan implements Man public class BBboy extends BBMan public void fly() System. out .println( BBxiang fly );)public class BBGirl extends BBMan public void fly() System. out .println( BBgirl fly ); )public class PerfitBoy extends Perfi
13、tMan public void fly() System. out .println( perfit boy fly );)public class PerfitGirl extends PerfitMan public void fly() System. out .println( perfit girl fly);)public class SuperBoy extends SuperManpublic void fly() System. out .println( super boy fly );)public class SuperGirl extends SuperMan pu
14、blic void fly() System. out .println( super girl fly );1.8.2 factorypublic interface ManFactory Man createBoy() throws Exception;Man createGirl() throws Exception;public class BBFactory implements ManFactorypublic Man createBoy() throws Exception return BBboy. class .newInstance();public Man createG
15、irl() throws Exception return BBGirl. class .newInstance();public class PerfitFactoryimplements ManFactorypublic Man createBoy()throws Exception return PerfitBoy. class .newInstance();public Man createGirl() return PerfitGirl.public class SuperFactory public Man createBoy() return SuperBoy.public Ma
16、n createGirl() return SuperGirl.throws Exception class .newInstance();implements ManFactory throws Exceptionclass .newInstance();throws Exception class .newInstance();1.8.3 demopublic class Demo public static void main(String口args ) throws Exception ManFactory s = new SuperFactory();SuperBoy sboy =
17、(SuperBoy) s .createBoy();SuperGirl sgirl = (SuperGirl) s .createGirl();sboy .fly();sgirl .fly();ManFactory p = new PerfitFactory();PerfitBoy pboy = (PerfitBoy) p.createBoy();PerfitGirl pgirl = (PerfitGirl) p.createGirl();pboy .fly();pgirl .fly();BBFactory bfactory = new BBFactory();BBboy bboy = (BB
18、boy) bfactory .createBoy();BBGirl bgirl = (BBGirl) bfactory .createGirl();bboy .fly();bgirl .fly();案例分析:如需要新增加实现时,需要先创建po类,该po类继承抽象类第二步,则是创建工厂,该工厂只用于生产新增的po类,不影响原先的代码3工厂应用使用静态工厂模式,实现一个简单的计算器1.9 calculatorpublic interface Calculator double calculate( double numl, double num2);)public class AddCalcula
19、torimplements Calculator public double calculate( double num1, double return num1 + num2;num2) public class DivCalculatorimplements Calculator public double calculate( double num1, double return num1 / num2;num2) public class MulCalculatorimplements Calculator public double calculate( double num1, d
20、ouble return num1 * num2;num2) public class SubCalculatorimplements Calculator public double calculate( double num1, double return num1 - num2;num2) 1.10 factorypublic class CalculatorFactory static String id = CALCULATE_SYMBOL_;static Map context = new HashMap();static try context.put(id+ , Class.f
21、orName ( com.bbxiang.calculator.impl.AddCalculator).newInstance();context.put(id+- , Class.forName ( com.bbxiang.calculator.impl.SubCalculator).newInstance();context.put(id+* , Class.forName ( com.bbxiang.calculator.impl.MulCalculator).newInstance();context.put(id+/ , Class.forName ( com.bbxiang.calculator.impl.DivCalculator).newInstance(); catch (Exception e) System. out .p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026西安西开精密铸造有限责任公司招聘2人考试备考题库及答案解析
- 2026锦泰财产保险股份有限公司四川分公司招聘罗江支公司经理等岗位5人笔试备考题库及答案解析
- 2026年重庆工程学院单招职业适应性测试题库附答案详细解析
- 2026上半年北京门头沟区事业单位招聘45人笔试备考题库及答案解析
- 2026中国移动万源分公司招聘27人考试备考题库及答案解析
- 2026广西北海银滩开发投资股份有限公司招聘1人笔试备考题库及答案解析
- 2026届湖南长沙明德旗舰第二学期期末初三联考语文试题含解析
- 2025-2026学年陕西省西安市陕西师大附中初三下期中考试(英语试题文)含解析
- 2026届湖南省长沙市雅实校初三下期第一次月英语试题含解析
- 竞争环境下企业发展策略
- 22S702 室外排水设施设计与施工-钢筋混凝土化粪池
- 电能质量分析和控制课本配套肖湘宁
- 动物繁殖记录表模板
- 教科版(2017)小学科学四年下册《种植凤仙花》说课(附反思、板书)课件
- 蒸汽养护方案
- JJG 431-2014轻便三杯风向风速表
- GB/T 23809.1-2020应急导向系统设置原则与要求第1部分:建筑物内
- 医学统计学完整课件-
- 小学生航天科普知识(课堂)课件
- 李德新中医基础理论讲稿
- 微软Dynamics 365系统方案
评论
0/150
提交评论