工厂模式的官网定义:
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
◆作用:
◆实现了创建者和调用者的分离◆详细分类: .
◆简单工厂模式
◆工厂方法模式
◆0OP七大原则
等下会用到下面的两项基本原则
◆开闭原则: -个软件的实体应当对扩展开放,对修改关闭◆依赖倒转原则: (要针对接口编程,不要针对实现编程
◆迪米特法则: 只与你直接的朋友通信,而避免和陌生人通信。
在学习23设计模式的路上要让自己不断的思考起了:
案例一:简单工厂模式。
方案一 原始方案 在学Java基础的时候
1 定义一个接口为Car
package coms.Design.Mode.factory.simple; public interface Car { void name(); }
2 在创建三个品牌的汽车
package coms.Design.Mode.factory.simple; public class Hongqi implements Car { @Override public void name() { System.out.println("红旗五玲玲"); } }
package coms.Design.Mode.factory.simple; public class Tesla implements Car{ @Override public void name() { System.out.println("特斯拉"); } }
package coms.Design.Mode.factory.simple; public class WuLing implements Car{ @Override public void name() { System.out.println("五菱龚光"); } }
void name(); //在Car这个类中定义了一个属性为车子品牌的名字
public class Hongqi implements Car { public class Tesla implements Car{ public class WuLing implements Car{
//在上面三个类中都有下面的方法 @Override public void name() { }
public class ConsumerTest { /** * 原始方法 * @param args */ public static void main(String[] args) { Car car=new WuLing(); Car car1 =new Hongqi(); Car car2 =new Tesla(); car.name(); car1.name(); car2.name(); //原始的方案自己要去New对象
方案二 我不想 new对象 让工厂去完成
package coms.Design.Mode.factory.simple; /** * 创建工厂 * 静态工厂 */ public class CarFactory { public static Car getCarCar(String car) { //不满足原则 if (car.equals("五菱")) { return new WuLing(); } else if (car.equals("红旗")) { return new Hongqi(); } else if (car.equals("特斯拉")) { return new Tesla(); }else { return null; } } package coms.Design.Mode.factory.simple; public class ConsumerTest { /** * 原始方法 * @param args */ public static void main(String[] args) { System.out.println("----工厂方式的去创建-----------"); //使用工厂创建 Car carCar = CarFactory.getCarCar("五菱"); Car carCar1 = CarFactory.getCarCar("红旗"); carCar.name(); carCar1.name(); } }
在无意中我又发现了一个问题:在工厂上创建汽车中应该有很多的零部件呀!要向我这样的思维下面的代码中if..else不知要写多少了:
public class CarFactory { public static Car getCarCar(String car) { //不满足原则 if (car.equals("五菱")) { return new WuLing(); } else if (car.equals("红旗")) { return new Hongqi(); } else if (car.equals("特斯拉")) { return new Tesla(); }else { return null; } }
解决问题的方式在于自己不断的思考的:
案例二:工厂方法模式
工厂方法模式
◆用来生产同-等级结构中的固定产品(支持增加任意产品)
更据上面的图来创建java的代码模式
Java代码的结构图
package coms.Design.Mode.method; //工厂 public interface CarFactory { Car getCar(); }
package coms.Design.Mode.method; public class HongqiFactory implements CarFactory{ @Override public Car getCar() { return new Hongqi(); } }
package coms.Design.Mode.method; public class MoBeadFactory implements CarFactory{ @Override public Car getCar() { return new MoBead(); } }
package coms.Design.Mode.method; public class TeslaFactory implements CarFactory { @Override public Car getCar() { return new Tesla(); } }
package coms.Design.Mode.method; public interface Car { void name(); }
package coms.Design.Mode.method; public class Hongqi implements Car { @Override public void name() { System.out.println("红旗"); } }
package coms.Design.Mode.method; public class MoBead implements Car { @Override public void name() { System.out.println("膜拜挡车"); } }
package coms.Design.Mode.method; public class Tesla implements Car { @Override public void name() { System.out.println("特斯拉"); } }
package coms.Design.Mode.method; import coms.Design.Mode.factory.simple.CarFactory; public class Consumer { public static void main(String[] args) { Car car=new HongqiFactory().getCar(); Car car1=new TeslaFactory().getCar(); Car car2 = new MoBeadFactory().getCar(); car.name(); car1.name(); car2.name(); } }