1、介绍工厂方法的详解与实现
package com.behavior_model.gongchang;
/**
*
* @author pshdhx
* 实现了创建者和调用者的分离。
* 核心本质:用工厂方法代替new操作,将选择实现类,创建对象统一管理和控制,从而将调用者跟我们实现类解耦合
* 详细分类:
* 简单工厂模式,用来生成同一等级结构中的任意产品,对于增加的新产品,需要修改已有代码
* 工厂方法模式,用来生产同一等级结构中的固定产品,支持新增产品。
* 抽象工厂模式,用来生产不同产品族的全部产品,对于新增产品无能为力,支持增加产品族
* 面向对象设计的基本原则
* OCP:开闭原则,一个软件的实体应当对扩展开放,对修改关闭;
* DIP:依赖倒转原则,要针对接口编程,不要针对实现编程
* lod:迪米特法则:只与你直接的朋友通信,而避免和陌生人通信。
*
*/
public class FactoryModel {
}
interface Car{
void run();
}
class Audi implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("创建奥迪");
}
}
class Byd implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("创建比亚迪");
}
}
package com.behavior_model.gongchang;
/**
* 简单工厂模式的实现
* @author 将类的创建与调用分离
* 因为简单工厂的方法都是静态的,所以也叫做静态工厂
* 通过接受不同的参数返回不同的对象,或者调用不同的方法返回不同的对象
* 但是:【对于增加新产品无能为力,不修改代码的话是无法扩展的===简单且常用】
*
*/
public class SimpleFactory {
public static Car CreateCar(String type){
if("比亚迪".equals(type)){
return new Byd();
}else if("奥迪".equals(type)){
return new Audi();
}else{
return null;
}
}
public static Car CreateAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}
package com.behavior_model.gongchang;
/**
*
* @author pshdhx
*
*/
public class Client {
public static void main(String[] args) {
//没有工厂模式调用,此时,main直接与 Car Audi Byd发生关系
Car c1 = new Audi();
Car c2 = new Byd();
c1.run();
c2.run();
Car aodi = SimpleFactory.CreateCar("奥迪"); //main直接与工厂方法发生关系,与audi,比亚迪没关系
Car biyadi = SimpleFactory.CreateCar("比亚迪");
aodi.run();
biyadi.run();
}
}