设计模式-工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
来源:互联网 发布:电脑无损播放软件 编辑:程序博客网 时间:2024/05/16 18:41
工厂模式可以分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
区别 :
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。(翻译:一个宝马,可以有很多品牌)
一个抽象工厂类,可以派生出多个具体工厂类。 (翻译:一个宝马工厂,有专门造3系的,造5系的不同工厂)
每个具体工厂类只能创建一个具体产品类的实例。(翻译:3系的宝马工厂,只能造3系的车)
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
两者皆可。
简单工厂示例:
产品类:
abstract class BMW { public BMW(){ } } public class BMW320 extends BMW { public BMW320() { System.out.println("制造-->BMW320"); } } public class BMW523 extends BMW{ public BMW523(){ System.out.println("制造-->BMW523"); } }工厂类:
public class Factory { public BMW createBMW(int type) { switch (type) { case 320: return new BMW320(); case 523: return new BMW523(); default: break; } return null; } }
客户类:
public class Customer { public static void main(String[] args) { Factory factory = new Factory(); BMW bmw320 = factory.createBMW(320); BMW bmw523 = factory.createBMW(523); } }
打印结果:
制造宝马320系列宝马车
制造宝马523系列宝马车
产品类:
abstract class BMW { public BMW(){ } } public class BMW320 extends BMW { public BMW320() { System.out.println("制造-->BMW320"); } } public class BMW523 extends BMW{ public BMW523(){ System.out.println("制造-->BMW523"); } }
工厂类:
interface FactoryBMW { BMW createBMW(); } public class FactoryBMW320 implements FactoryBMW{ @Override public BMW320 createBMW() { return new BMW320(); } } public class FactoryBMW523 implements FactoryBMW { @Override public BMW523 createBMW() { return new BMW523(); } }
客户类:
public class Customer { public static void main(String[] args) { FactoryBMW320 factoryBMW320 = new FactoryBMW320(); BMW320 bmw320 = factoryBMW320.createBMW(); FactoryBMW523 factoryBMW523 = new FactoryBMW523(); BMW523 bmw523 = factoryBMW523.createBMW(); } }
抽象模式示例:
产品类:
//发动机以及型号 public interface Engine { } public class EngineA extends Engine{ public EngineA(){ System.out.println("制造-->EngineA"); } } public class EngineBextends Engine{ public EngineB(){ System.out.println("制造-->EngineB"); } } //空调以及型号 public interface Aircondition { } public class AirconditionA extends Aircondition{ public AirconditionA(){ System.out.println("制造-->AirconditionA"); } } public class AirconditionB extends Aircondition{ public AirconditionB(){ System.out.println("制造-->AirconditionB"); } }工厂类:
//创建工厂的接口 public interface AbstractFactory { //制造发动机 public Engine createEngine(); //制造空调 public Aircondition createAircondition(); } //为宝马320系列生产配件 public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } } //宝马523系列 public class FactoryBMW523 implements AbstractFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } }客户:
public class Customer { public static void main(String[] args){ //生产宝马320系列配件 FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); //生产宝马523系列配件 FactoryBMW523 factoryBMW523 = new FactoryBMW523(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); } }
1.简单工厂模式简要;
一个工厂方法(传一个参数320/523的值){
switch判断,去具体某一种车型
}
工厂方法模式简要:
建一个工厂接口:分别继承它
创建3系宝马车工厂.
创建5系宝马车工厂
面对客户的需求:
什么系工厂造什么系车
抽象工厂模式简要:
发动机接口类
继承它建A型发动机类
继承它建B型发动机类
空调接口类
继承它建A型空调类—>+建造的方法
继承它建B型空调类—>+建造的方法
接口工厂{
1.造发动机
2.造空调
}
继承接口工厂 3系工厂{
造发动机()
造空调()
}
继承接口工厂 5系工厂{
造发动机()
造空调()
}
客户:
3系宝马车工厂对象.造发动机
3系宝马车工厂对象.造空调
5系宝马车工厂对象.造发动机
5系宝马车工厂对象.造空调
我们使用工厂模式最终的目的是为了:解耦,降低耦合度.
作者:jason0539
博客:http://blog.csdn.net/jason0539
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- 设计模式(简单工厂模式,工厂模式,抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式-工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式理解之工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂|工厂方法|抽象工厂模式
- Spring常用工具类
- 有趣的小技巧——换图标
- C语言中常见的7种条件编译语句
- 2015年版温铭:OpenResty的现状、趋势、使用及学习方法
- 初学php环境搭建集锦
- 设计模式-工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 为文本摘要网络Pointer-Generator Networks制作中文复述训练数据
- caffe中train_val.prototxt和deploy.prototxt文件的区别
- HDU 2546 饭卡
- python random.shuffle()
- 基于Java形式的Mybatis逆向工程(无配置文件,生成注释)
- java 中 int 类型的取值范围
- [LeetCode] DP 之 Maximum Length of Repeated Substring
- 服务器端解决跨域问题的三种方法