抽象工厂方法

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

 

posted @ 2019-05-22 13:24  yangxiaohui227  阅读(135)  评论(0编辑  收藏  举报