创建对象的一种方式。
旧的实例化对象创建方式:new
转为:工厂方式,将选择实现类、创建对象统一管理和控制
实现类的创建者和调用者的分离
静态工厂:简单工厂中的方法变成静态
不需要创建实例直接调用
- IProduct:抽象产品类,简单工厂模式所创建的所有对象的⽗类,描述所有实例所共有的公共接⼝。
- Product:具体产品类,是简单工厂模式的创建⽬标。
- Factory:工厂类,简单工厂模式的核心,它负责实现 创建所有实例的内部逻辑。public interface Car { void name() ;}public class Tesla implements Car { @Override public void name() { System.out.println("特斯拉Model3"); }}public class Wuling implements Car {@Overridepublic void name() { System.out.println("五菱之光");}}public class CarFactory { public static Car getCar(String name){ if ("五菱".equals(name)){ return new Wuling() ; }else if("特斯拉".equals(name)){ return new Tesla() ; }else{ return null ; } }}public class FactoryTest { public static void main(String[] args) { Car car = CarFactory.getCar(“Wuling”); // 根据参数不同到工厂找创建对应的实例对象 car.name(); // 调用相关的方法} }
- IProduct:抽象产品接口,描述所有实例所共有的公共接⼝。
- Product:具体产品类,实现抽象产品类的接⼝,⼯⼚ 类创建对象,如果有多个需要定义多个。
- IFactory:抽象⼯⼚接口,描述具体⼯⼚的公共接⼝。
- Factory:具体⼯⼚类,实现创建产品类对象,实现抽 象⼯⼚类的接⼝,如果有多个需要定义多个。public interface CarFactory { Car getCar() ;} // Tesla工厂类public class TeslaFactory implements CarFactory { @Override public Car getCar( ){ if ("五菱".equals(name)){ return new Tesla() ; }}// Wuling工厂类public class WulingFactory implements CarFactory { @Override public Car getCar() { return new Wuling(); }}
public interface Car { void name() ;}public class Tesla implements Car { @Override public void name() { System.out.println("特斯拉Model3"); }}public class Wuling implements Car {@Overridepublic void name() { System.out.println("五菱之光");}}public class FactoryTest { public static void main(String[] args) { Car teslaCar = TeslaFactory.getCar(); // 根据具体工厂类找创建实例对象 Car wulingCar = WulingFactory.getCar(); // 根据具体工厂类找创建实例对象 teslaCar.name(); // 调用相关的方法 wulingCar.name();} }

开闭原则:没增加一个产品类,只要实现对应的产品类和工厂类
单一职责原则:每个工厂值生产对应产品
每个增加的产品都要有对应的具体工厂和产品类
方法变成静态的,方便直接调用。
整合简单工厂和工厂方法模式,Spring中用到。
1. 定义两个接口:IPhoneProduct(手机)、IRouterPruduct(路由器)
2. 创建具体的 手机产品 和 路由器产品
3. 创建抽象工厂:IProductFactory ,其中有创建手机和创建路由器两个方法
4. 创建Apple产品族(Apple工厂),实现抽象工厂IProductFactory
5. 创建华为产品族(华为工厂),实现抽象工厂IProductFactory
6. 创建Client去拿到工厂,获取对应的产品-
public interface IPhoneProduct { //手机接口 void start() ; //开机 void shutdown() ; // 关机 void callUp() ; //打电话 void sendSMS() ; //发短息}public interface IRouterProduct { //路由器接口 void start() ; // 路由器开机 void shutdown() ; // 路由器关机 void findWifi() ; // 路由器寻找wifi void Setting() ; // 路由器设置}/** Apple手机
*/
public class ApplePhone implements IPhoneProduct {
@Override
public void start() {System.out.println("Apple开机");}
@Override
public void shutdown() { System.out.println("Apple关机");}
@Override
public void callUp() {System.out.println("Apple打电话");}
@Override
public void sendSMS() {System.out.println("Apple发短信");}
}
/*
* 华为手机
*/
public class HuaWeiPhone implements IPhoneProduct {
@Override
public void start() { System.out.println("华为开机"); }
@Override
public void shutdown() { System.out.println("华为关机");}
@Override
public void callUp() { System.out.println("华为打电话");}
@Override
public void sendSMS() { System.out.println("华为发短信");}
}/** 华为路由器
*/
public class HuaWeiRouter implements IRouterProduct {
@Override
public void start() {System.out.println("华为路由器开机");} @Override public void shutdown() {System.out.println("华为路由器关机"); } @Override public void findWifi() { System.out.println("华为路由器找wifi");} @Override public void Setting() { System.out.println("开启华为路由器设置"); }}/** Apple路由器产品
*/
public class AppleRouter implements IRouterProduct {
@Override
public void start() {System.out.println("Apple路由器开机");} @Override public void shutdown() {System.out.println("Apple路由器关机"); } @Override public void findWifi() {System.out.println("Apple路由器找wifi");} @Override public void Setting() {System.out.println("Apple华为路由器设置");}}/**** 抽象工厂:生产工厂
*/
public interface IProductFactory { //生产手机 IPhoneProduct iPhoneProduct() ; //生产路由器 IRouterProduct iRouterProduct() ;}public class AppleFactory implements IProductFactory { @Override public IPhoneProduct iPhoneProduct() { return new ApplePhone(); } @Override public IRouterProduct iRouterProduct() { return new AppleRouter(); }}public class HuaWeiFactory implements IProductFactory { @Override public IPhoneProduct iPhoneProduct() { return new HuaWeiPhone(); } @Override public IRouterProduct iRouterProduct() { return new HuaWeiRouter(); }}public class Client { public static void main(String[] args) { System.out.println("================华为生产===================="); HuaWeiFactory huaWeiFactory = new HuaWeiFactory(); IPhoneProduct product = huaWeiFactory.iPhoneProduct(); product.start(); product.callUp(); product.sendSMS(); IRouterProduct routerProduct = huaWeiFactory.iRouterProduct(); routerProduct.findWifi(); routerProduct.Setting(); routerProduct.shutdown(); System.out.println("================Apple生产===================="); AppleFactory appleFactory = new AppleFactory(); IPhoneProduct iPhoneProduct = appleFactory.iPhoneProduct(); iPhoneProduct.start(); iPhoneProduct.callUp(); iPhoneProduct.sendSMS(); IRouterProduct iRouterProduct = appleFactory.iRouterProduct(); iRouterProduct.findWifi(); iRouterProduct.Setting(); iRouterProduct.shutdown(); }}
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。