博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(四)简单工厂模式
阅读量:6832 次
发布时间:2019-06-26

本文共 1924 字,大约阅读时间需要 6 分钟。

相关文章

1.简单工厂模式简单介绍

定义

简单工厂模式属于创建型模式又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。

简单工厂模式结构图

这里写图片描写叙述

  • Factory:工厂类,简单工厂模式的核心。它负责实现创建全部实例的内部逻辑。工厂类的创建产品类的方法能够被外界直接调用。创建所需的产品对象。

  • IProduct:抽象产品类。简单工厂模式所创建的全部对象的父类,它负责描写叙述全部实例所共同拥有的公共接口。
  • Product:详细产品类。是简单工厂模式的创建目标。

2.简单工厂模式简单实现

这里我们用生产电脑来举例,如果有一个电脑的代工生产商。它眼下已经能够代工生产联想电脑了,随着业务的拓展,这个代工生产商还要生产惠普和华硕的电脑,这样我们就须要用一个单独的类来专门生产电脑,这就用到了简单工厂模式。以下我们来实现简单工厂模式:

创建抽象产品类

我们创建一个电脑的抽象产品类,他有一个抽象方法用于启动电脑:

public abstract class Computer {
/** * 产品的抽象方法,由详细的产品类去实现 */ public abstract void start();}

创建详细产品类

接着我们创建各个品牌的电脑,他们都继承了他们的父类Computer 。并实现了父类的start方法:

联想电脑:

public class LenovoComputer extends Computer{
@Override public void start() { System.out.println("联想电脑启动"); }

惠普电脑:

public class HpComputer extends Computer{
@Override public void start() { System.out.println("惠普电脑启动"); }}

华硕电脑:

public class AsusComputer extends Computer {
@Override public void start() { System.out.println("华硕电脑启动"); }}

创建工厂类

接下来创建一个工厂类。它提供了一个静态方法createComputer用来生产电脑。你仅仅须要传入你想生产的电脑的品牌,它就会实例化相应品牌的电脑对象:

public class ComputerFactory {    public static Computer createComputer(String type){        Computer mComputer=null;        switch (type) {            case "lenovo":                mComputer=new LenovoComputer();               break;            case "hp":                mComputer=new HpComputer();                break;            case "asus":                mComputer=new AsusComputer();                break;        }        return mComputer;    }}

client调用工厂类

client调用工厂类。传入“hp”生产出惠普电脑并调用该电脑对象的start方法:

public class CreatComputer {    public static void main(String[]args){      ComputerFactory.createComputer("hp").start();    }}

3.使用简单工厂模式的场景和优缺点

使用场景

  • 工厂类负责创建的对象比較少。
  • 客户仅仅知道传入工厂类的參数。对于怎样创建对象(逻辑)不关心。

简单工厂模式优缺点

长处:

使用户依据參数获得相应的类实例。避免了直接实例化类。减少了耦合性。

缺点:

可实例化的类型在编译期间已经被确定。如果添加新类型,则须要改动工厂,违背了开放封闭原则(ASD) 。 简单工厂须要知道全部要生成的类型,当子类过多或者子类层次过多时不适合使用。

你可能感兴趣的文章
在ubuntu18.04版本安装vscode
查看>>
Cracking the coding interview--Q1.8
查看>>
前端(开发环境) 5
查看>>
2017ACM/ICPC广西邀请赛 Color it
查看>>
Photoshop蒙版介绍之图层蒙版
查看>>
java通过传送地址获取坐标
查看>>
10个Python练手小程序,学习python的很好的资料
查看>>
Linux终端快捷键
查看>>
乐观锁与悲观锁
查看>>
docker windows container的一些注意点
查看>>
拥抱博客园
查看>>
yum使用详细
查看>>
2.字符串
查看>>
Linux权限管理命令
查看>>
[转]关于strtok和strtok_r函数的深度研究
查看>>
ios-自定义点击状态栏滚回顶部
查看>>
Django现有模型增加字段
查看>>
解决IE6浏览器下position:fixed固定定位问题
查看>>
Rest分页接口开发
查看>>
Mybatis中oracle如何批量insert语句
查看>>