码迷,mamicode.com
首页 > 编程语言 > 详细

【Python学习之八】设计模式和异常

时间:2019-05-06 16:15:59      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:href   异常   code   pre   集中   tree   singleton   turn   特殊   

环境
  虚拟机:VMware 10
  Linux版本:CentOS-6.5-x86_64
  客户端:Xshell4
  FTP:Xftp4
  python3.6

一、设计模式
1、单例模式
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

class Singleton(object):
    __instance=None
    __first_init=False
    
    def __new__(cls,name,age):
        if not cls.__instance:
            cls.__instance=object.__new__(cls);
        return cls.__instance
    def __init__(self,name,age):
        if not self.__first_init:
            self.name=name
            self.age=age
            Singleton.__first_init=True

a=Singleton(bin,18)
b=Singleton(bin,8)
#只有一个实例
print(id(a))
print(id(b))
#只初始化一次
print(a.age)
print(b.age)
#修改属性
a.age=19
print(b.age)

 

2、工厂模式
2.1、Simple Factory模式不是独立的设计模式,他是Factory Method模式的一种简单的、特殊的实现。他也被称为静态工厂模式,通常创建者的创建方法被设计为static方便调用。
(1)静态的工厂类
(2)用全局函数改写工厂类

class Person(object):
    def __init__(self,name):
        self.name=name
    def work(self,type):
        print(%s开始工作了%self.name)
        ax=Factory.create_axe(self, type)
        ax.cut_tree()
        
class Axe(object):
    def cut_tree(self):
        print(开始砍树了)
class StoneAxe(Axe):
    def cut_tree(self):
        print(石斧砍树)
class SteelAxe(Axe):
    def cut_tree(self):
        print("使用钢斧头砍树")
class WaterAxe(Axe):
    def cut_tree(self):
        print("使用水砍树")    
    
class Factory(object):
    @staticmethod
    def create_axe(self,ax_type):
        if ax_type==stone:
            return StoneAxe()
        elif ax_type==steel:
            return SteelAxe()
        elif ax_type==water:
            return WaterAxe()
        else:
            print(类型错误)
p=Person(光头强)#光头强开始工作了
p.work(steel)#使用钢斧头砍树

 

2.2、工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态方法,使得它可以被子类继承。对于python来说,就是工厂类被具体工厂继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
抽象的工厂类提供了一个创建对象的方法,也叫作工厂方法。
(1) 抽象工厂角色(Factory): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
(2) 具体工厂角色(Stone_Axe_Factory,Steel_Axe_Factory):它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
(3) 抽象产品角色(Axe):它是具体产品继承的父类或者是实现的接口。在python中抽象产品一般为父类。
(4) 具体产品角色(Stone_Axe,Steel_Axe):具体工厂角色所创建的对象就是此角色的实例。由一个具体类实现。


二、异常


参考:
Python学习笔记

【Python学习之八】设计模式和异常

标签:href   异常   code   pre   集中   tree   singleton   turn   特殊   

原文地址:https://www.cnblogs.com/cac2020/p/10819993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!