无需知道内部代码,只需根据工厂创建对象即可
一、简单工厂模式
适用范围:不需要频繁添加类,属于静态
public interface Car {
public void name();
}
public class AoDi implements Car{
@Override
public void name() {
System.out.println("奥迪");
}
}
public class WuLing implements Car{
@Override
public void name() {
System.out.println("五菱");
}
}
//静态工厂类
public class CarFactory{
public static Car getCar(String name){
if(name.equals("五菱")){
return new WuLing();
}else if (name.equals("奥迪")) {
return new AoDi();
}else {
return null;
}
}
}
public class Test {
public static void main(String args[]){
CarFactory.getCar("五菱");
CarFactory.getCar("奥迪");
}
}
二、工厂方法模式
适用范围:外部添加类,不会影响到内部代码,但是代码书写量增大
public interface Car {
public void name();
}
public class AoDi implements Car{
@Override
public void name() {
System.out.println("奥迪");
}
}
public class WuLing implements Car{
@Override
public void name() {
System.out.println("五菱");
}
}
//工厂方法模式
public interface CarFactoryMethod {
public Car getCar();
}
public class AoDiFactory implements CarFactoryMethod {
@Override
public Car getCar() {
return new AoDi();
}
}
public class WuLingFactory implements CarFactoryMethod{
@Override
public Car getCar() {
return new WuLing();
}
}
public class Test {
public static void main(String args[]){
Car car = new WuLingFactory().getCar();
Car car2 = new AoDiFactory().getCar();
}
}
三、抽象工厂模式
适用范围:类与类之间既有横向的关系,又有纵向的关系(手机和电脑,存在多个牌子);如果方法属性(手机和电脑的抽象类)固定的话,具有极强的可用性,只需根据不同的牌子添加多个品牌类就可以了
public interface Phone {
public void call();
}
public interface Computer {
public void play();
}
public class HuaWeiPhnoe implements Phone{
@Override
public void call() {
System.out.println("华为手机打电话");
}
}
public class HuaWeiComputer implements Computer{
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("华为电脑");
}
}
public class XiaoMiPhone implements Phone{
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
public class XiaoMiComputer implements Computer{
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("小米电脑");
}
}
//抽象工厂模式
public interface ProductFactory {
Phone getPhone();
Computer getComputer();
}
public class HuaWeiFactory implements ProductFactory{
@Override
public Phone getPhone() {
// TODO Auto-generated method stub
return new HuaWeiPhnoe();
}
@Override
public Computer getComputer() {
// TODO Auto-generated method stub
return new HuaWeiComputer();
}
}
public class XiaoMiFactory implements ProductFactory{
@Override
public Phone getPhone() {
// TODO Auto-generated method stub
return new XiaoMiPhone();
}
@Override
public Computer getComputer() {
// TODO Auto-generated method stub
return new XiaoMiComputer();
}
}
public class Test {
public static void main(String args[]){
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
xiaoMiFactory.getPhone();
xiaoMiFactory.getComputer();
HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
huaWeiFactory.getPhone();
huaWeiFactory.getComputer();
}
}