标签:end factor equal int() else png printf 抽象工厂模式 col
通常由我们自己创建(new) 对象 增加了程序的耦合度 为了将对象创建使用相分离 采用工厂模式
工厂负责创建对象 我们直接从工厂里面取对象就行 将实例化的过程封装起来 进行统一管理
// 打印机接口 public interface Print { // 获得打印机的名字 String getName(); }
public class ColorPrint implements Print{ @Override public String getName() { return "彩色打印机"; } } public class BlackPrint implements Print { @Override public String getName() { return "黑白打印机"; } }
public class PrintTest { public static void main(String[] args) { // 每次使用打印机的时候 都需要自己new对象 增加了程序之间的耦合度 Print print = new BlackPrint(); Print print1 = new ColorPrint(); System.out.println(print.getName()); System.out.println(print1.getName()); } }
增加工厂类
public class SimpleFactory { public static Print getPrint(String name){ if(name.equals("1")){ return new ColorPrint(); }else if(name.equals("2")){ return new BlackPrint(); } return null; } }
public static void main(String[] args) { // 由工厂创建对象 统一管理对象 Print print1 = SimpleFactory.getPrint("1"); System.out.println(print1.getName()); Print print2 = SimpleFactory.getPrint("2"); System.out.println(print2.getName()); }
每次向工厂拿对象 还要输入指定的类型
将实例化的过程 交给子类
// 工厂接口 public interface Factory { Print getPrint(); } ---------------------- // 彩色打印机工厂 public class ColorFactroy implements Factory { @Override public Print getPrint() { return new ColorPrint(); } } ---------------------- // 黑白打印机工厂 public class BlackFactroy implements Factory { @Override public Print getPrint() { return new BlackPrint(); } }
public static void main(String[] args) { Factory factory0 = new BlackFactroy(); Factory factory1 = new ColorFactroy(); System.out.println(factory0); System.out.println(factory1); }
假如我要新增一个激光打印
// 创建打印机类 实现打印机接口 public class LaserPrint implements Print { @Override public String getName() { return "激光打印机"; } } ---------------- // 创建激光打印机工厂 实现工厂接口 public class LastPrintFactroy implements Factory { @Override public Print getPrint() { return new LaserPrint(); } }
虽然不用指定类型来创建工厂 但每次使用工厂 还得new 指定打印机的工厂
如果每次新增一个打印机 就得实现Factroy接口 创建打印机的工厂的类
// 创建抽象工厂类 public abstract class AbstractFactory { abstract Print getColorPrint(); abstract Print getBlackPrint(); } // 创建打印机工厂 继承抽象工厂类 public class PrintFactroy extends AbstractFactory { @Override Print getColorPrint() { return new ColorPrint(); } @Override Print getBlackPrint() { return new BlackPrint(); } }
public static void main(String[] args) { // 只需要实例抽象工厂即可 AbstractFactory abstractFactory = new PrintFactroy(); Print blackPrint1 = abstractFactory.getBlackPrint(); Print blackPrint2 = abstractFactory.getColorPrint(); }
新增激光打印机
// 实现打印机接口 public class LaserPrint implements Print { @Override public String getName() { return "激光打印机"; } } ---------------------- public abstract class AbstractFactory { abstract Print getColorPrint(); abstract Print getBlackPrint(); // 新增激光打印机 abstract Print getLaserPrint(); } -------------------- // 在 PrintFactroy 类 重写机关打印机即可 @Override Print getLaserPrint() { return new LaserPrint(); }
‘使用抽象工厂 新增打印机的时候 只需要在抽象工厂新增激光打印机 打印机工厂类重写方法即可 不需要创建新的对象 也不需要修改原来的代码
标签:end factor equal int() else png printf 抽象工厂模式 col
原文地址:https://www.cnblogs.com/chenziyue/p/12516607.html