工厂方法模式
手机案例:我们通过工厂获取不同品牌的手机(苹果)(华为),这里不同品牌的手机是同一级产品,品牌不同可是它们都是手机,不同品牌的手机对应一个工厂,通过工厂获取手机
简单工厂角色如下:
- 抽象产品:描述具体产品的共同特征(特征就是属性或者行为),这里的抽象产品是手机
- 具体产品:实现抽象产品(例如苹果手机、华为手机等...)
- 抽象工厂: 提供创建(生产)手机的方法
- 具体工厂: 实现抽象工厂
工厂方法模式在进行扩展时不需要去修改原有的代码,满足开闭原则、也会是程序松耦合
抽象产品代码
// 抽象产品:手机
public interface Phone {
// 手机开机
void start();
}
具体产品代码
/**
* 具体产品:苹果手机
*/
public class Iphone implements Phone{
@Override
public void start() {
System.out.println("苹果手机开机!");
}
}
/**
* 具体产品:华为手机
*/
public class HWPhone implements Phone{
@Override
public void start() {
System.out.println("华为手机开机!");
}
}
抽象工厂代码
/**
* 抽象工厂:抽象手机工厂
*/
public interface PhoneFactory {
// 创建手机
Phone CreatePhone() ;
}
具体工厂代码
/**
* 苹果手机工厂
*/
public class IphoneFactory implements PhoneFactory{
@Override
public Phone CreatePhone() {
return new Iphone();
}
}
/**
* 华为手机工厂
*/
public class HWPhoneFactory implements PhoneFactory{
@Override
public Phone CreatePhone() {
return new HWPhone();
}
}
测试代码
public class Test {
public static void main(String[] args) {
// 创建苹果手机工厂对象
PhoneFactory factory = new IphoneFactory();
// 使用工厂对象创建出苹果手机
Phone phone = factory.CreatePhone();
// 将手机开机
phone.start();
}
}