三、工厂模式
1.作用
完成创建者和调用者的分离。
2.分类
简单工厂模式:
就是一个工厂去创建所有东西。
class Car1{ public void product(){ System.out.println("Car1 已生产"); } } class Car2{ public void product(){ System.out.println("Car2 已生产"); } } //简单工厂 class SimpleFactory{ public void product(String name){ switch (name){ case "car1": new Car1().product(); break; case "car2": new Car2().product(); break; default: System.out.println("没有这个车"); break; } } }
但是这样如果再加一种车,车工厂类要去修改代码,不符合开闭。工厂方法模式解决,但是代码变多了
工厂方法模式:
比简单工厂模式多了个工厂接口和工厂类,就是多加一种产品就需要多加一个工厂。
public class THS { public static void main(String[] args) { new FactoryMethod1().product(); new FactoryMethod2().product(); } } class Car1{ public void product(){ System.out.println("Car1 已生产"); } } class Car2{ public void product(){ System.out.println("Car2 已生产"); } } class FactoryMethod1{ public void product(){ new Car1().product(); } } class FactoryMethod2{ public void product(){ new Car2().product(); } }
抽象工厂模式:
这样如果你需要增加苹果手机和苹果电脑只需要加一个苹果工厂就行了。但是缺点就是如果想加一个手表产品,所有需要的工厂都需要去增加一个创建手表的方法。
public class THS { public static void main(String[] args) { new AbstractFactoryXiaoMi().productA(); new AbstractFactoryHuaWei().productB(); } } class Phone{ public void product(){ System.out.println("手机已生产"); } } class Book{ public void product(){ System.out.println("电脑已生产"); } } //抽象工厂模式 class AbstractFactoryXiaoMi{ public void productA(){ System.out.print("小米牌"+" "); new Phone().product(); } public void productB(){ System.out.print("小米牌"+" "); new Book().product(); } } class AbstractFactoryHuaWei{ public void productA(){ System.out.print("华为牌"+" "); new Phone().product(); } public void productB(){ System.out.print("华为牌"+" "); new Book().product(); } }
最后:其实这个做的并不规范。比如说产品可以去实现一个产品接口或抽象类去规范或者将产品共有功能整合。抽象工厂中其实这两个工厂可以实现一个工厂接口。
标签:product,void,System,模式,public,new,工厂,class From: https://www.cnblogs.com/thh19201420/p/16779011.html