工厂模式的好处:
交由工厂类进行统一的管理,方便维护,无需对每个对象进行处理,更改业务可以在工厂类中进行。降低开发的耦合度。
缺点:
每增加一个业务,需要增加对应的子工厂类,加大开发量;
例子:创建接口类
package com.cjs.springtest.designpatterns.factorymodel;
/**
* 接口类,
*/
public interface IDoSomThing {
void doSometing();
}
实现两个业务类:
package com.cjs.springtest.designpatterns.factorymodel;
/**
* 某个业务实现方式
*/
public class DoJump implements IDoSomThing{
@Override
public void doSometing() {
System.out.println("do jump...");
}
}
package com.cjs.springtest.designpatterns.factorymodel;
/**
* 某个业务处理逻辑
*/
public class DoRun implements IDoSomThing {
@Override
public void doSometing() {
System.out.println("do running...");
}
}
创建调用类:
package com.cjs.springtest.designpatterns.factorymodel;
import lombok.Getter;
import lombok.Setter;
/**
* 一个人要做一些事情
*/
@Getter
@Setter
public class Person {
String name;
String number;
Integer age;
/*
*个人类中,要做不同的事情,需要自己去new 不同的对象
* 建立工厂类,把这个创建实例交由工厂管理
*
*
*
*/
public void doRun(){
IDoSomThing doSomThing=new DoRun() ;
doSomThing.doSometing();
}
public void doJump(){
IDoSomThing doSomThing=new DoJump();
doSomThing.doSometing();
}
/**
* 工厂类统一管理
*/
public void doSomeThing(String someThing){
IDoSomThing run=SomthingFactory.getDoSomeThing(someThing);
run.doSometing();
}
}
创建工厂类:
package com.cjs.springtest.designpatterns.factorymodel;
public class SomthingFactory {
public static IDoSomThing getDoSomeThing(String someThing){
if("run".equals(someThing)){
return new DoRun();
}
else {
return new DoJump();
}
}
}
比较简单。
测试类:
package com.cjs.springtest.designpatterns.factorymodel;
public class Test {
public static void main(String[] args) {
Person person=new Person();
person.doJump();
person.doRun();
System.out.println("-----------------");
person.doSomeThing(“run”);
person.doSomeThing(“fly”);
}
}
打印的结果: