工厂模式,先上uml,摘录网上的图,自己画不出来。
我在学习工厂模式的时候,发现这个产品接口这有点出处,有的说在这使用接口,有的使用抽象类。我觉得两个都可以,简单说一下我对这两个的区别。
1、接口里面只能 定义接口,不能定义方法。而抽象类可以定义接口,也可以在里面写方法。在这里,我觉得,抽象类比接口的功能要多一点。
2、抽象类需要继承,而接口只需要实现,大家也都知道一个类可以实现多个接口,但是只能继承一个类,这也是两者的不同之处。
发表一下自己的见解,ok,下面步入正题。
--------------------------------------------------------------------------------------------我是分割线-----------------------------------------------------------------------------------------------
先定义一个接口/抽象类
public abstract class Car { void add(){ chejia(); color(); fadongji(); } void chejia(){ System.out.println("Car.chejia()"); } abstract void color(); abstract void fadongji(); } |
public class ACar extends Car { @Override void chejia() { System.out.println("ACar.chejia()"); } @Override void color() { System.out.println("ACar.color()"); } @Override void fadongji() { System.out.println("ACar.fadongji()"); } } public class BCar extends Car { @Override void color() { System.out.println("BCar.color()"); } @Override void fadongji() { System.out.println("BCar.fadongji()"); } } |
public class CarFactory { Car getCar(char car){ switch (car) { case 'a': return new ACar(); case 'b': return new BCar(); default: break; } return null; } } |
public class Main { public static void main(String[] args) { CarFactory carFactory = new CarFactory(); Car car = carFactory.getCar('a'); car.add(); System.out.println("--------------我的分割线--------------"); car = carFactory.getCar('b'); car.add(); } } |
ACar.chejia() ACar.color() ACar.fadongji() --------------我的分割线-------------- Car.chejia() BCar.color() BCar.fadongji() |