设计模式
我就是我,不一样的烟火
这个作者很懒,什么都没留下…
展开
-
设计模式分类&概念
对==软件设计==中普遍存在(反复出现的各种问题),所提出的解决方案。每一个设计模式系统地命名、解释何评价了面向对象系统中一个重要的和重复出现的设计。 四人帮:(Gang of Four, GoF) ... 《设计模式:可复用面向对象软件的基础》 面向对象 封装 继承 多态 接口 若干抽象方法的集合 作用:限制实现接口的类必须是按照接口给定的调用方式实现这些方法;对高层模块...原创 2021-12-17 13:47:58 · 82 阅读 · 0 评论 -
设计模式-原型模式
当我们已经存在一个对象,这个对象有其属性和方法,若我们还想去获得另外一个同类型对象, 此时有两种选择: 重新去创建一个新的对象 根据已有的对象复制一个副本,而在很多时候我们不需要完全去重新构建一个对象,只需要在原有对象存在的基础上(保留原对象),去修改其属性和方法得到一个新的对象。 import copy from collections import OrderedDi...原创 2021-12-17 12:59:18 · 75 阅读 · 0 评论 -
建造者模式
# -*- coding: utf-8 -*- """ Author : donghao Time : 2021/11/2 10:53 上午 """ from __future__ import absolute_import from abc import ABCMeta, abstractmethod class Player: """ 产品 ...原创 2021-12-17 12:12:21 · 64 阅读 · 0 评论 -
设计模式-外观模式
class CPU(object): def run(self): print('CPU run') def stop(self): print('CPU stop') class Disk(object): def run(self): print('Disk run') def stop...原创 2021-12-17 11:00:49 · 82 阅读 · 0 评论 -
适配器模式
将一个类的接口转换成客户希望的另外一个接口,适配器使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。实现适配器的两种方式,类适配器使用多继承,对象适配器使用组合。组合就是一个类中放入另一类的对象。 先来看下组合: class A: pass class B: def __init__(): self.a = A() 类适配器模式使用示例...原创 2021-12-17 08:44:13 · 85 阅读 · 0 评论 -
工厂方法模式
from abc import ABCMeta, abstractmethod class Pay(metaclass=ABCMeta): """ 抽象产品角色 """ @abstractmethod def pay(self, money): pass class Weweixinpay(Pay): ""...原创 2021-12-17 07:17:10 · 89 阅读 · 0 评论 -
设计模式-桥模式
如果有多种形状与颜色,可能原始会这么写(不容易扩展): 使用桥模式扩展: class Shape(with_metaclass(ABCMeta, object)): # 抽象 def __init__(self, color): # 组合的形式松耦合 self.color = color @abstractmetho...原创 2021-12-17 07:03:56 · 70 阅读 · 0 评论 -
设计模式-单例模式
from __future__ import absolute_import class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(Singleton...原创 2021-12-17 05:05:32 · 130 阅读 · 0 评论 -
设计模式-策略模式
# -*- coding: utf-8 -*- """ Author : donghao Time : 2021/11/3 2:57 下午 """ from __future__ import absolute_import from abc import ABCMeta, abstractmethod class Strategy(metaclass=ABCMe...原创 2021-12-17 04:12:05 · 925 阅读 · 0 评论 -
设计模式-代理模式
class Subject(metaclass=ABCMeta): # 抽象实体,使对外有一致的方法。高层代码可以统一使用 @abstractmethod def get_content(self): pass @abstractmethod def set_content(self, content): ...原创 2021-12-17 04:04:36 · 55 阅读 · 0 评论 -
设计模式-组合模式
class Graphic(metaclass=ABCMeta): # 抽象组件 @abstractmethod def draw(self): pass class Point(Graphic): # 叶子组件 def __init__(self, x, y): self.x = x ...原创 2021-12-17 03:05:16 · 63 阅读 · 0 评论 -
简单工厂模式
简单工厂模式 内容:不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的示例。 角色: 工厂角色(Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product) 优点: 隐藏了对象创建实现细节 客户端不需要更改代码 缺点: 违反了单一职责,将创建逻辑几种集中到一个工厂类里 当添加产品时,需要修改工厂类代码,违反...原创 2021-12-17 02:36:53 · 52 阅读 · 0 评论 -
抽象工厂模式
案例: from abc import ABCMeta, abstractmethod # ------抽象的产品------ class PhoneShell(metaclass=ABCMeta): @abstractmethod def show_shell(self): pass class PhoneCPU(metaclass=...原创 2021-12-17 01:15:24 · 51 阅读 · 0 评论 -
责任链模式
from abc import ABCMeta, abstractmethod class Handler(metaclass=ABCMeta): # 抽象处理者 @abstractmethod def handle_leave(self, day): pass class GeneralManager(Handler): ...原创 2021-12-17 00:58:52 · 52 阅读 · 0 评论 -
设计模式:命令模式 & 项目案例
命令模式是行为模式的一种 “行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将**“行为请求者”与“行为实现者”**解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern) 创建型模式:聚焦如何创建对象 结构型模式:聚焦在类之间如何结合 行为型模式:聚焦在方法上如何结合完成功能 命令模式应该有一下几个角色: Command: 定义命令的接口,声原创 2021-12-16 17:58:14 · 590 阅读 · 0 评论