2.工厂设计模式
2.工厂设计模式
a.工厂设计模式分类
- 1.简单工厂设计模式
- 2.工厂方法设计模式
- 3.抽象工厂设计模式
b.简单工厂方法
1.概述
- 工厂:多条产品线,来生产不同的产品(属于同一类,不同类的产品看作多累)
- 工厂方法:根据传入的参数生产对应的产品
- 产品:有公共的基接口
2.代码
- 水果生产厂家
-
//产品接口 interface Product{ }
- 描述:代表一切水果
-
class Apple implements Product{ public String toString(){ return "Apple"; } } class Banana implements Product{ public String toString(){ return "Banana"; } }
- 具体的水果
-
public class SimapleFactory { public static Product getProduct(String name){ Product product=null; switch (name){ case "Apple": product=new Apple(); break; case "Banana": product=new Banana(); break; default: System.out.print("wrong input "); } return product; } public static void main(String[] args){ System.out.println(SimapleFactory.getProduct("Apple")); System.out.println(SimapleFactory.getProduct("Banana")); System.out.println(SimapleFactory.getProduct("Pie")); } }
- 工厂方法类
3.分析
- 优点:
-
- 1.简单
-
- 缺点:
-
- 1.代码扩展行很差,每次增加一种产品都需要重新修改工厂对象。
- 2.产品很多且种类复杂的时候,工厂对象的逻辑会比较复杂,效率也会大幅度下降
- 3.工厂对象会成为整个系统的瓶颈
-
c.工厂方法设计模式
1.概述
- 1.为了优化简单工厂带来的问,每次添加产品都需要修改工厂对象的源代码,提出了工厂 方法设计模式
- 2.每种产品都有自己的工厂
- 3.所有的工厂有通用的接口
2.代码
-
interface Factory{ Product createProduct(); } class AppleFactory implements Factory{ public Product createProduct(){ return new Apple(); } } class BananaFactory implements Factory{ public Product createProduct(){ return new Banana(); } } public class FactoryMethodTest { public static void main(String[] args){ System.out.println(new BananaFactory().createProduct()); System.out.println(new AppleFactory().createProduct()); } }
3.分析
-
虽然添加新产品的时候不用修改原有的代码,但是厂品数量多到一定程度的时候,也不适合使用,因为工厂的数量实在是太多了
d.抽象工厂方法
1.概述
- 1.为了解决工厂方法设计模式的问题(工厂数量过多)
- 2.对产品进行分类
- 3.分工厂进行生产(同类厂品放不同的工厂进行生产)
2.代码
-
interface Factory{ Product createApple(); Product createBanana(); } class MyFactory implements Factory{ @Override public Product createApple(){ return new Apple(); } @Override public Product createBanana() { return new Banana(); } } class MyFactory_1 implements Factory{ @Override public Product createApple(){ return new Apple_1(); } @Override public Product createBanana(){ return new Banana_1(); } }
-
说明:
- 1.苹果:Apple Apple_1
- 2.香蕉:Banana Banana_1
- 其中 Apple 与 Banana 由工厂一生产
- Apple_1与 Banana_1 由工厂儿生产