内容简介:在面向对象设计领域里,SOLID是非常经典的设计原则,可以认为它是道,设计模式是术,只有深刻理解了道,才能用好术。下面简单总结一下SOLID原则:下面以工厂模式为例,说明一下SOLID原则在设计模式里的体现:工厂模式属于创建型模式,主要分三种:
在面向对象设计领域里,SOLID是非常经典的设计原则,可以认为它是道,设计模式是术,只有深刻理解了道,才能用好术。下面简单总结一下SOLID原则:
- Single Responsibility Principle: 每个类只能有一个被修改的原因
- Open-Close Principle: 对扩展开发,对修改关闭
- Liskov's Substitution Principle: 派生类必须能够完全替换基类 Liskov's Substitution Principle(LSP)
- Interface Segregation Principle:客户端不应该被强制依赖他们不需要使用的接口
- Dependency Inversion Principle: 高层次的模块不应该依赖低层次的模块, 双方都应该依赖抽象。抽象不应该依赖具体细节。细节应该依赖抽象。 Dependency Inversion Principle
下面以工厂模式为例,说明一下SOLID原则在 设计模式 里的体现:
工厂模式属于创建型模式,主要分三种:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
个人觉得第三种模式使用场景较少且比较鸡肋,主要介绍前两种。
先来看下简单工厂模式:
public abstract class Operation{
private double value1;
private double value2;
public double getValue1() {
return value1;
}
public void setValue1(double value1) {
this.value1 = value1;
}
public double getValue2() {
return value2;
}
public void setValue2(double value2) {
this.value2 = value2;
}
protected abstract double getResult();
}
public class OperationAdd extends Operation {
@Override
protected double getResult(){
return getValue1() + getValue2();
}
}
public class OperationMinus extends Operation {
@Override
protected double getResult(){
return getValue1() - getValue2();
}
}
public class OperationMul extends Operation {
@Override
protected double getResult(){
return getValue1() * getValue2();
}
}
public class OperationFactory{
public static Operation createOperation(String operation){
Operation operation = null;
switch(operation){
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationMinus();
break;
case "*":
operation = new OperationMul();
break;
default:
throw new UnsupportedOperationException("Unsupported Operation:" + operation);
}
return operation;
}
}
首先,我们必须令Operation的派生类遵循Liskov's Substitution Principle,才能放心的说,无论我们在工厂中创建出哪种Operation的派生类,都能够利用多态替换其后对Operation的引用。
其次,工厂模式返回抽象类,使调用工厂的高层模块依赖Operation这个抽象类而不是其某个具体的派生类,这满足了Dependency Inversion Principle。
但是,OperationFactory类中包含了所有Operation派生类的创建,后面如果不断的需要增加新的Operation派生类,就需要不断的修改OperationFactory,这违反了Open-Close Principle,就需要引入工厂方法模式:
public interface IFactory {
Operation CreateOption();
}
public class AddFactory implements IFactory {
public Operation CreateOption() {
return new OperationAdd();
}
}
public class MulFactory implements IFactory {
public Operation CreateOption() {
return new OperationMul();
}
}
public class SubFactory implements IFactory {
public Operation CreateOption() {
return new OperationSub();
}
}
这样每当有新的Operation派生类,只需要对应新建新的工厂类就可以了,这其实也是将工厂类与其调用者用抽象层隔离了。但要注意这也会因为创建过多的类而难以管理。
以上所述就是小编给大家介绍的《SOLID设计原则与工厂模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- 简单工厂模式、工厂模式、抽象工厂模式的解析-iOS
- Swift中的工厂方法和抽象工厂
- Java 设计模式之工厂方法模式与抽象工厂模式
- 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
- 面向对象基本原则(1)- 单一职责原则与接口隔离原则
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
指数型组织
萨利姆•伊斯梅尔 (Salim Ismail)、迈克尔•马隆 (Michael S. Malone)、尤里•范吉斯特 (Yuri van Geest) / 苏健 / 浙江人民出版社 / 2015-8-1 / CNY 69.90
《指数型组织》是一本指数级时代企业行动手册。作者奇点大学创始执行理事萨利姆·伊斯梅尔归纳了指数型组织的11个强大属性,并提出了建立指数型组织的12个关键步骤。通过自己创建的一套“指数商”测试题,伊斯梅尔还测量出了指数型组织世界100强。 为什么小米、海尔和阿里巴巴能进入“指数型组织世界100强”名单?“独角兽”Uber、Airbnb、谷歌等知名企业是如何指数化自己的组织的? 未......一起来看看 《指数型组织》 这本书的介绍吧!