类的创建与工厂模式_第1页
类的创建与工厂模式_第2页
类的创建与工厂模式_第3页
类的创建与工厂模式_第4页
类的创建与工厂模式_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论