设计模式读书笔记

七星棋牌顶级运营产品全开源修复版源码教程:6端支持,200+子游戏玩法,完整搭建指南(含代码解析) 让您从源码下载到本地运行一步到位!此外,文中还将附带详细代码解析与操作步骤,即便没有开发经验,也能轻松完成二开与定制。数据库是棋牌游戏中极为关键的组成部分,用于存储用户信息、乐豆余额、游戏记录、提现申请等数据。以下是部分核心数据表结构示例,便于存储用户信息与游戏记录。AI模块能够控制游戏中的胜率,常用于调节玩家体验。防沉迷功能旨在限制未成年人游戏时间。的完整搭建流程,特别适合。首先,获取七星棋牌源码。本教程将为您详细讲解。 阅读详情

1. 策略模式

1. 定义

策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

2. 示例代码

每个鸭子都会引用实现QuackBehavior接口的对象,鸭子对象不亲自处理呱呱叫行为,而是委托给quackBehavior引用的对象

public class Duck {
	QuackBehavior quackBehavior;

	public void performQuack() {
		quackBehavior.quack();
	}
}

3. 优缺点

优点

  • 算法可以自由切换
  • 避免使用多重条件判断
  • 扩展性良好

缺点

  • 策略类会增多

2. 观察者模式

1. 定义

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

2. 示例代码

被观察者可以通过registerObserver和removeObserver注册和移除观察自己的观察者,当自身发生变化时(setChanged可增加附加条件),可以调用notifyObservers通知观察者,调用观察者的update方法

public interface Observerable {
	public void registerObserver(Observer o);
	public void removeObserver(Observer o);
	public void notifyObservers();
	public void setChanged();
}

public interface Observer {
	public void update();
}

3. 优缺点

优点

  • 观察者和可观察者之间用松耦合方式结合
  • 建立的一套事件触发机制

缺点

  • 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃
  • 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化

3. 装饰者模式

1. 定义

动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性地替代方案。

2. 示例代码

将对象传入beverage装饰者构造函数中,返回一个包装后的新对象Mocha,当调用原来的cost方法时,新的价格被自动添加到原来的价格,因此可以多次传入到不同的装饰者中进行链式包装。

public class Mocha extends CondimentDecorator {
	Beverage beverage;
	public Mocha(Beverage beverage) {
		this.beverage = beverage;
	}

	public double cost() {
		return 0.2 + beverage.cost();   //装饰原来的cost方法
	}
}


3. 优缺点

优点

  • 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式

缺点

  • 多层装饰增加了类的复杂程度
  • 过多的装饰类会使程序变得很复杂

4. 工厂模式

1. 定义

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类。

2. 示例代码

public abstract class PizzaStore {
	public Pizza orderPizza(String type) {
		Pizza pizza;
		pizza = createPizza(type);
		return pizza;
	}
	
	//实例化披萨的责任被转移到一个方法中,此方法就如同一个工厂
	protected abstract Pizza createPizza(String type);  
}

public class NYPizzaStore extends PizzaStore{   //子类具体实现该方法
	Pizza createPizza(String item) {
		if (item.equals("cheese")) {
			return new NYStyleCheesePizza();
		} else {
			return new NYStyleNormalPizza();
		}
	}; 

}


3. 优缺点

优点

  • 一个调用者想创建一个对象,只要知道其名称就可以了
  • 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以
  • 屏蔽产品的具体实现,调用者只关心产品的接口

缺点

  • 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加

5. 抽象工厂模式

1. 定义

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

2. 示例代码

通过构造函数传入原料工厂,Pizza类与区域原料之前解耦,可以轻松地复用。

public interface PizzaIngredientFactory {   //定义一个原料工厂接口
	public Dough createDough();
	public Sauce createSauce();
	public Cheese createCheese();
}

public class NYPizzaIngreFactory extends PizzaIngredientFactory	{   //使用工厂方法实例化具体工厂
	public Dough createDough() {
		return new ThinCrustDough();
	}
	
	public Sauce createSauce() {
		....
	}
	
	...
}

public class CheesePizza extends Pizza {
	PizzaIngredientFactory ingredientFactory;

	public CheesePizza (PizzaIngredientFactory ingredientFactory) {
		this.ingredientFactory = ingredientFactory;   //将工厂传入构造函数参数存储起来
	}

	void prepare() {
		dough = ingredientFactory.createDough();
		sauce = ingredientFactory.createSauce();
		cheese = ingredientFactory.createCheese();
	}
}


3. 优缺点

优点

  • 客户从具体的产品中解耦,利用抽象接口来创建一组相关的产品,而不关心实际产出的具体产品

缺点

  • 产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码

4. 工厂模式和抽象工厂模式的区别

  • 工厂模式使用继承,而抽象工厂则通过对象的组合来创建对象
  • 抽象工厂通过抽象的接口来创建一个产品家族,其将一群相关的产品集合起来,其内部经常使用工厂方法来实现具体工厂。

6. 单件模式

1. 定义

确保一个类只有一个实例,并提供一个全局访问点。

2. 示例代码

将构造器声明变为私有的,类外部只有运用getInstance()方法实例化对象。getInstance() 方法中需要使用同步锁 synchronized 防止多线程同时进入造成 instance 被多次实例化

public class Singleton{
	private static Singleton uniqueInstance;
	private Singleton() {
		public static Singleton getInstance() {
			if (uniqueInstance == null) {
				uniqueInstance = new Singleton();
			}
			return uniqueInstance;
		}
	}
}


3. 优缺点

优点

  • 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例
  • 避免对资源的多重占用(比如写文件操作)

缺点

  • 没有接口,不能继承

7. 命令模式

1. 定义

将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持撤销的操作

2. 示例代码

命令对象提供一个execute方法,这个方法封装了接收者的一些动作,调用这个方法就会调用这些动作。客户在调用者对象上调用setCommand方法,并把它传入命令对象。命令对象被存储调用者对象中,等待调用者在某个时间调用命令对象的execute方法。

public interface Command {
	public void execute();
}

public class LightOnCommand implements Command {  //亮灯操作
	Light light;

	public LightOnCommand(Light light) {
		this.light = light;
	}

	public void execute() {   
		light.on();
	}
	
	public void undo() {   //亮灯的撤销操作
		light.off();
	}
}


public class SimpleRemoteControl {
	HashMap<String, Command> slot = new HashMap<String, Command>();  //将命令存储在hashmap中
	Command preCommand;   //这里为了简化功能,用一个变量存储上一次执行的命令,实际应用可用栈记录更多历史命令

	public SimpleRemoteControl() {}

	public void setCommand(Command command, String type) {   //传入命令对象,并保存在调用对象内
		slot.put(type, command);
	}

	public void buttonWasPressed(String type) {   //调用命令对象的命令
		preCommand = slot.get(type)
		preCommand.execute();
	}
	
	public void undoButtonPressed() {
		preCommand.undo();   
	}
}

3. 优缺点

优点

  • 降低了系统耦合度
  • 新的命令可以很容易添加到系统中去

缺点

  • 增加了过多的命令类

8. 适配器模式

1. 定义

将一个类的接口,转换为客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器包含对象适配器和类适配器两种,其中类适配器通过多重继承的方法实现,其不需要重新实现整个被适配者。

2. 示例代码

下面包含鸭子和火鸡两个类,下面代码将火鸡包装成鸭子,使用户像使用鸭子一样来使用火鸡

public interface Duck {
	public void quack();
	public void fly();
}

public class MallardDuck implements Duck {   //鸭子类
	public void quack() {
		System.out.println("Quack");
	}
	
	public void fly() {
		System.out.println("I’m flying");
	}
}

public interface Turkey {
	public void gobble();
	public void fly();
}

public class WildTurkey implements Turkey {   //火鸡类
	public void gobble() {
		System.out.println("Gobble");
	}
	
	public void fly() {
		System.out.println("I’m flying a short distance");
	}
}

public class TurkeyAdapter implements Duck {   //对象适配器。将火鸡包装成鸭子
	Turkey turkey

	public TurkeyAdapter(Turkey turkey) {
		this.turkey = turkey;
	}
	
	public void quack() {
		turkey.gobble();
	}

	public void fly() {
		turkey.fly();
	}
}

3. 优缺点

优点

  • 提高了类的复用
  • 灵活性好

缺点

  • 过多地使用适配器,会让系统非常零乱,不易整体进行把握

9. 外观模式

1. 定义

提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

2. 示例代码

外观类通过组合的方式,将对象保存在自身内部,然后构造一个高层接口,提供给客户使用

public interface Shape {
   void draw();
}

public class Rectangle implements Shape {
   @Override
   public void draw() {
      System.out.println("Rectangle::draw()");
   }
}

public class Square implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Square::draw()");
   }
}

public class Circle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("Circle::draw()");
   }
}

public class ShapeMaker {   
   private Shape circle;
   private Shape rectangle;
   private Shape square;
 
   public ShapeMaker() {
      circle = new Circle();
      rectangle = new Rectangle();
      square = new Square();
   }
 
   public void drawCircle(){
      circle.draw();
   }
   public void drawRectangle(){
      rectangle.draw();
   }
   public void drawSquare(){
      square.draw();
   }
}

3. 优缺点

优点

  • 减少系统相互依赖
  • 提高灵活性
  • 提高了安全性

缺点

  • 如果子系统经常变化,还需要修改外观类,比较麻烦

10. 模板方法模式

1. 定义

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

2. 示例代码

模板方法定义算法骨架,一些步骤交给子类继承实现,还可以通过钩子函数控制算法的流程

abstract class AbstractClass {
	final void templateMethod() {
		operation1();
		operation2();
		if (hook()) {
			extraOperation();
		}
		finalOperation3();
	}

	abstract void operation1();    //由子类实现
	abstract void operation2();    //由子类实现

	final void finalOperation3() {
		//一些实现
	};

	final void extraOperation() {
		//一些额外步骤实现
	};

	void hook() {     //钩子函数,子类可以覆盖决定是否增加算法步骤
		return false;
	}
}

3. 优缺点

优点

  • 封装不变部分,扩展可变部分
  • 提取公共代码,便于维护
  • 行为由父类控制,子类实现

缺点

  • 每一个不同的实现都需要一个子类,导致类的个数增加,使得系统更加庞大

4. 策略模式和模板方法模式的区别

  • 模板方法中算法的个别步骤交给子类继承实现,算法总体结构仍在在父类控制,对父类具有依赖性,而策略模式通过对象组合来实现算法,后者灵活性更大。

11. 迭代器模式

1. 定义

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

2. 示例代码

迭代器模式封装了原本的集合,并暴露统一的接口给外部客户,客户无法得知内部集合是数组还是列表。

public interface Iterator {
	boolean hasNext();
	Object next();
}

public class DinerMenuIterator implements Iterator {
	MenuItem[] items;
	int position = 0;

	public DinerMenuIterator(MenuItem[] item) {
		this.items = items;
	}

	public Object next() {    //供外部客户调用
		MenuItem menuItem = items[position];
		position = position + 1;
		return menuItem;
	}
	public boolean hasNext() {  //供外部客户调用
		if (position >= items.length || items[position] == null) {
			return false
		} else {
			return true;
		}
	}
}

3. 优缺点

优点

  • 访问一个聚合对象的内容而无须暴露它的内部表示
  • 为遍历不同的聚合结构提供一个统一的接口,解耦客户和内部集合

缺点

  • 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类

12. 组合模式

1. 定义

允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

2. 示例代码

每个职员都是树中的节点,都为Employee类型,其在内部维护一个subordinates集合用于存放子节点。其用add、remove等方法来增添和移除子节点。在实际应用中,应考虑叶子节点和非叶子节点调用方法时的不同之处。组合模式采取迭代器进行遍历,如果遍历时进行的计算开销较大,还可以考虑在节点上缓存。

public class Employee {
   private String name;
   private String dept;
   private int salary;
   private List<Employee> subordinates;
 
   //构造函数
   public Employee(String name,String dept, int sal) {
      this.name = name;
      this.dept = dept;
      this.salary = sal;
      subordinates = new ArrayList<Employee>();
   }
 
   public void add(Employee e) {
      subordinates.add(e);
   }
 
   public void remove(Employee e) {
      subordinates.remove(e);
   }
 
   public List<Employee> getSubordinates(){
     return subordinates;
   }
 
   public String toString(){
      return ("Employee :[ Name : "+ name 
      +", dept : "+ dept + ", salary :"
      + salary+" ]");
   }   
}

3. 优缺点

优点

  • 节点自由增加
  • 组件的接口一致,用户用起来比较简单,无须关心对象的类型。

缺点

  • 叶子节点和非叶子节点都是继承同一类型,违反了单一责任的设计原则

13. 状态模式

1. 定义

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

2. 示例代码

对象在内部保留多个状态类的引用,这些状态类具有相同的方法和属性,但内部具体实现逻辑不同,通过切换内部状态类,对象调用的方法也随之改变,外面看就像换了一个类一样。

public class StartState implements State {
    public void start(Context context) {
    }

    public void close(Context context) {
        context.setState(new CloseState());   //注意状态的切换
        System.out.println("close State");
    }
}

public class CloseState implements State {
    public void start(Context context) {
    context.setState(new StartState());   //注意状态的切换
        System.out.println("start State");
    }
    public void close(Context context) {
    }

}

public class Context {
    private State state;
    public void setState(State state) {   //切换状态的方法
        this.state = state;
    }

    public State getState() {
        return state;
    }

    public void start() {
        getState().start(this);
    }

    public void close() {
        getState().close(this);
    }

}

3. 优缺点

优点

  • 减少了大量if语句
  • 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为
  • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数

缺点

  • 状态模式的使用必然会增加系统类和对象的个数

4. 策略模式和状态模式的区别

状态模式对象会随着时间而改变状态,改变行为是状态模式的核心。策略模式虽然也可以在运行时改变组合,但其主要是控制对象使用什么策略,而状态模式改变是自动的,无意识的。


14. 代理模式

1. 定义

为另一个对象提供一个替身或占位符以控制对这个对象的访问。包括远程代理控制访问远程对象、虚拟代理控制访问创建开销大的资源、保护代理基于权限控制对资源的访问。

2. 示例代码

下面是一个加载图片的虚拟代理实现,其代理在第一次访问时从硬盘加载图片,并将图片保存在内存中,后续访问内存中的对象。

public interface Image {
   void display();
}

public class RealImage implements Image {
 
   private String fileName;
 
   public RealImage(String fileName){
      this.fileName = fileName;
      loadFromDisk(fileName);
   }
 
   @Override
   public void display() {
      System.out.println("Displaying " + fileName);
   }
 
   private void loadFromDisk(String fileName){
      System.out.println("Loading " + fileName);
   }
}

public class ProxyImage implements Image{   //图片代理
 
   private RealImage realImage;
   private String fileName;
 
   public ProxyImage(String fileName){
      this.fileName = fileName;
   }
 
   @Override
   public void display() {
      if(realImage == null){    //第一次访问需要加载图片
         realImage = new RealImage(fileName);  
      }
      realImage.display();   //后续访问直接使用缓存对象
   }
}

3. 优缺点

优点

  • 职责清晰
  • 扩展性强
  • 安全性高

缺点

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢

4. 装饰者模式和代理模式的区别

装饰者模式强调为对象增加行为,可以进行多次包装。代理模式不仅给对象加上行为,其本身代表对象,当原对象还未创建时,代码对象甚至担当原对象的身份,且很少会用多个代理进行嵌套包装。


15. MVC

1. 定义

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。其是多个设计模式结合起来的模式

2. 概念

  • 视图: 用来呈现模型。视图通常直接从模型中取得它需要显示的状态和数据。用户与视图进行交互,视图会告诉控制器用户的操作。
  • 模型: 模型持有所有的数据、状态和程序逻辑。模型不关注视图和控制器,虽然它提供了操作和检索状态的接口,并发送状态改变给观察者。视图和控制器都可以成为模型的观察者,接收模型变化的通知。
  • 控制器: 取得用户的输入并解读其对模型的意思。控制器也可以直接改变视图。

3. 内含模式

  • 视图和控制器实现了策略模式,视图是一个对象,可以被调整使用不同的策略,而控制器提供了策略,视图只关心界面可视部分,对于任何界面行为,都委托给控制器处理。
  • 视图包括了窗口、面板、按钮、文本等标签。每个显示组件都是一个节点,应用了组合模式。
  • 模型实现了观察者模式,当状态发生改变时,会通知视图或控制器。

4. MVVM

MVVM(Model-View-ViewModel)是MVC的变形,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。相比MVC模式,当视图需要更新时,无须自己编写控制器的代码改变视图,而视图有交互时,也无须编写控制代码处理视图的交互操作。
http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html


知识图谱_知识图谱 | 知识图谱做用户画像 导读:最近一直在思考怎么用知识图谱做推荐,但是目前能知道的内容都是基于路径的推荐和基于图特征的推荐,所以能不能换一个角度,探究一下用知识图谱怎么做用户画像,因为画像也是推荐系统重要的一部分。现在的知识图谱+推荐怎么做的传统的用户画像怎么做现在的知识图谱+推荐怎么做的?基于路径:可以理解成基于图谱的多路径召回,或者多路径推荐,然后根据路径的转移概率进行排序从而达到推荐的效果,基于路径比较适合简单的推... 阅读详情

相关推荐

一个完整的c#股票分析软件源码

完整的c#股票分析软件源码

qq_35600909的博客 4595

命令模式(Command Pattern)(一):命令模式介绍

一、意图              将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 二、适用性 (1)系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。 (2)在不同的时刻指定、排列和执行请求。 (3)支持修改日志、撤销操作。 (4)系统需要将一组操作组合在一起

jialinqiang的专栏 6365

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

本文深入探讨了使用Cadence psspxf工具进行分频器PSRR仿真时常见的三大技术陷阱,包括扰动信号参数设置、收敛性优化和后处理信号提取。通过详细的参数推荐和实战技巧,帮助工程师避免仿真误差,提升PSRR分析效率与准确性,特别适用于16分频器等数字-模拟混合电路设计。

weixin_29258297的博客 301

功能键设置(命令模式实战)

为了用户使用方便,某系统提供了一系列功能键,用户可以自定义功能键的功能,如功能键FunctionButton可以用于退出系统(SystemExitClass),也可以用于打开帮助界面(DisplayHelpClass)。用户可以通过修改配置文件来改变功能键的用途,现使用命令模式来设计该系统,使得功能键类与功能类之间解耦,相同的功能键可以对应不同的功能。 类图: 代码: 抽象命令类: public...

weixin_44738940的博客 6897

形式化方法(Formal Methods)和人工智能(Artificial Intelligence)

一、形式化方法(Formal Methods) ​ 形式化方法最初应用在硬件上,验证硬件的正确性,后面逐渐应用到软件编程中,能够在软件中找到软件的错误,验证软件的安全可靠。形式化方法更加接近离散数学,所以其应用难度非常大,同时学习成本也较高。再加上形式化方法的大多数理论还停留在上个世纪,由于程序越来越复杂,导致形式化方法进行验证需要大量人工和时间,以至于现在绝大部分软件开发人员完全没有考虑过这个方法,甚至没有听说过这个名词。 ​ 形式化方法最新的应用成果是在工业上,比如一些极其重要且对安全性要求极高的领域(

qq_37030400的博客 4005

单细胞测序数据整合

基于Seurat 联合harmony进行单细胞数据整合分析

G2530051386的博客 9792

设计模式---读书笔记

一、文章来由 按照惯例,来一个来由,这是《设计模式—可复用面向对象软件的基础》的读书笔记,整理给自己看的,整理的内容也会不断更新。大神轻喷~~如果不喜欢请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步 二、读书笔记 1、P12 可复用的面向对象设计的原则: (1)针对接口编程,而不是针对实现编程。不将变量声明为某个...

weixin_33830216的博客 224

Camera mipi通信协议

MIPI(移动行业处理器接口),是的缩写。MIPI移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准。分别定义了一系列的手机内部接口标准,比如摄像头接口CSI、显示接口DSI,其中是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。

arvin_xiong的博客 3730

《设计模式》读书笔记

OO基础----抽象,封装,多态,继承    (面向对象的三大特点是:多态,继承,组合) OO原则----封装变化,多用组合少用继承,针对接口编程、不针对实现编程 OO模式----策略模式(定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户) 待续…… 参考:《设计模式》

Ethan_LG的专栏 847

Kubernetes+EdgeX:构建企业级AI边缘推理平台

设备:工业摄像头(RTSP协议,输出1920x1080视频流);AI模型:YOLOv8训练的轴承裂纹检测模型(识别“裂纹”“正常”两种类型);目标:摄像头采集图像→EdgeX传输数据→K8s推理服务检测→结果反馈到报警器(HTTP协议)。Kubernetes+EdgeX的组合,为企业构建AI边缘推理平台提供了标准化、可扩展标准化:K8s的容器编排和EdgeX的设备管理,都是行业标准,避免“重复造轮子”;可扩展:支持从单边缘节点到 thousands of nodes 的规模,满足企业的增长需求;

AI算力网络与通信的博客 1344

Trae 在代码审查场景的 3 大差异化能力:对比 Claude Code、Cursor 与 Codex 实测

揭示代码审查的核心矛盾是上下文断层而非找 Bug,介绍 Trae 通过跨文件符号追踪、意图-实现对齐校验、增量变更影响图谱生成三件事实现上下文校准,并对比其与 Claude Code、Cursor、Codex 在多模块 Java 项目中的实际审查差异

weixin_42525482的博客 152

设计模式 读书笔记 part1

设计模式(Design Pattern)是一套被反复使用的、多数人知晓的、经过分类编目的代码的总结,使用设计模式是为了可以重用代码,让代码更容易被他人理解并且提高代码的可靠性。设计模式包含模式名称、问题、解决方案和效果。模式名称方便沟通交流,见名知义。

renjh2012的博客 1093

数字图像处理 基于OpenCV的景深融合算法

还有的思路是对图像序列中的每一张图像分别进行拉普拉斯金字塔拆分,提取出每一张图像的高频信息和低频信息,得到所述图像序列对应的高频信息集合和低频信息集合。然后根据所述高频信息集合得到合成后的高频信息,对所述低频信息集合进行导向滤波处理得到合成后的低频信息,根据所述合成后的高频信息和低频信息做拉普拉斯金字塔重构,得到一张超景深图像。这里声明了几个变量,ImMer是最终合成的图像,coll是中间处理的变量,Coll_Ori是保存原图像数据的变量,dstWidth目标图像宽度(一般都是与原始图像大小一致)。

学以致用 知行合一 3901

《设计模式Design Pattern》读书笔记之十八

《设计模式Design Pattern》读书笔记之十八State模式结构 目的当一个对象(context)根据当前本身的状态(state),会产生不同的行为的时候,可以采用state模式。把所有跟改状态相关的行为/动作转移到一个外部的state对象中。这样,可以避免context内部大量的switch.if等判断。 优缺点带来更大的灵活性和可维护性,因为一个新的状态可以很容易地通过派生一个类来追加

Jadyleung的专栏 1638

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《设计模式Design Pattern》读书笔记之十六

《设计模式Design Pattern》读书笔记之十六Memento模式结构 目的为了可以把一个对象恢复到以前的状态,却不想公开内部状态使得封装性被破坏。 优点1,  通过把originator的内部状态保存到memento,而不是直接把内部状态公开,保持了originator的封装性。因为memento有两种接口,宽(wide)的接口只会被originator使用,使得别人不能访问这些内部状态。

Jadyleung的专栏 1386

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《设计模式Design Pattern》读书笔记之十七

《设计模式Design Pattern》读书笔记之十七Observer模式结构 目的在一个一对多(one-to-many)的关系中,当一个对象(one)的状态被更新的时候,它的所有的相关对象(many)都会被得到通知。 讨论1,  可能会带来很大的状态更新成本,subject的一个很小的状态更新都可能使得大量的observer进行相应的更新。更为严重的是,如果subject不提供是什么状态被更新了

Jadyleung的专栏 1451

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

《设计模式Design Pattern》读书笔记之九

《设计模式Design Pattern》读书笔记之九Decorator模式结构 目的动态地给一个对象增加功能(responsibilities)。 讨论1, 给一个对象增加功能,最简单的方法是派生一个类;但这是一种静态的方法,不灵活。而Decorator是一种动态的方法,比较灵活。2, 对于一个轻量型的component,Decorator模式是一种比较好的方法,但如果component是重量型的

Jadyleung的专栏 1341

《设计模式Design Pattern》读书笔记之十

《设计模式Design Pattern》读书笔记之十Facade模式结构 目的为一个复杂的子系统(sub-system)提供一个简单的接口,可以满足大部分用户的要求,这样可以简化用户对该子系统的理解和使用,也可以降低各个自系统之间的耦合度。只有极少部分用户需要绕过Façade,直接使用子系统的各个组成部分。  参考资料《Design Pattern》  Gang-Of-4  1997

Jadyleung的专栏 1323

《设计模式Design Pattern》读书笔记之一

     《设计模式Design Pattern》读书笔记之一      本书所使用到的符号(Guide To Notation) 《Design Pattern》这本书虽然有时候也使用一些非正式的图来表明自己的思想,但在设计模式中表示类/对象之间的关系时,使用规范的图。可能我的书版本比较老一些的缘故?它使用的图并不是基于UML,而是基于UML的前身。类图(class diagram)、对象图(o

Jadyleung的专栏 1925

《设计模式Design Pattern》读书笔记之八

《设计模式Design Pattern》读书笔记之八Composite模式目的在一个part-whole的继承结构中,把整体(composition)和个体(object,component) 统一地对待。这样,对client来说,不用区别是整体还是个体,都可以进行同样的操作。 结构 讨论1, 一个缺点是给限制composite中的component带来困难。2, 有时候增加一个parent re

Jadyleung的专栏 1235

《设计模式Design Pattern》读书笔记之十五

《设计模式Design Pattern》读书笔记之十五Mediator模式结构 目的为了减少大量的对象(colleague)之间互相通信的复杂性,创建一个中间人--mediator(类似于HUB);这样,各个colleague只要建立跟mediator之间的联系,而不需要直接跟各个colleague直接连接。各个colleague之间的通信完全通过mediator进行处理。 优点1,  Media

Jadyleung的专栏 1501

《设计模式Design Pattern》读书笔记之七

《设计模式Design Pattern》读书笔记之七Bridge模式别名Handle/Body 结构  目的在接口(interface/abstraction)与实现(implementation)之间,建立一条桥梁。从而使得,1,  很容易地为该接口提供不同的实现2,  接口可以很容易被扩展(派生)而与具体实现不相关 与其他模式的联系和区别1, Abstract Factory可以用于创建Bri

Jadyleung的专栏 1270

《设计模式Design Pattern》读书笔记之二十

《设计模式Design Pattern》读书笔记之二十Template Method模式结构 目的在父类定义一个算法的框架,而可以让改算法中的每个步骤在子类中实现。这样,子类可以随意修改算法中的某个具体步骤,但整个算法的结构没有发生改变。 讨论1,  PrimitiveOperation可以是纯虚函数;或者仅仅是一个虚拟函数,父类提供一个缺省的实现。2,  PrimitiveOperation可以

Jadyleung的专栏 1437

《设计模式Design Pattern》读书笔记之十一

《设计模式Design Pattern》读书笔记之十一Proxy模式结构 目的当访问一个对象花费比较大的时候,可以为它生成一个代理(proxy)。 应用remote proxy    远程代理,用本地的一个对象代理远程对象virtual proxy    虚拟代理,只有在需要的时候(on demand)才生成一个代价昂贵的对象protection proxy 保护代理,控制对对象的访问权限smar

Jadyleung的专栏 1426

《设计模式Design Pattern》读书笔记之十三

《设计模式Design Pattern》读书笔记之十三Chain of Responsibility模式结构 目的通过解除消息/请求(request)的发送者与接收者之间的绑定,允许request在一个对象链条中传递,增加request处理的灵活性。当然,一个不可避免的可能性是,该request可能在对象链条中传递到最后都没有被处理。 讨论1, 对于successor;如果没问题的话,可以利用现有

Jadyleung的专栏 1241

《设计模式Design Pattern》读书笔记之二十一

《设计模式Design Pattern》读书笔记之二十一Visitor模式结构 目的当一个对象(node)结构相对固定的时候,通过创建一个一个visitor对象来对这个结构中的所有node进行访问;而不是在各个node中创建一个一个成员函数;这样,该node结构不需要改变,可以随意增加visitor对象来增加对node结构的不同访问动作。 讨论1,  如果node经常修改(增加/减少等),visi

Jadyleung的专栏 1410
上一篇: 15. 三数之和(JS实现)
下一篇: 16. 最接近的三数之和(JS实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值