设计模式初探之静态工厂模式
来源:互联网 发布:gov.cn域名注册 编辑:程序博客网 时间:2024/06/06 04:48
静态工厂模式也叫简单工厂模式。简单的说就是通过工厂类去创建产品(类),而不是让客户自己去创建产品(类)。这样带来的好处就是,让我们写出的代码更符合单一职责原则。客户类只要一个产品的对象,并不关心产品如何创建。而工厂类也只负责创建产品。
简单工厂涉及到几个元素产品抽象、具体产品、还有工厂,类图如下:
我们就以创建一辆汽车为例。现在我们有一个抽象的产品汽车,所以我们定义一个汽车的接口
package com.cat;public interface Cat {public void run();}定义具体的产品,宝马汽车
package com.cat;public class Bmw implements Cat {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("宝马,跑起来");}}
奥迪汽车
public class Audi implements Cat {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("奥迪,跑起来");}}
按照我们原来的写法,即客户去创建具体的产品
public class Client{public static void main(String[] arg){Cat bmw = new Bmw();bmw.run();Cat audi = new Audi();audi.run();}}
现在我们用简单的工厂模式去做这样一个过程,显然,我们只需要新增一个工厂类
package com.cat;public class CatFactory {public static Cat createCat(String catName){Cat mCat = null;switch (catName) {case "Bmw":mCat = new Bmw();break;case "Audi":mCat = new Audi();break;}return mCat;}}
这样下来,具体的产品创建就交给了工厂去创建,客户只需对工厂说我需要一辆宝马,工厂就会给客户创建一俩宝马并返回给客户
public class Client{ public static void main(String[] arg){ Cat bmw = CatFactory.createCat("Bmw");bmw.run();} }这么简单就实现简单工厂模式,哈哈,就是这么简单,然而,然而,这代码就完美了么,仔细想想,如果我们要新增一个奔驰汽车,这是,我们需要新增一个具体的奔驰汽车类,还需要修改CatFactory,汽车工厂类(这犯了开放-封闭原则的大忌啊)。
开放-封闭原则:软件实体应该是可扩展的,而不可修改,也就是说,对扩展是开放的,对修改则是封闭的(来自百度百科)
精髓就是,对程序的改动,最好是通过新增代码,而不去修改原先已经稳定正常的代码(这里有一点风险,意味着修改可能会对以前的功能造成影响)。
原来如此,那我们改怎么让我们新增奔驰汽车,只需新增奔驰汽车的具体产品,不需要修改工厂及之前的具体产品呢?答案就是反射。工厂类通过反射创建对象,当我们新增产品是就不需要修改工厂。我们将汽车工厂类修改为如下。
public class CatFactory {//汽车类的路径public static String catPath = "com.cat";//具体汽车品牌通过catName传进来public static Cat createCat(String catName){Cat mCat = null;String catDetailPath = catPath+catName;try {Class<Cat> catClazz = (Class<Cat>) Class.forName(catDetailPath);mCat = catClazz.newInstance();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return mCat;}}这是我们无论新增什么汽车品牌,新增多少品牌都无需去改动原来的代码了,只需要新增具体的产品。
package com.cat;public class Benz implements Cat{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("奔驰,跑起来!");}}
public class Client{ public static void main(String[] arg){ Cat benz = CatFactory.createCat("Benz");bmw.run();} }
静态工厂方法模式是一种相对简单的模式,也是我们编程是常用的模式。优点就是
1、可以让客户不用知道具体对象的创建过程,而直接拿到具体对象。
2、客户只需知道抽象产品,不需知道具体产品,这才一定程度上让客户和具体产品解耦。
网上关于静态工厂模式的更多文章: 简单工厂模式详解
如发现错误,请不吝赐教,后续将带来更多的设计模式。
阅读全文
0 0
- 设计模式初探之静态工厂模式
- 设计模式初探之工厂方法模式
- 设计模式之静态工厂模式
- 设计模式之静态工厂模式
- JAVA设计模式之工厂模式(静态工厂模式)
- 设计模式--静态工厂
- 静态工厂设计模式
- 设计模式-静态工厂
- 设计模式之静态工厂的使用
- 设计模式初探-抽象工厂模式
- 设计模式初探-工厂方法模式
- 设计模式初探—简单工厂模式
- 设计模式初探之一------工厂模式
- 设计模式初探-工厂方法模式
- 设计模式初探-抽象工厂模式
- 设计模式之工厂模式之静态工厂方法模式(三)
- 设计模式(2) 静态工厂
- Android之大话设计模式--简单工厂模式(静态工厂方法模式)
- hdu 2766
- Freemarker(ftl)
- Angular实现购物车
- C语言实现队列
- 201709-2
- 设计模式初探之静态工厂模式
- 洛谷 1215 [USACO1.4]母亲的牛奶 Mother's Milk
- Python爬虫百度照片
- 安卓自定义密码编辑器
- JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC
- 【Anaconda】conda环境管理和包管理
- 【NOIP2017提高A组模拟10.10】Permutation
- LRecyclerView(RecyclerView)下拉刷新和上拉加载
- NKOJ 4191 Trie (状压dp)