java工厂模型_java工厂模型小结

今天看了一篇关于工厂模型的博文。感觉不错,可谓感触颇深,对工厂模型的理解有进一步。下面我也简单介绍一下工厂模型。

工厂模型主要分为以下三种状态:

(1).简单工厂模型(SimpleFactory)

(2)工厂方法(Factory Method)

(3)抽象工厂(Abstract Factory)

1.简单工厂模型:其实就是定义一个接口,不同的产品类实现这个接口,最后工厂类通过传入的不同参数去生产不同的产品。这里的核心就是工厂类。下面介绍一个小例子。

假设我们要生产手机和电脑该怎么办呢?

首先先定义一个产品Product接口public interface Product {

}

要生产手机和电脑就得分别定义电脑类和手机类。

电脑类:public class Computer implements Product{

public Computer(){

System.out.println("电脑被制造出来了");

}

}

手机类:public class Phone implements Product{

public Phone(){

System.out.println("电话被制造出来了");

}

}

这个时候呢就需要工厂出面了。根据传入的参数不同,就代表了不同的需求,生产不同的产品。

简单工厂类:public class SimpleFactory {

public static Product Factory(String productName)throws Exception{

if("phone".equals(productName)){

return new Phone();

}else if("computer".equals(productName)){

return new Computer();

}else{

throw new Exception("没有改产品");

}

}

}

下面我们写个测试类,看一下运行结果:

测试类:public class TestSimpleFactory {

public static void main(String[] args) {

try{

SimpleFactory.Factory("computer");

SimpleFactory.Factory("phone");

}catch(Exception e){

e.printStackTrace();

}

}

}

测试结果为:

电脑被制造出来了

电话被制造出来了

这就是简单工厂,但是简单工厂尤其局限性。简单工厂的核心就是工厂类。一旦工厂类失效,则整个程序就会失效。所以就有了工厂方法和抽象工厂。下面先介绍一下工厂方法。

2工厂方法:简单的说工厂方法就是给工厂定义了接口,通过多态的形式削弱了工厂的作用。

工厂的接口:定义了一个抽象方法。public interface Factory {

public Product create();

}

和上面一样也定义了一个产品接口:用于实现不同产品的生产。

产品接口:public interface Product {

}

既然有了产品接口就生产不同的产品吧。

手机类:public class Phone implements Product{

public Phone(){

System.out.println("电话被制造出来了");

}

}

电脑类:public class Computer implements Product{

public Computer(){

System.out.println("电脑被制造出来了");

}

}

工厂方法的最主要特点就是定义了工厂接口,可以定义出专门生产电脑的工厂,也可以定义出专门生产手机的工厂等等。。。下面就定义工厂的实现类吧

电脑工厂类:专门生产电脑public class ComputerFactory implements Factory {

public Product create() {

return new Computer();

}

}

手机工厂类:专门生产手机public class PhoneFactory implements Factory{

public Product create() {

return new Phone();

}

}

下面我们写一下工厂方法类:主要创建不同的工厂类,通过不同的工厂生产不同的产品。

工厂方法类:public class FactoryMethod {

public static void main(String[] args) {

ComputerFactory cf = new ComputerFactory();

cf.create();

PhoneFactory pf = new PhoneFactory();

pf.create();

}

}

下面看一下运行结果:

电脑被制造出来了

电话被制造出来了

接下来介绍一下抽象工厂类。之后在总结一下三者的区别。

3抽象工厂类:就是现在的产品更加丰富,就像联想电脑还有不同的型号,而不是单一的一种型号。这是对产品的接口就得更加细化。例如手机和电脑不在简单的定义一个产品接口就可以,而是的对其分别定义不同的接口:下面我们就对其定义接口如下:

手机接口:public interface Phone {

}

电脑接口:public interface Computer {

}

有了接口我们就可以通过接口实现不同的产品类了:

手机产品类:

(1)联想手机类:public class LenovoPhone implements Phone{

public LenovoPhone(){

System.out.println("联想手机被生产出来了");

}

}

(2)苹果手机类:public class ApplePhone implements Phone{

public ApplePhone(){

System.out.println("苹果手机被生产出来了");

}

}

电脑产品类:

(1)联想电脑类:public class LenovoComputer implements Computer{

public LenovoComputer(){

System.out.println("联想电脑被生产出来了");

}

}

(2)苹果电脑类:public class AppleComputer implements Computer{

public AppleComputer(){

System.out.println("苹果电脑被生产出来了");

}

}

对了我们还需要创建一个工厂类接口:这个接口与前面的有所不同。请看public interface Factory {

public Computer createComputer();

public Phone createPhone();

}

这个工厂接口不仅有电脑抽象方法还有手机的抽象方法。就像联想工厂的创建不仅仅是为了生产电脑,而是为了能生产联想的各种电子产品。下面定义联想工厂实现类:

联想工厂实现类:public class LenovoFactory implements Factory{

public Phone createPhone() {

return new LenovoPhone();

}

public Computer createComputer() {

return new LenovoComputer();

}

}

苹果工厂的实现类:public class AppleFactory implements Factory{

public Computer createComputer() {

return new AppleComputer();

}

public Phone createPhone() {

return new ApplePhone();

}

}

下面写个测类,看下结果。

测试类:定义不同的工厂对象,进行产品生产。public class TestAbstractFactory {

public static void main(String[] args) {

LenovoFactory lf = new LenovoFactory();

lf.createComputer();

lf.createPhone();

AppleFactory af = new AppleFactory();

af.createComputer();

af.createPhone();

}

运行结果:

联想电脑被生产出来了

联想手机被生产出来了

苹果电脑被生产出来了

苹果手机被生产出来了

三种工厂方法已经介绍了,现在总结一下三个方法的区:

简单工厂模型就是这个工厂什么都能生产,工厂的作用比较大,一旦工厂出现问题则所有的产品都不能生产,在这里工厂是当之无愧的核心所在。而工厂方法呢,则削弱了工厂的核心作用。给工厂定义了接口,可以实现不同工厂类,一旦那个工厂出现问题其他工厂照样可以生产产品。但是唯一的不足是一个工厂只能生产单一的产品。而抽象工厂类实现一个工厂生产不同的产品。抽象工厂类和工厂方法各有各的特点,各有所长,使用与不同的生产模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值