/**
* 抽象工厂方法:抽象工厂方法是在普通工厂方法上进行扩展的,普通工厂每个工厂类只会生产一种产品,例如富士康只生产iphone,而抽象工厂就是
* 一个工厂可以生产多种产品,例如,富士康可以生产苹果手机,也可以生产苹果耳机
* 该模式特点:1.有多种产品的接口以及对应的实现类(如手机接口,实现类为苹果手机和小米手机,耳机接口(实现类为苹果耳机和小米手机)
* 2.有一个工厂接口和对应的实现类,如手机生产工厂接口,实现类纬创工厂,富士康工厂
* 2.每个工厂类,具有同时生产多种产品的方法,例如富士康工厂,生产苹果手机和苹果耳机
*/
//创建手机接口
public interface Phone {
void call();
}
//苹果手机对象
public class Iphone implements Phone {
@Override
public void call() {
System.out.println("使用苹果手机打电话");
}
}
//小米手机
public class MIPhone implements Phone {
@Override
public void call() {
System.out.println("使用小米手机打电话");
}
}
//耳机接口
public interface Earphone {
void listenMusic();
}
//苹果耳机
public class AppleEarphone implements Earphone {
@Override
public void listenMusic() {
System.out.println("用苹果耳机听音乐");
}
}
//小米耳机
public class MiEarPhone implements Earphone {
@Override
public void listenMusic() {
System.out.println("使用小米耳机听音乐");
}
}
//工厂接口
public interface PhoneFactory {
//生产手机
Phone createPhone();
//生产耳机
Earphone createEarphone();
}
//生产苹果手机的工厂,如富士康
public class IPhoneFactory implements PhoneFactory {
//生产苹果手机
@Override
public Phone createPhone() {
return new Iphone();
}
//生产苹果耳机
@Override
public Earphone createEarphone() {
return new AppleEarphone();
}
}
//生产小米手机的工厂如纬创
public class MiPhoneFactory implements PhoneFactory {
//生产小米手机
@Override
public Phone createPhone() {
return new MIPhone();
}
//生产小米耳机
@Override
public Earphone createEarphone() {
return new MiEarPhone();
}
}
class test2{
public static void main(String[] args) {
//创建苹果手机和耳机
PhoneFactory iPhoneFactory = new IPhoneFactory();
iPhoneFactory.createPhone().call();
iPhoneFactory.createEarphone().listenMusic();
//创建小米手机和耳机
PhoneFactory miPhoneFactory = new MiPhoneFactory();
miPhoneFactory.createPhone().call();
miPhoneFactory.createEarphone().listenMusic();
}
}