简单工厂的构成包括三个角色:

1)抽象产品类

2)具体产品类(继承抽闲产品类)

3)工厂类(生产具体产品)

具体代码实现

1、抽象产品类

/**

* 抽象类

*/

public abstract class Car {

/**

* 产品抽象方法,将会由具体产品类实现

*/

public abstract void driving();

}

2、具体产品类

/**

* 具体产品类BenZCar

*/

public class BenZCar extends Car {

@Override

public void driving() {

System.out.println("BenZCar is Driving!!!");

}

}

/**

* 具体产品类BMWCar

*/

public class BMWCar extends Car {

@Override

public void driving() {

System.out.println("BMWCar is Driving!!!");

}

}

3、工厂类

/**

* 简单工厂类

*/

public class CarFactory {

public static Car create(String type) {

Car car = null;

switch (type) {

case "bmw":

car = new BMWCar();

break;

case "benz":

car = new BenZCar();

break;

}

return car;

}

}

4、调用(这里使用AndroidStudio代码测试,如果是java的可以在main函数中测试)

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.id_bmw).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

CarFactory.create("bmw").driving();

}

});

findViewById(R.id.id_benz).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

CarFactory.create("benz").driving();

}

});

}

}

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/id_bmw"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="制造一个BWM汽车"

android:layout_marginBottom="15dp"/>

android:id="@+id/id_benz"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="制造一个Benz汽车"

android:layout_marginBottom="15dp"/>

5、界面

6、测试结果

08-20 10:59:55.001 3660-3660/com.tech.aile.designpatterns I/System.out: BMWCar is Driving!!!

08-20 10:59:56.573 3660-3660/com.tech.aile.designpatterns I/System.out: BenZCar is Driving!!!

7、使用场景

1)工厂类创建的具体对象要较少,不适用子类过多,子类层级过深的场景。

2)看客户只需要传入什么类型的参数,不用关注创建对象的逻辑。

8、优点

根据参数类型获取实例,不用关注具体细节,降低了耦合

9、缺点

具体的产品类型在编译期间已经确定,不能更改,如果需要新增具体产品就需要修改工厂类,添加新具体产品类,违背了封闭开放原则;

简单工厂必须知道所有需要生产具体产品类,不适用子类过多,子类层级过深的场景

java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)相关推荐

  1. 抽象工厂模式_设计模式系列—抽象工厂模式

    前言 23种设计模式速记 单例(singleton)模式 工厂方法(factory method)模式 23种设计模式快速记忆的请看上面第一篇,前面说完了工厂方法模式,我们发现工厂方法模式存在一个严重 ...

  2. java bean 工厂模式_通过annotation(注解)实现BeanFactory工厂模式(三)

    工厂模式是大家熟知的一种设计模式,在spring BeanFactory将这模式运用自如. 前面讲过如果通过xml配置的方式实现,今天我们来讲讲如何通过注解的方式实现工厂模式. 主要思路 扫描clas ...

  3. 抽象工厂模式_设计模式(3) 抽象工厂模式

    抽象工厂模式 优化抽象工厂 异步工厂 在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式.简单工厂的职责非常简单:构造某个实体类型,然后把实例作为抽象类型返回: 工厂方法模式则进一步抽象出 ...

  4. java实现备忘录模式_设计模式之第17章-备忘录模式(Java实现)

    设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...

  5. mysql工厂模式_设计模式-三种工厂模式实例

    1.简单工厂模式:代替new产生对象,产品的类型比较少时. 我们要获得三种不同的数据库对象,如Mysql,SQLserver,Oracle,它们拥有共同的特征,即可以进行抽象,简单工厂目的是将获得具体 ...

  6. java设计与模式_设计模式《JAVA与模式》之状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...

  7. 创建型模式、结构型模式和行为型模式_设计模式之创建型模式

    设计模式GOF23(Group of Four) 设计模式可分为三种类型: 创建型模式:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式. 结构型模式:适配器模式,桥接模式,装饰模式,组合模式, ...

  8. python实现模式_设计模式-python实现

    设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情 ...

  9. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  10. java 生产者消费者模式_聊聊并发(十)生产者消费者模式

    本文首发于InfoQ   作者:方腾飞  校对:张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使 ...

最新文章

  1. linux open 缓冲区,Linux上文件的默认缓冲区大小
  2. Android的消息机制(2)
  3. MFC文档、视图类的基本功能和二者基本关系
  4. mysql数据库备份工具expdb,使用expdp完成自动备份数据库案例以及遇到的问题
  5. react 与 Vue的一些比较
  6. log解析工具 px4_console.log(console.log) = ?
  7. Spring Boot学习总结(12)——Spring Boot Admin 2.0应用监控示例
  8. 如何在C/C++中动态分配二维数组
  9. 以房养老骗局高发,背后套路何在?
  10. matlab建模总结,数学建模方法自己归纳总结(建模参考用,包含相应例题以及MATLAB...
  11. iPhoneiPad DFU及恢复模式刷机、降级教程
  12. 银河麒麟系统安装字体
  13. ArcGIS栅格数据图层空间相关性分析方法
  14. word2003流程图变成图片_流程图怎么画word2003
  15. Excel 数据透视表教程大全之 03 刷新数据、添加多个字段作为值字段、值显示为总数的百分
  16. 【ProcessOn】在线流程图、思维导图、原型图、UML图制作工具ProcessOn使用
  17. 截图并使用libjpeg库压缩BMP为JPG与将JPG转换为BMP
  18. 【活动】为中秋献上祝福
  19. phpWord设置页码奇偶页不同Footer::EVEN
  20. 虾扑 erp 神技能分析,shopee 卖家的得意助手

热门文章

  1. python分词代码_中文分词--最大正向匹配算法python实现
  2. oracle nvl和coalesce,NVL与Coalesce之间的Oracle差异
  3. Oracle12081,【Oracle介质】Oracle 12C Linux x86-64 最新OPatch patch 6880880 12.2.0.1.7
  4. linux主频限制服务,linux抵御DDOS攻击 通过iptables限制TCP连接和频率
  5. 网络安全之SQL注入
  6. jvm内存模型和java内存模型_JVM运行时内存模型综述
  7. 4am永远 鼠标按键设置_4AM称霸PCL和PEL 绝地求生与和平精英的双端冠军 | 电玩巴士...
  8. java url 本地文件是否存在_我的应用程序知道URL中是否存在文件会一直停止[重复]...
  9. linux用xshell编辑文件,Linux远程管理器xshell和xftp使用教程
  10. php 验证码字体居中,自定义验证码图片的宽高后文本垂直水平居中[帝国cms ShowKey.php]-网站程序网...