首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单工厂、工厂方法、抽象工厂的比较与分析

简单工厂、工厂方法、抽象工厂的比较与分析

作者头像
智慧zhuhuix
发布2020-08-14 16:15:11
4830
发布2020-08-14 16:15:11
举报
比较:
  • 简单工厂:定义一个工厂类,根据应用端传入的不同参数创建不同的业务实例。也可以理解为统一的静态方法工厂,该工厂类负责所有不同业务类型的封装。
  • 工厂方法:将简单工厂进行优化,定义多种业务类,并定义每种业务相对应的工厂类,即不同的工厂类各自封装对应的业务,由应用端按需创建工厂及调用工厂封装的业务方法。
  • 抽象工厂:将工厂方法进行抽象及优化,定义多种业务类,定义多个工厂类,工厂类可以封装多种业务类型,由应用端按需创建工厂及调用工厂封装的多种不同的业务类型。
代码分析:
  • 简单工厂的代码
在这里插入图片描述
在这里插入图片描述
//Phone抽象类
public abstract class Phone {
    abstract void produce();
}
//ApplePhone类
public class ApplePhone extends Phone {
    @Override
    void produce() {
        System.out.println("生产苹果手机");
    }
}
//HuaweiPhone类
public class HuaweiPhone extends Phone {
    @Override
    void produce() {
        System.out.println("生产华为手机");
    }
}
//简单工厂类
public class PhoneFactory {
    Phone getPhone(String type){
        switch (type.toLowerCase()){
            case "apple":
                return new ApplePhone();
            case "huawei":
                return new HuaweiPhone();
            default:
                return null;
        }
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        PhoneFactory phoneFactory = new PhoneFactory();
        Phone phone=phoneFactory.getPhone("apple");
        phone.produce();

        PhoneFactory phoneFactory1 = new PhoneFactory();
        Phone phone1=phoneFactory.getPhone("huawei");
        phone1.produce();
    }
}
  • 工厂方法的代码
在这里插入图片描述
在这里插入图片描述
//Phone抽象类
public abstract class Phone {
    abstract  void produce();
}
//PhoneFactory接口
public interface PhoneFactory {
    Phone getPhone();
}
//通过继承抽象类定义ApplePhone
public class ApplePhone extends  Phone {
    @Override
    void produce() {
        System.out.println("生产苹果手机");
    }
}
//通过实现接口定义ApplePhoneFactory
public class ApplePhoneFactory implements PhoneFactory {
    @Override
    public Phone getPhone() {
        return new ApplePhone();
    }
}
//通过继承抽象类定义HuaweiPhone
public class HuaweiPhone extends Phone {
    @Override
    void produce() {
        System.out.println("生产华为手机");
    }
}
//通过实现接口定义HuaweiPhoneFactory
public class HuaweiPhoneFactory implements PhoneFactory {
    @Override
    public Phone getPhone() {
        return new HuaweiPhone();
    }
}
//Test测试类
public class Test {
    public static void main(String[] args) {
        PhoneFactory phoneFactory= new ApplePhoneFactory();
        phoneFactory.getPhone().produce();

        PhoneFactory phoneFactory1 = new HuaweiPhoneFactory();
        phoneFactory1.getPhone().produce();
    }
}
  • 抽象工厂的代码
在这里插入图片描述
在这里插入图片描述
//Phone抽象类,可以用接口方式代替
public abstract class Phone {
    abstract  void producePhone();
}
//NoteBook抽象类,可以用接口方式代替
public abstract class NoteBook {
    abstract void produceNoteBook();
}
//抽象工厂
public interface Factory {
    Phone getPhone();
    NoteBook getNoteBook();
}
//Apple Phone类
public class ApplePhone extends Phone {
    @Override
    void producePhone() {
        System.out.println("生产苹果手机");
    }
}
//Apple MacBook类
public class AppleMacBook extends NoteBook {
    @Override
    void produceNoteBook() {
        System.out.println("生产苹果MacBook");

    }
}
//Apple工厂类
public class AppleFactory implements Factory {
    @Override
    public Phone getPhone() {
        return new ApplePhone();
    }

    @Override
    public NoteBook getNoteBook() {
        return new AppleMacBook();
    }
}
//Huawei Phone类
public class HuaweiPhone extends Phone {
    @Override
    void producePhone() {
        System.out.println("生产华为手机");
    }
}
//Huawei NoteBook类
public class HuaweiNoteBook extends NoteBook {
    @Override
    void produceNoteBook() {
        System.out.println("生产华为笔记本电脑");
    }
}
//Huawei工厂类
public class HuaweiFactory implements Factory {
    @Override
    public Phone getPhone() {
        return new HuaweiPhone();
    }

    @Override
    public NoteBook getNoteBook() {
        return new HuaweiNoteBook();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        Factory appleFactory = new AppleFactory();
        appleFactory.getPhone().producePhone();
        appleFactory.getNoteBook().produceNoteBook();
        
        Factory huaweiFactory = new HuaweiFactory();
        huaweiFactory.getPhone().producePhone();
        huaweiFactory.getNoteBook().produceNoteBook();
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 比较:
  • 代码分析:
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档