-
简单工厂; 代码演示
优点; 把调用者与创建者分离 缺点; 对于增加新产品,不修改代码的话.是无法拓展的.违反了开闭原则(对拓展开放;对修改封闭)
package com.helloworld.demo3;
interface Car{
void run();
}
class Audi implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("奥迪在跑");
}
}
class BYD implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("比亚迪在跑");
}
}
//工厂出现了
class CarFactory{
public static Car getCar(String type) {
if("安迪".equals(type))
{
return new Audi();
}else if("比亚迪".equals(type))
{
return new BYD();
}
else {
return null;
}
}
}
public class Factory {
public static void main(String[] args) {
Car car = CarFactory.getCar("安迪");
car.run();
}
}
由于简单工厂中的局限性
于是提供了工厂模式方法;
public class Factory {
public static void main(String[] args) {
Car car = new AudiFactory().getCar();
car.run();
}
}
// 车接口
interface Car {
void run();
}
//奥迪车实现类
class Audi implements Car {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("奥迪在跑");
}
}
//比亚迪车实现类
class BYD implements Car {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("比亚迪在跑");
}
}
//工厂接口
interface Factory1 {
Car getCar();
}
//工厂实现类;
class AudiFactory implements Factory1 {
public Car getCar() {
// TODO Auto-generated method stub 在这里创建你需要创建的车类型工厂.将此车作为返回值返回.
return new Audi();
}
}
采用这种模式,你就可以添加车和工厂,而现有的就不用改动了.