接口在设计模式中的应用之一:简单工厂模式
- 无工厂:手工
缺点:麻烦,对每一个的要求都比较高
优点:个性化 - 工厂:生产产品
优点:批量生产,使用者比较方便,直接买
缺点:无法定制,如果非要定制就会比较麻烦
java中当创建对象比较麻烦时,或者需要批量生产对象时,可以交给“工厂类”来生产。
简单工厂类的作用:生产java的对象,一般是生产某个接口的实现类对象。
好处:把对象的使用者与创建者分离,解耦合(把对象的使用者和具体的实现类解耦合)。
列如:TestSimpleFactory类是对象的使用者
SimpleFactor类是对象的创建者
public class TestSimpleFactory {
public static void main(String[] args) {
//没有工厂
//BMW b = new BMW(); //直接new
//现在用工厂类
Car car = SimpleFactor.getCar("BMW");
car.run();
Car a = SimpleFactor.getCar("Audi");
a.run();
}
}
//产品的标准
interface Car{
void run();
}
//具体的产品
class BMW implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("宝马车");
}
}
class Benz implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("奔驰车");
}
}
class Audi implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("奥迪车");
}
}
//工厂类
class SimpleFactor{
public static Car getCar(String type) {
if("BMW".equals(type)) {
return new BMW();
}else if("Benz".equals(type)) {
return new Benz();
}else {
return new Audi();
}
}
}
//接口
interface Runnable{
void run();
}
//实现类
class Person implements Runnable{
@Override
public void run() {
System.out.println("Person run");
}
}
//实现类
class Car implements Runnable{
@Override
public void run() {
System.out.println("Car run");
}
}
//
class CreateObject{
//有一个方法专门返回实现类的对象
public static Runnable createObject(String type){
switch(type){
case "com.atguigu.exam1.Person":
return new Person();
case "com.atguigu.exam1.Car":
return new Car();
default:
return null;
}
}
}