• 原型模式


    问题:
    工厂方法模式带来了平行继承层次问题,每次添加新产品类,都需要去创建一个对应的具体工厂类。

    概念:
    用原型实例指定创建对象的种类,并且通过拷贝这些原型实例创建新的对象。

    实现:
    代码示例:

    abstract class Sea {}
    class EarthSea extends Sea {}
    class MarsSea extends Sea {}
    
    abstract class Plains {}
    class EarthPlains extends Plains {}
    class MarsPlains extends Plains {}
    
    abstract class Forest {}
    class EarthForest extends Forest {}
    class MarsForest extends Forest {}
    
    class TerrianFactory
    {
    	private $sea;
    	private $plains;
    	private $forest;
    
    	public function __construct(Sea $sea, Plains $plains, Forest $forest)
    	{
    		$this->sea = $sea;
    		$this->plains = $plains;
    		$this->forest = $forest;
    	}
    
    	public function getSea()
    	{
    		return clone $this->sea;
    	}
    
    	public function getPlains()
    	{
    		return clone $this->$plains;
    	}
    
    	public function getForest()
    	{
    		return clone $this->forest;
    	}
    }
    
    $factory = new TerrianFactory(new EarthSea(), new EarthPlains(), new EarthForest());
    $sea = $factory->getSea();
    $plains = $factory->getPlains();
    $forest = $factory->getForest();
    

    效果:
    1. 使用组合代替继承,无需维护一个大型的平行继承体系,促进了代码运行时的灵活性,减少了必须创建的类。
    2. 隐藏了对象创建的细节,同时提高了性能。
    注意:如果产品对象引用了其他对象,则应该实现__clone()方法来保证得到的是深复制的对象。

  • 相关阅读:
    面向对象
    反射的基本介绍
    简单的总结
    生成器和迭代器
    shutil
    模块
    利用reguests 请求获取列车时刻表
    初识requests
    hashlib:用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
    【网站】一些有用的网站
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9622949.html
Copyright © 2020-2023  润新知