设计模式七大原则

为了让我们的代码 代码重用性高,可读性强(编程规范性),可扩展,可靠性(增加新功能对原来功能没影响),高内聚,低耦合需要有些原则

单一职责原则 

      主要意思就是一个类不要设计的复杂,只负责一项职责。避免复杂度。

二接口隔离原则

      当一个类A通过接口依赖另一个类B的时候 希望这个接口是最小的。(就是接口可以传递实现类)  

    比如:这个接口如果很多方法,类A很多是用不到的,要把接口拆成很多接口,让B实现A用到的那些方法的接口 (不是很懂)

 

   

二依赖倒转原则

 核心思想就是要细节依赖抽象的,低层模块都要有抽象类或者接口,变量也尽量是抽象类或接口(Interface A =new B();,有利于程序扩展,有一个缓存层,面向接口编程吧

   注意下平常使用的:依赖关系传递的三种方式:接口传递,构造方法传递,setter传递  (没啥 平时要说的时候说不定想不起来)

             

二里氏替换原则

  如何正常使用继承   

单例模式的实现 

 所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生。具体实现步骤如下:

      (1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。

      (2) 在其内部产生该类的实例化对象,并将其封装成private static类型。

      (3) 定义一个静态方法返回该类的实例。

/**
*
* 单例模式的实现:饿汉式,线程安全 但效率比较低
*/
public class SingletonTest {

private SingletonTest() {
}

private static final SingletonTest instance = new SingletonTest();

public static SingletonTest getInstancei() {
return instance;
}

}

/**
* 单例模式的实现:饱汉式,非线程安全
*
*/
public class SingletonTest {
private SingletonTest() {
}

private static SingletonTest instance;

public static SingletonTest getInstance() {
if (instance == null)
instance = new SingletonTest();
return instance;
}
}

/**
* 线程安全,但是效率非常低
* @author vanceinfo
*
*/
public class SingletonTest {
private SingletonTest() {
}

private static SingletonTest instance;

public static synchronized SingletonTest getInstance() {
if (instance == null)
instance = new SingletonTest();
return instance;
}
}

/**
* 线程安全 并且效率高
*
*/
public class SingletonTest {
private static SingletonTest instance;

private SingletonTest() {
}

public static SingletonTest getIstance() {
if (instance == null) {
synchronized (SingletonTest.class) {
if (instance == null) {
instance = new SingletonTest();
}
}
}
return instance;
}
}

2.工厂设计模式

https://blog.csdn.net/zouxucong/article/details/77527980

https://www.jianshu.com/p/d951ac56136e

主要角色
工厂:负责实现创建所有实例的内部逻辑,并提供一个外界调用的方法,创建所需的产品对象。
抽象产品:负责描述产品的公共接口
具体产品:描述生产的具体产品。
举个简单易懂的例子:
“假设”有一台饮料机(工厂),可以调出各种口味的饮料(抽象产品),有三个按钮(参数)对应这三种饮料(具体产品)。这时候你可以根据点击按钮来选择你喜欢的饮料。
 
 

3 建造者模式

建造一个复杂的对象

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,比如组装主机的例子。不同的内存,不同的显卡等 或者还有不同的顺序 都创建不同的主机

比如建造房子来说,其实就是不同的水泥,不同的油漆,不同的位置 ,还需要指挥长包工头 可以创建不同的房子。

抽象建造者(builder):描述具体建造者的公共接口,一般用来定义建造细节的方法,并不涉及具体的对象部件的创建。

具体建造者(ConcreteBuilder):描述具体建造者,并实现抽象建造者公共接口。

指挥者(Director):调用具体建造者来创建复杂对象(产品)的各个部分,并按照一定顺序(流程)来建造复杂对象。

产品(Product):描述一个由一系列部件组成较为复杂的对象。

https://www.jianshu.com/p/47329a94f5dc

4 观察者模式
https://www.jianshu.com/p/42b1fc6c7b87

(1)一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。

(2)一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。

(3)一个对象必须通知其他对象,而并不知道这些对象是谁。

(4)需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。


1、创建具体被观察者(学校广播)继承抽象 被观察者

2、创建具体观察者(学生)继承抽象观察者

3、绑定联系

4、发送通知

原文地址:https://www.cnblogs.com/ningkuan/p/12483325.html