工厂模式

工厂方法模式

别来无恙 提交于 2019-11-26 16:31:15
一、内容 定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类 二、角色 抽象工厂角色(Creator) 具体工厂角色(Concrere Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product) 工厂方法模式相比简单工厂模式将每个具体产品都对应一个具体工厂 三、优点 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码 隐藏了对象创建的实现细节 四、缺点 每增加一个具体产品类,就必须增加一个相应的具体工厂类 五、使用场景 需要生产多种、大量复杂对象的时候 需要降低耦合度的时候 当系统的产品种类需要经常扩展的时候   六、代码示例 from abc import ABCMeta,abstractmethod class PaymentFactory(metaclass=ABCMeta): @abstractmethod def create_payment(self): pass class Payment(metaclass=ABCMeta): @abstractmethod def pay(self,money): pass class Alipay(Payment): def pay(self, money): print('支付宝支付了%s元'%money) class Applepay(Payment): def

python实现工厂模式

守給你的承諾、 提交于 2019-11-26 13:29:10
工厂模式是一个在软件开发中用来创建对象的设计模式。 工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。 为了实现此方法,需要创建一个工厂类创建并返回。 当程序运行输入一个“类型”的时候,需要创建于此相应的对象。这就用到了工厂模式。在如此情形中,实现代码基于工厂模式,可以达到可扩展,可维护的代码。当增加一个新的类型,不在需要修改已存在的类,只增加能够产生新类型的子类。 首先,工厂模式是为了解耦:把对象的创建和使用的过程分开。就是Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类。 其次,工厂模式可以降低代码重复。如果创建对象B的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。我们可以这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的创建过程的修改维护。(当然,我个人觉得也可以把这些创建过程的代码放到类的构造函数里,同样可以降低重复率,而且构造函数本身的作用也是初始化对象。不过,这样也会导致构造函数过于复杂,做的事太多,不符合java 的设计原则。) 由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。同理,想把所有调用B的地方改成B的子类B1

设计模式之工厂模式(上篇)

懵懂的女人 提交于 2019-11-26 12:48:54
为了面向接口编程,而不是面向实现编程,所以此时我么就不能再直接使用new了,因 为当看到“new”时,我们就会想到“具体”。 下面来看一个例子,假如你有一个披萨店,你的代码可能这么写: 1 Pizza orderPizza(){ 2 Pizza pizza = new Pizza(); 3 4 pizza.prepare(); 5 pizza.bake(); 6 pizza.cut(); 7 pizza.box(); 8 9 return pizza; 10 } 但是此时你需要更多披萨类型,所以你就要修改代码,如下所示: 1 Pizza orderPizza(String type){ 2 Pizza pizza = new Pizza(); 3 4 if (type.equals("cheese")) { 5 pizza = new CheesePizza(); 6 } else if (type.equals("pepperoni")) { 7 pizza = new PepperoniPizza(); 8 } else if (type.equals("clam")) { 9 pizza = new ClamPizza(); 10 } else if (type.equals("veggie")) { 11 pizza = new VeggiePizza(); 12 } 13