/** * 设计模式 工厂模式 * 通过接口来获取不同类内容 所谓工厂 就是指的这个接口 而各个接口实现类 就是各类产品线 * 一个产品对应一条产品线 而客户只需要通过沟通渠道传参给接口 即告诉接口 你需要什么 接口就会找到相对应的产品线去给你返回这个产品 * * =============================================================================================================== * =============================================================================================================== * 优点 * 1、一个调用者想创建一个对象,只要知道其名称就可以了。 * 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。 * =============================================================================================================== * =============================================================================================================== * 缺点 * 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事 * =============================================================================================================== * =============================================================================================================== * 使用场景 * 1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 * 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。 * =============================================================================================================== * =============================================================================================================== * * */ public class SJModel { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape = shapeFactory.getShape("ShapeOne"); shape.dream(); shape = shapeFactory.getShape("ShapeTwo"); shape.dream(); } } //工厂 interface Shape { public void dream(); } //产线1 class ShapeOne implements Shape { @Override public void dream() { System.out.println("this is ShapOne"); } } //产线2 class ShapeTwo implements Shape { @Override public void dream() { System.out.println("this is ShapTwo"); } } //沟通渠道 class ShapeFactory { public Shape getShape(String shape) { if (shape.equalsIgnoreCase("ShapeOne")) { return new ShapeOne(); } else if (shape.equalsIgnoreCase("ShapeTwo")) { return new ShapeTwo(); } return null; } }
/** * 设计模式 单例模式 懒汉模式 * =============================================================================================================== * =============================================================================================================== * 作用 保证一个类只有一个实例 * =============================================================================================================== * =============================================================================================================== */ public class SJModel { private static SJModel sjModel = new SJModel(); private SJModel() { } public static synchronized SJModel getSJModel() { if (sjModel == null) { sjModel = new SJModel(); } return sjModel; } public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape = shapeFactory.getShape("ShapeOne"); shape.dream(); shape = shapeFactory.getShape("ShapeTwo"); shape.dream(); } }
/** * 设计模式 单例模式 恶汉模式 * =============================================================================================================== * =============================================================================================================== * 作用 保证一个类只有一个实例 * =============================================================================================================== * =============================================================================================================== */ public class SJModel { private static SJModel sjModel = new SJModel(); private SJModel() { } public static SJModel getSJModel() { return sjModel; } public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape = shapeFactory.getShape("ShapeOne"); shape.dream(); shape = shapeFactory.getShape("ShapeTwo"); shape.dream(); } }