博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单工厂(Simple Factory)
阅读量:4957 次
发布时间:2019-06-12

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

简单工厂并不算23种基本设计模式,应该算是一种编程习惯:

public class PizzaStore {	public Pizza orderPizza(String type){		Pizza pizza;		if(null != type && type == "Greek"){			pizza = new GreekPizza();		}else if(null != type && type == "Cheese"){			pizza = new CheesePizza();		}else{			pizza = null;		}		return pizza;	}}

具体Pizza类如GreekPizza以及CheesePizza和PizzaStore相耦合,导致具体Pizza的变动(添加一种新Pizza)必然会导致PizzaStore类的变动

if(null != type && type == "Greek"){			pizza = new GreekPizza();		}else if(null != type && type == "Cheese"){			pizza = new CheesePizza();		}else{			pizza = null;		}

如果将具体Pizza类的生成过程独立出去,单独封装,具体Pizza类将与PizzaStore类解耦:

public class PizzaStore {	public Pizza orderPizza(String type){		PizzaFactory pf = new PizzaFactory();		Pizza pizza = pf.createPizza(type);		return pizza;	}}
public class PizzaFactory {	public Pizza createPizza(String type){		Pizza pizza;		if(null != type && type == "Greek"){			pizza = new GreekPizza();		}else if(null != type && type == "Cheese"){			pizza = new CheesePizza();		}else{			pizza = null;		}		return pizza;	}}

具体Pizza类的变动将不再会对PizzaStore类产生影响,从某种意义上说,简单工厂将具体Pizza类的变化封装在工厂内部,对外提供始终如一的服务

Pizza类的生成流程不再是在PizzaStore类内部实现,而是抽象为一个工厂方法,提高了Pizza类生成流程的复用性

ps:

工厂方法的作用是实现类的提供者(PizzaStore)与具体类(CheesePizza、GreekPizza)之间的解耦

转载于:https://www.cnblogs.com/sean-zou/archive/2013/05/30/3710052.html

你可能感兴趣的文章
Gold Smith第一章
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
URL中的特殊字符处理
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
MVC3分页传2参
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>
通过被调函数改变主调函数的值
查看>>
java 对象的序列化与反序列化
查看>>
二叉树、树、森林
查看>>
查看端口占用cmd命令
查看>>
2019.01.17王苛震作业
查看>>
Halcon学习(八)文本操作
查看>>
MFC电子词典
查看>>