设计模式02-工厂模式
来源:互联网 发布:互联网金融发展 知乎 编辑:程序博客网 时间:2024/04/30 17:50
目的
工厂模式主要是为创建对象提供一些过渡接口,将创建对象的具体过程对外部屏蔽隔离起来,以达到较高的灵活性的目的
分类
工厂模式主要分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。
将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。
区别
关系图
简单工厂模型
一个工厂类
一个抽象产品类
多个具体产品类
工厂模型
一个抽象工厂类
一个抽象产品类
多个具体工厂类和多个具体产品类
一个具体工厂类对应一个具体产品类
抽象工厂模型
一个抽象工厂类
多个抽象产品类
一个抽象工厂类对应多个具体工厂类
一个抽象产品类对应多个具体产品类
一个具体工厂类对应多个具体产品类
实例
简单工厂类
//一个抽象产品类abstract class Car { public Car(){ } } //一个具体产品类 public class BMW extends Car { public BMW() { System.out.println("制造-->BMW"); } }//一个具体产品类 public class Porsche extends Car{ public Porsche(){ System.out.println("制造-->Porsche"); } } //一个工厂类public class Factory { public BMW createBMW(Car type) { if(null == type){ return null; }else if(type instanceOf BMW){ return new BMW(); }else if(type instanceOf Porsche){ return new Porsche(); }else { return null; } } }
工厂类
//一个抽象产品类abstract class Car { public Car(){ } } //一个具体产品类 public class BMW extends Car { public BMW() { System.out.println("制造-->BMW"); } }//一个具体产品类 public class Porsche extends Car{ public Porsche(){ System.out.println("制造-->Porsche"); } } //一个抽象工厂类interface FactoryCar { Car createCar(); } //一个具体工厂类对应一个具体产品 public class FactoryBMW implements FactoryCar{ @Override public Car createBMW() { return new BMW(); } } //一个具体工厂类对应一个具体产品 public class FactoryPorsche implements FactoryCar { @Override public Car createCar() { return new Porsche(); } }
抽象工厂类
//一个抽象工厂类,定义了生产族产品的方法; public interface AbstractFactory { public ProductA factoryA(); public ProductB factoryB(); //抽象产品A定义了产品的公共方法,产品A和B属于一个产品族 public interface ProductA { public void method1(); public void method2(); } //抽象产品B定义了产品的公共方法,产品A和B属于一个产品族 public interface ProductB { public void method1(); public void method2(); } //一个抽象产品对应多个具体产品:等级为1的具体产品A public class ConcreateProductA1 implements ProductA { @Override public void method1() { // TODO Auto-generated method stub System.out.println("等级为1的产品A的method1()"); } @Override public void method2() { // TODO Auto-generated method stub System.out.println("等级为1的产品A的method2()"); } } //一个抽象产品对应多个具体产品:等级为2的具体产品A public class ConcreateProductA2 implements ProductA { @Override public void method1() { // TODO Auto-generated method stub System.out.println("等级为2的产品A的method1()"); } @Override public void method2() { // TODO Auto-generated method stub System.out.println("等级为2的产品A的method2()"); } } //一个抽象产品对应多个具体产品:等级为1的产品B public class ConcreateProductB1 implements ProductB{ @Override public void method1() { // TODO Auto-generated method stub System.out.println("等级为1的产品B的method1()"); } @Override public void method2() { // TODO Auto-generated method stub System.out.println("等级为1的产品B的method2()"); } } //一个抽象产品对应多个具体产品:等级为2的产品B public class ConcreateProductB2 implements ProductB { @Override public void method1() { // TODO Auto-generated method stub System.out.println("等级为2的产品B的method1()"); } @Override public void method2() { // TODO Auto-generated method stub System.out.println("等级为2的产品B的method2()"); } } //一个抽象工厂对应多个具体工厂,一个具体工厂对应多个具体产品:ConcreateFactory1是用来生产等级为1的产品A,B; public class ConcreateFactory1 implements AbstractFactory { //生产等级为1的产品A @Override public ProductA factoryA() { // TODO Auto-generated method stub return new ConcreateProductA1(); } //生产等级为1的产品B @Override public ProductB factoryB() { // TODO Auto-generated method stub return new ConcreateProductB1(); } }//一个抽象工厂对应多个具体工厂,一个具体工厂对应多个具体产品:public class ConcreateFactory2 implements AbstractFactory { //生产等级为2的产品A @Override public ProductA factoryA() { // TODO Auto-generated method stub return new ConcreateProductA2(); } //生产等级为2的产品B @Override public ProductB factoryB() { // TODO Auto-generated method stub return new ConcreateProductB2(); } }
总结
阅读全文
0 0
- 设计模式02-工厂模式
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- java基础知识点
- 对上一篇jni的纠正把
- 最小生成树
- 二叉搜索树(遍历不递归,不用栈)
- QT中读写文件操作
- 设计模式02-工厂模式
- 【CodeForces 713A】
- JDBC连接mysql
- 单例模式的c++实现
- maven项目 错误: 找不到或无法加载主类
- PAT甲级 1122. Hamiltonian Cycle (25)
- 从零搭建Hadoop集群
- C++primer -2
- 第3课 03 JS中级课程-事件流-事件冒泡机制-3