简单工厂的理解

简单工厂不是设计模式的一种,只是代码规范而且。也就是说构造一个披萨工厂出来,按不同味道生产不同的披萨。

类图

抽象披萨

public abstract class AbstractPizza {
public void prepare() {
System.out.println("prepare pizza");
}
public void bake(){
System.out.println("bake pizza");
}
public void cut(){
System.out.println("cut pizza");
}
public void box(){
System.out.println("pizza box");
}
}

实体披萨

public class CheeseAbstractPizza extends AbstractPizza {
@Override
public void prepare() {
System.out.println("prepare CheesePizza");
}
}
public class GreekAbstractPizza extends AbstractPizza {
@Override
public void prepare() {
System.out.println("prepare GreekPizza");
}
}
public class PepperoniAbstractPizza extends AbstractPizza {
@Override
public void prepare() {
System.out.println("prepare PepperoniPizza");
}
}

披萨工厂

public class SimpleFactory {

    public AbstractPizza createPizza(String type) {
if ("cheesePizza".equals(type)) {
return new CheeseAbstractPizza();
} else if ("greekPizza".equals(type)) {
return new GreekAbstractPizza();
} else if ("pepperoniPizza".equals(type)) {
return new PepperoniAbstractPizza();
}
return null;
}
}

披萨商店

public class PizzaStore {
SimpleFactory simplefactory = null; PizzaStore(SimpleFactory simplefactory){
this.simplefactory = simplefactory;
} public void orderPizza(String type) {
AbstractPizza abstractPizza = simplefactory.createPizza(type);
abstractPizza.prepare();
abstractPizza.cut();
abstractPizza.bake();
abstractPizza.box();
} public static void main(String[] args) {
PizzaStore store = new PizzaStore(new SimpleFactory());
store.orderPizza("cheesePizza");
}
}

运行结果

prepare CheesePizza

cut pizza

bake pizza

pizza box

总结

  1. 简单工厂代码简单,易理解。
  2. 提供一个入参,可以得到相应的对象
  3. 违背了开闭原则

最新文章

  1. crontab每秒执行URL接口
  2. 国外经典设计:12个漂亮的移动APP网站案例
  3. 【BZOJ】【1096】【ZJOI2007】仓库建设
  4. strncpy 和 strcpy的区别 (要抽时间重点看,未完待续)
  5. Java中sychronized方法与sychronized块区别
  6. 手把手教你mysql(十)索引
  7. 使用PLSQL Developer连接Oracle Database 11g Express Edition
  8. Ubuntu下编译SHTOOLS
  9. struts2(三)---struts2中的服务端数据验证框架validate
  10. 7.app和app后端的通讯
  11. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
  12. Android TextView自动换行、排列错乱问题及解决
  13. 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定
  14. drf 生成接口文档
  15. 荣耀9少 gms core服务
  16. 数据库设计和ER模型-------之ER模型的基本概念(第二章)
  17. CentOS 7 之安装 Oracle 11gR2
  18. SQL语句之order by 、group by、having、where
  19. ThreadLocal的实现和使用场景
  20. CSS3实战-文字篇

热门文章

  1. Spring Boot2.1.7启动zipkin-server报错:Error creating bean with name 'armeriaServer' defined in class path
  2. Linxu:磁盘分区
  3. Redis学习笔记(六、哨兵)
  4. base46+url编码
  5. 创建一个任意大小的全色矩阵 python
  6. 【转】Restful架构详解
  7. MySQL学习笔记5——编码
  8. layer之关闭弹窗
  9. Potyczki Algorythmiczne 2019
  10. 开发者必备Linux命令