- 本质:就是帮助我们创建对象使用的。就是将调用者和创建者的分离
- 工厂模式分为:简单工厂、工厂方法模式、抽象工厂模式
- 简单工厂模式实现
- 首先写一下不使用工厂模式,创建对象
接口代码:
package kw.test.gcms; public interface Car { public void run(); }
实现类1:
package kw.test.gcms; public class BenBen implements Car{ @Override public void run() { // TODO Auto-generated method stub System.out.println("我是benben"); } }
实现类2:
package kw.test.gcms; public class HongQi implements Car{ @Override public void run() { // TODO Auto-generated method stub System.out.println("我是hongqi!"); } }
客户端代码
package kw.test.gcms; public class NoGcMo { public static void main(String[] args) { BenBen ben = new BenBen(); ben.run(); HongQi hongQi = new HongQi(); hongQi.run(); } }
5.使用简答工厂方法
方式1:
package kw.test.gcms; public class CarFactory { public static Car run(String name) { if("hongqi".equals(name)) { return new HongQi(); }else if("benben".equals(name)) { return new BenBen(); }else { return null; } } }
注意:上面if("hongqi".equals(name))是为了防止未传入参数,而抛出异常。
客户端代码
package kw.test.gcms; public class GcMs { public static void main(String[] args) { Car hongqi = CarFactory.run("hongqi"); Car benben = CarFactory.run("benben"); hongqi.run(); benben.run(); } /* * 这对于代码 是增多 了。但是对于调用者是简单了。 * * 它的缺点就是,增加方法的时候,需要修改不源代码,违背了开闭原则。 */ }
实现方式二:
package kw.test.gcms; /* * 简单工厂实现方式二 */ public class CarFactory2 { public static Car hongqi() { return new HongQi(); } public static Car benben() { return new BenBen(); } }
一般使用静态的方式,目的是为了使用类名调用方法。