随笔分类
设计模式
类的创建型模式
工厂模式
简单工厂模式
类的创建型模式
静态工厂模式
通过专门定义一个类Factory来创建其他类的实例,被创建的实例具有共同的抽象父类
角色
Factory:
核心,负责实现创建所有市里的内部逻辑。可被外接直接调用,创建所需的产品对象
Product 抽象:基类抽象化
具体产品:即实例对象
public interface Car {
void makeCar();
}
public class benchi implements Car {
public benchi() {
this.makeCar();
}
@Override
public void makeCar() {
System.out.println("make benci!");
}
}
public class baoma implements Car {
public baoma() {
this.makeCar();
}
@Override
public void makeCar() {
System.out.println("make baoma!");
}
}
public class Factory {
public static Car makeCar(String type) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
// Car car = null;
// if (type.equals("baoma")){
// car = new baoma();
// }
// else if (type.equals("benci")){
// car = new benci();
// }
// return car;
// Class car = Class.forName(type);
// return (Car) car.newInstance();
//动态加载
return (Car)BeanUtils.instantiateClass(Class.forName(type));
}
}
/**
* 实现简单工厂模式
*/
public class Customer {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
String basePath = "com.mode.demo.mode.factories.easyFactory.";
Factory.makeCar(basePath+"benchi"); //make benci!
}
}
缺点:Factory里啥都创建,"高内聚",当系统中具体的产品类增多时,可能会进行相应修改,可见,扩展性差
新增产品,如果Factory里使用分支来进行进行对象实例的创建的话,那么原先的代码就会被修改了...
工厂方法模式
多态工厂模式
思想:
核心工厂抽象化,将实际产品创建实现拖延到其具体子类实现上去,子类来负责具体产品的实例化,当系统进行扩展新增新的产品对象时(此处针对的是同类别的),只需要新增一个具体的工厂对象及其产品对象即可
符合封闭开放原则,不修改以前代码,但可进行扩展
public class baomaFactory implements Factory{
@Override
public Car makeCar() {
return new baoma();
}
}
public class baomaFactory implements Factory{
@Override
public Car makeCar() {
return new baoma();
}
}
public class benchiFactory implements Factory{
@Override
public Car makeCar() {
return new benchi();
}
}
public interface Factory {
Car makeCar();
}
public class Customer {
public static void main(String[] args) {
Factory factory = new benchiFactory();
factory.makeCar(); //make benci!
}
}
抽象工厂模式
Abstract Factory
所有形态的工厂模式中最为抽象和最具有一般性的
能够创建多个产品族的对象
代码实现有多种,这里采用Factory新增方法实现新增产品族对象
也可Factory不变,对其具体实现子类新增族,如奔驰可以有南北之分,亦如人有男女老少之分(好吧,我承认我偷换概念了.jpg)...
public interface PC {
void makePC();
}
public class baomaPC implements PC{
public baomaPC() {
this.makePC();
}
@Override
public void makePC() {
System.out.println("make baomaPC!");
}
}
public class benchiFactory implements Factory {
@Override
public Car makeCar() {
return new benchi();
}
@Override
public PC makePC() {
return null;
}
}
public class baomaFactory implements Factory {
@Override
public PC makePC() {
return new baomaPC();
}
@Override
public Car makeCar() {
return new baoma();
}
}
public interface Factory {
Car makeCar();
PC makePC();
}
总结:抽象工厂中方法对应产品结构,具体工厂对应产品族