• 设计模式七大原则


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

    单一职责原则 

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

    二接口隔离原则

          当一个类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、发送通知

  • 相关阅读:
    AE计算Tin的体积
    Create a Geometric Network and Set Flow Direction
    为什么查询的时候只能获取FID字段
    美国白蛾入侵北京 GIS兵法破解危局
    字段排序
    如何对ArcSDE空间网格大小进行优化?
    How to create a geodatabase network dataset
    抗击海冰 地理信息系统来帮忙
    控件图片生成网站
    Pascal 之(冒泡排序)
  • 原文地址:https://www.cnblogs.com/ningkuan/p/12483325.html
Copyright © 2020-2023  润新知