设计模式-简单工厂模式[JAVA版]

2016年苹果春季发布会发布了一款迄今最高性能的4英寸iPhone,那么问题来了,苹果公司的代工厂到底生产多少种尺寸的手机呢? 下面就让简单工厂告诉我们答案吧。

  1. 由工厂决定生产哪种型号的的手机,苹果公司的工厂就是一个工厂类,是简单工厂模式的核心类。
  2. iPhone5、iPhone5S、iphone6都是苹果手机,只是型号不同。苹果手机类满足抽象的定义,各个型号的手机类是其具体实现。

简单工厂模式的UML如下:

简单工厂模式的实现

首先创建一个"苹果手机"类,定义一个获取手机尺寸的方法

/**

* 苹果手机

* @author songwz

*

*/

public abstract class ApplePhone {

 

    /**

     * 获取尺寸

     */

    protected abstract void getSize();

}

 

苹果手机不同型号的"手机类"。

/**

* Iphone4

* @author songwz

*

*/

public class Iphone4 extends ApplePhone{

 

    @Override

    public void getSize() {

        System.out.println("iPhone4屏幕:3.5英寸");

    }

 

}

 

/**

* iPhone5

* @author gt780

*

*/

public class Iphone5 extends ApplePhone {

 

    @Override

    public void getSize() {

        System.out.println("iPhone5屏幕:4英寸");

    }

 

}

 

/**

* iPhone6

* @author songwz

*

*/

public class Iphone6 extends ApplePhone{

 

    @Override

    public void getSize() {

        System.out.println("iPhone6屏幕:4.7英寸");

    }

 

}

 

建立一个"工厂类"生产不同型号的"手机对象"。

/**

* 苹果工厂

* @author songwz

*

*/

public class AppleFactory {

 

    public static ApplePhone createPhone(String model){

        ApplePhone applePhone = null;

        

        switch (model) {

        case"iPhone4":

            applePhone = new Iphone4();

            break;

        case"iPhone5":

            applePhone = new Iphone5();

            break;

        case"iPhone6":

            applePhone = new Iphone6();

            break;

        default:

            break;

        }

        

        returnapplePhone;

    }

}

 

最后是客户端测试类

public class Client {

 

    public static void main(String[] args) {

        ApplePhone applePhone ;

        applePhone = AppleFactory.createPhone("iPhone4");

        applePhone.getSize();

        applePhone = AppleFactory.createPhone("iPhone5");

        applePhone.getSize();

        applePhone = AppleFactory.createPhone("iPhone6");

        applePhone.getSize();

    }

}

 

简单工厂的优点:

  • 松耦合,调用方只需与工厂类交互,无需关心实例怎么创建的。
  • 扩展性强,只需新增一个实现类和修改工厂方法即可,这也算缺点的一方面。

转载于:https://www.cnblogs.com/hehesong/p/5306914.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值