简单工厂模式
特点:
- 简单,易用 比较常用
- 不符合开闭原则
public class Test{
public static void main(){
Phone p1 = PhoneFactory.getPhone("XiaoMi");
p1.call();
Phone p2 = PhoneFactory.getPhone("Apple");
p2.call();
}
}
//手机工厂
class PhoneFactory(
public static Phone getPhone(String type){
if("XiaoMi".equals(type)){
return new XiaoMiPhone();
}
if("Apple".equals(type)){
return new Iphone();
}
return null;
}
)
//手机接口
interface Phone{
void call();
}
//小米手机
class XiaoMiPhone implements Phone{
@Override
public void call(
System.out.println("call someone by XiaoMiPhone!");
);
}
//苹果手机
class Iphone implements Phone{
@Override
public void call(
System.out.println("call someone by Iphone!");
);
}
工厂方法模式
特点:
- 符合开闭原则
- 增加了类结构的复杂性
public class Test{
public static void main(){
Phone p1 = new PhoneFactory().getPhone();
p1.call();
Phone p2 = new IPhoneFactory().getPhone();
p2.call();
}
}
//手机工厂接口
interface PhoneFactory{
Phone getPhone();
}
//小米手机工厂
class XiaoMiPhoneFactory implements PhoneFactory(
@Override
public Phone getPhone(){
return new XiaoMiPhone();
}
)
//苹果手机工厂
class IPhoneFactory implements PhoneFactory(
@Override
public Phone getPhone(){
return new Iphone();
}
)
//手机接口
interface Phone{
void call();
}
//小米手机
class XiaoMiPhone implements Phone{
@Override
public void call(
System.out.println("call someone by XiaoMiPhone!");
);
}
//苹果手机
class Iphone implements Phone{
@Override
public void call(
System.out.println("call someone by Iphone!");
);
}
抽象工厂模式
特点:
- 工厂的工厂,简单理解就是把工厂再抽象一层
public class Test{
public static void main(){
Factory xiaoMiFactory = new XiaoMiFactory()
Phone phone1 = xiaoMiFactory.getPhone();
phone1.call();
Pad pad1 = xiaoMiFactory.getPad();
pad1.playGames();
Factory appleFactory = new AppleFactory()
Phone phone2 = appleFactory.getPhone();
phone2.call();
Pad pad2 = appleFactory.getPad();
pad2.playGames();
}
}
//工厂接口
interface Factory{
Pad getPad();
Phone getPhone();
}
//小米工厂
class XiaoMiFactory implements Factory{
@Override
Pad getPad(){
return new XiaoMiPad();
}
@Override
Phone getPhone(){
return new XiaoMiPhone();
};
}
//苹果工厂
class AppleFactory implements Factory{
@Override
Pad getPad(){
return new IPad();
}
@Override
Phone getPhone(){
return new IPhone();
};
}
//平板接口
interface Pad{
void playGames();
}
//小米平板
class XiaoMiPad implements Pad{
@Override
public void playGames(
System.out.println("playGames by XiaoMiPad !");
);
}
//苹果平板
class IPad implements Pad{
@Override
public void playGames(
System.out.println("playGames by IPad!");
);
}
//手机接口
interface Phone{
void call();
}
//小米手机
class XiaoMiPhone implements Phone{
@Override
public void call(
System.out.println("call someone by XiaoMiPhone!");
);
}
//苹果手机
class Iphone implements Phone{
@Override
public void call(
System.out.println("call someone by Iphone!");
);
}