抽象工厂
特点:
- 有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
- 有一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类可以创建多个具体产品类的实例。
- 抽象工厂模式的缺点是产生新的产品品种时,要改动的地方会太多。
public interface Phone { //手机
void call();
void sms();
}
public interface KongTiao { //空调
void zhiLeng();
void zhiRe();
}
产品类
- 小米产品
public class XiaoMiPhone implements Phone { // 小米手机
@Override
public void call() {
System.out.println("小米手机 打电话");
}
@Override
public void sms() {
System.out.println("小米手机 发短信");
}
}
public class XiaoMiKongTiao implements KongTiao { // 小米空调
@Override
public void zhiLeng() {
System.out.println("小米空调 制冷");
}
@Override
public void zhiRe() {
System.out.println("小米空调 制热");
}
}
- 格力产品
public class GreeMiPhone implements Phone { //格力手机
@Override
public void call() {
System.out.println("格力手机 打电话");
}
@Override
public void sms() {
System.out.println("格力手机 发短信");
}
}
public class GreeKongTiao implements KongTiao { // 格力空调
@Override
public void zhiLeng() {
System.out.println("格力空调 制冷");
}
@Override
public void zhiRe() {
System.out.println("格力空调 制热");
}
}
工厂接口
public interface Factory {
Phone createPhone();
KongTiao createKongTiao();
}
工厂类
- 小米工厂
public class XiaoMiFactory implements Factory{
@Override
public Phone createPhone() { //生产手机
return new XiaoMiPhone();
}
@Override
public KongTiao createKongTiao() { //生产空调
return new XiaoMiKongTiao();
}
}
- 格式工厂
public class GreeFactory implements Factory {
@Override
public Phone createPhone() { // 生产手机
return new GreeMiPhone();
}
@Override
public KongTiao createKongTiao() { // 生产空调
return new GreeKongTiao();
}
}
## 测试代码
public static void main(String[] args) {
Factory factory = null;
factory = new XiaoMiFactory();
// factory = new GreeFactory();
Phone phone = factory.createPhone();
phone.call();
phone.sms();
KongTiao kongTiao = factory.createKongTiao();
kongTiao.zhiLeng();
kongTiao.zhiRe();
}
程序运行结果: