设计模式一:简单工厂模式
概念理解:
1. 解耦:一般通过增加一些抽象层,来实现 功能提供者和功能使用者 两者的解耦隔离。而如果想要扩展功能即增加功能,只需要添加相应的相应的新的功能类,修改中间的抽象类即可,并不用修改使用者部分的代码。并且功能提供者的代码可以复用。而且使得程序更容易理解。
简单工厂模式介绍
一.什么是简单工厂模式?
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个子类(这些子类继承 自一个父类或接口)的实例。
二.简单工厂模式包含的角色:
1.工厂角色(工厂类): 它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
2.抽象产品角色: 简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
3.具体产品角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。
三.简单工厂模式的类图
四.深入分析
1.核心思想: 有一个专门的类来负责创建实例的过程。
2. 优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
3.缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 也就违背了“开放封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则 (2)
4. 总结一下:简单工厂模式分离产品的创建者和消费者,有利于软件系统结构的优化;但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违 背了“开放封闭原则”。另外,简单工厂模式的方法一般都是静态的,而静态工厂方法是无法让子类继承的,因此,简单工厂模式无法形成基于基类的继承树结构。
5.使用场景:
工厂类负责创建的对象比较少;
客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
五.代码
题目:模拟计算器
// 创建抽象产品类(父类)
class Operate{
int numA;
int numB;
public getNumA(){
return numA;
}
public setNumA(int num){
numA = num;
}
public getNumB(){
return numB;
}
public setNumB(int num){
numB = num;
}
public int getResult(){}
}
// 创建具体产品类
class Add extends Operate{
public int getResult(){
return numA + numB;
}
}
class Sub extends Operate {
public int getResult(){
return numA - numB;
}
}
class Mul extends Opreate{
public int getResult(){
return numA * numB;
}
}
class Div extends Opreate{
public int getResult(){
if(0 == numB){
System.out.println("除数不能为0");
return 0;
}
return numA / numB;
}
}
class OperateFactory{
public static Operate createOperate(String operate){
OPerate op = null;
switch(operate){
case "+":{
op = new Add();
}break;
case "-":{
op = new Sub();
}break;
case "*":{
op = new Mul();
}break;
case "/":{
op = new DIV();
}break;
deafult:break;
}
return op;
}
}