设计模式之简单工厂模式

来源:互联网 发布:域名的拼音 编辑:程序博客网 时间:2024/05/16 08:13

工厂模式,先上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();

}在定义两个产品。其中一个产品重写了chejia()方法,一个没有。

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()

原创粉丝点击