/** * 抽象工厂方法:抽象工厂方法是在普通工厂方法上进行扩展的,普通工厂每个工厂类只会生产一种产品,例如富士康只生产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(); }}