Python 方式:

# 原型模式 with Python

import copy

# 用copy包实现深拷贝(copy.deepcopy())和浅拷贝(copy.copy())

from abc import abstractmethod,ABCMeta

# 创建一接口

class Shape(metaclass=ABCMeta):

_id =""

in_type = ""

@abstractmethod

def draw(self):

pass

def getType(self):

return self.in_type

def getID(self):

return self._id

def setID(self,in_id):

self._id = in_id

def clone(self):

#深拷贝

myclone = copy.deepcopy(self)

return myclone

# 创建实体类

class Rectangle(Shape):

def __init__(self):

self.in_type = "Rectangel"

def draw(self):

print("Inside Rectangle.draw() method.")

class Square(Shape):

def __init__(self):

self.in_type = "Square"

def draw(self):

print("Inside Square.draw() method.")

class Circle(Shape):

def __init__(self):

self.in_type = "Circle"

def draw(self):

print("Inside Circle.draw() method.")

# 获取数据实体类

class ShapeCache():

#Python 无静态变量,用开放类变量

shapeMap = {}

def getShape(self,shapeID):

cachedShape = self.shapeMap[shapeID]

return cachedShape.clone()

# 静态方法

@staticmethod

def loadCache():

circle1 = Circle()

circle1.setID("1")

ShapeCache.shapeMap[circle1.getID()] = circle1

square1 = Square()

square1.setID("2")

ShapeCache.shapeMap[square1.getID()] = square1

rectangle1 = Rectangle()

rectangle1.setID("3")

ShapeCache.shapeMap[rectangle1.getID()] = rectangle1

# 调用输出

if __name__ == '__main__':

ShapeCache.loadCache()

myShape = ShapeCache()

cloneShape1 = myShape.getShape("1")

print("Shape : %s" %cloneShape1.getType())

cloneShape1.draw()

cloneShape2 = myShape.getShape("2")

print("Shape : %s" % cloneShape2.getType())

cloneShape2.draw()

cloneShape3 = myShape.getShape("3")

print("Shape : %s" % cloneShape3.getType())

cloneShape3.draw()

Siskin.xu

Siskin.xu

sis***@sohu.com12个月前 (02-28)

java 原型模式_原型模式相关推荐

  1. 设计模式 - 创建型模式_原型模式

    文章目录 创建型模式 概述 Case 场景模拟⼯程 Bad Impl Better Impl (原型模式重构代码) 小结 创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性 ...

  2. java策略模式 工厂模式_策略模式和工厂模式搭配使用

    策略模式和工厂模式的搭配使用可以很好地消除代码if-else的多层嵌套 需求 针对店下商铺,有这样一个需求,对用户客户分为了普通客户.vip客户.超级vip用户.专属vip用户4个等级,每当用户购买商 ...

  3. java原型链_原型链的使用

    这段时间突然有点了解了原型的方法然后看了这个文章感觉很详细,就记录一下 原型对象 每个javascript对象都有一个原型对象,这个对象在不同的解释器下的实现不同.比如在firefox下,每个对象都有 ...

  4. 全库模式 用户模式 表模式_暗模式,亮模式和用户的故事

    全库模式 用户模式 表模式 I have been working on designing a UI for an app that has individuals over the age of ...

  5. 设计模式 - 创建型模式_建造者模式

    文章目录 创建型模式 概述 Case 模拟工程 Bad Impl Better Impl (建造者模式重构代码) 小结 创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性. ...

  6. Hadoop 的三种运行模式_本地模式_伪分布式模式

    演示的版本是:2.7.2 官方文档 Hadoop运行模式 Hadoop运行模式包括:本地模式.伪分布式模式以及完全分布式模式. Hadoop官方网站:http://hadoop.apache.org/ ...

  7. 原型和原型链原型继承_原型还是不原型:这就是问题所在。

    原型和原型链原型继承 by Rishal Hurbans 由Rishal Hurbans 原型还是不原型:这就是问题所在. (To prototype or not to prototype: tha ...

  8. 代理模式 委派模式 策略模式_委派模式和策略模式

    一.委派模式 委派模式(Delegate Pattern):指负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果.(属于行 ...

  9. 如和退出 百度云暗黑模式_黑暗模式的过去和现在

    如和退出 百度云暗黑模式 At Lunabee Studio, we attended in 2019 the Google I/O and the Apple WWDC conferences in ...

  10. 设计模式 - 结构型模式_外观模式

    文章目录 结构型模式 概述 Case Bad Impl Better Impl 小结 结构型模式 结构型模式主要是解决如何将对象和类组装成较大的结构, 并同时保持结构的灵活和⾼效. 结构型模式包括:适 ...

最新文章

  1. 机器学习组队【计划及安排】
  2. HNOI2017 day1 T3 礼物
  3. mac安装多php环境变量配置,Mac如何安装多个php版本
  4. winform防止sqlserver注入_ASP.NET Core 中的 依赖注入介绍
  5. javaweb开发1.环境配置(javaweb插件下载及tomact在eclips中配置)
  6. 【Siddhi】Syntax error in SiddhiQL, no viable alternative at input
  7. phpfpm内存越来越高_DDR5内存规范发布
  8. 听孔文达老师《IT职业规划经验谈》WEBCAST笔记
  9. Servlet chapter 3
  10. Python机器学习的一些文档
  11. 使用VirtualBox安装Dos系统并配置masm汇编语言环境
  12. android 视频测试工具,安兔兔视频测试下载3.0 官方版-安卓盒子视频性能检测工具平板西西软件下载...
  13. 老机器上安装了kubuntu先尝试安装Manjaro但是鼠标按键无法使用彻底解决办法
  14. 癌症最新研究进展(2021年10月)
  15. 报错ValueError: check_hostname requires server_hostnam ImportError: cannot import name ‘imread’ from
  16. 职场四种人:打工者、职业人、企业人和社会人,你是那种人?
  17. java跳转kotlin页面_Kotlin:return与跳转
  18. 网站强制跳转到国家反诈中心如何解封
  19. ZOJ 2975 Kinds of Fuwas(暴力)
  20. 第二章:网络攻击原理与常用方法

热门文章

  1. 新品Demo —— ZStack CMP多云管理平台
  2. 用OpenStack构建南方电网广东公司能源云
  3. kali linux 桌面消失_Kali安装好后,需要修改的一些常用配置
  4. python随机抽号_Python基础:手把手以实例教你学随机数产生和字符/ASCII码转换
  5. 不平衡数据集_我们的不平衡数据集
  6. 聊天工具机器人开发_聊天机器人-精致的交流工具? 还是您的客户服务团队不可或缺的成员?...
  7. java混淆加密_源代码部分加密混淆方案
  8. java多表查询实体类_自己设计一个JAVA+MyBatis解析实体类多表通用查询
  9. 过椭圆外一点引两条切线方程_S16-2 二次曲线和圆方程
  10. kettle 零基础快速入门(一)