一、简单工厂
1.背景:
任意定制交通工具的类型和生产过程
代码:
Moveable.java
package com.cy.dp.factory; public interface Moveable { void run(); }
Car.java:
package com.cy.dp.factory; public class Car implements Moveable{ @Override public void run(){ System.out.println("car running..."); } }
Plane:
package com.cy.dp.factory; public class Plane implements Moveable{ @Override public void run() { System.out.println("plane running..."); } }
VehicleFactory.java:
package com.cy.dp.factory; /** * 交通工具工厂 * @author CY * */ public abstract class VehicleFactory { abstract Moveable create(); }
CarFactory:
package com.cy.dp.factory; public class CarFactory extends VehicleFactory{ @Override Moveable create() { return new Car(); } }
PlaneFactory:
package com.cy.dp.factory; public class PlaneFactory extends VehicleFactory{ @Override Moveable create() { return new Plane(); } }
Test测试类:
package com.cy.dp.factory; public class Test { public static void main(String[] args) { VehicleFactory factory = new CarFactory(); Moveable m = factory.create(); m.run(); } }
question:
要不要把工厂VehicleFactory设计成接口?
答:可以,接口和抽象类其实是一回事;什么时候用抽象类,什么时候用接口?基本上可以采用这样的方式:如果说这个概念在我们脑中确确实实存在的,那你就用抽象类;如果说这个概念仅仅是某些方面的一个特性,比如说会飞的,能跑的,像这一类的东西,我们就把它设计成接口;如果是比较模糊的概念,不知道设计成抽象类还是接口时,那么设计成接口,原因是我们实现了这个接口之后,还可以从其他的抽象类来继承,更灵活。
二、抽象工厂