简单工厂(创建型)
来源:互联网 发布:mac版华彩人生1点通 编辑:程序博客网 时间:2024/05/03 22:29
简单工厂模式
创建型模式,用于对象的创建,它不属于23种设计模式。它是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
适用场景
1工厂类负责创建的对象比较少
2客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心
3由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用
结构类型
优缺点
优点:简单工厂模式主要用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系会导致软件的脆弱。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
head_first结构
系统结构
具体产品
-----------------------------------------------------------------------------------------------------
public class ChessPizza extends Pizza { public ChessPizza(){ this.name="ChessPizza"; }}-----------------------------------------------public class ClamPizza extends Pizza { public ClamPizza(){ this.name="ClamPizza"; }}
------------------------------------------------------------------------
简单工厂
---------------------------------------------------------------------
public class SimplePizzaFactory {Pizza pizza=null;public Pizza createPizza(String type) {// TODO Auto-generated method stubif(type.equals("chess")){pizza=new ChessPizza();}else if(type.equals("clam")){pizza=new ClamPizza();}return pizza;}}
---------------------------------------------------------------------
抽象产品
--------------------------------------------------------------
public class Pizza { protected String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void prepare(){ System.out.println("prepare");}public void bake(){System.out.println("bake");} public void box(){System.out.println("box");} public void print(){System.out.println(name);}}
------------------------------------------------------
客户类
-----------------------------------------------------
public class PizaStore {private SimplePizzaFactory simplePizzaFactory;public PizaStore(SimplePizzaFactory simplePizzaFactory){this.simplePizzaFactory=simplePizzaFactory;} public Pizza orderPizza(String type){Pizza pizza;pizza=simplePizzaFactory.createPizza(type);pizza.prepare();pizza.bake();pizza.box();return pizza;}}
-----------------------------------------------------------
测试类
---------------------------------------------------------
public class Testc {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSimplePizzaFactory simplePizzaFactory =new SimplePizzaFactory();PizaStore pizaStore =new PizaStore(simplePizzaFactory);Pizza pizza=pizaStore.orderPizza("chess");pizza.print();}}
-----------------------------------------------------------
测试结果
prepare
bake
box
ChessPizza
bake
box
ChessPizza
0 0
- 简单工厂(创建型)
- 创建型模式-简单工厂
- 创建型模式-简单工厂
- 简单工厂模式[创建型]
- 创建型模式_简单工厂
- 设计模式--创建型--简单工厂
- 创建型模式之简单工厂模式
- 创建型模式-----简单工厂模式
- 设计模式-创建型01-简单工厂
- 创建型设计模式:简单工厂模式
- 创建型-简单工厂simple factory
- 创建型——简单工厂模式
- 创建型模式之简单工厂模式
- Java简单工厂模式-创建型
- 创建型设计模式-简单工厂模式
- 创建型模式-简单工厂方法(simple_factory)
- 简单工厂模式-创建型模式
- 创建型模式—简单工厂模式
- hdu3306Interesting Yang Yui Triangle+LUCAS定理
- iOS开发 使用UIImagePicker从相机或相册获取图片并裁剪
- 字符流(读)案例
- 数据挖掘知识图谱(大数据分析师)
- 循环单链表的合并
- 简单工厂(创建型)
- 非负整数的O(n)基数排序
- python添加xls表格数据入库注意字符串转换
- 记一个 bitmap位图压缩。
- 在一个字符串中找到出现指定次数的字符,根据用户输入次数,打印出现次数为该次数的字符。如输入abaccedff及1,则输出:b e d 如输入abaccedff及2,则输出:a c f
- source insight 多文件并行显示
- 第一行代码笔记,第十章------网络的世界
- Struts Problem Report:org.hibernate.QueryException: could not resolve property: ?? of: com.zyc.xxx
- snoopy采集(自己写的)