
package com.xgp.company.第二种_工厂模式.简单工厂模式;
public interface Car {
void name();
}
package com.xgp.company.第二种_工厂模式.简单工厂模式;
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五凌宏观");
}
}
package com.xgp.company.第二种_工厂模式.简单工厂模式;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.xgp.company.第二种_工厂模式.简单工厂模式;
/**
* 简单工厂模式,又成为静态工厂模式
* 弊端:增加一个新产品时,如果你不修改代码,做不到
*/
/**
* 汽车工厂
*/
public class CarFactory {
public static Car getCar(String car) {
if("五凌".equals(car)) return new WuLing();
if("特斯拉".equals(car)) return new Tesla();
return null;
}
/**
* 第二种方式
* @return
*/
public static Car getWuLing() {
return new WuLing();
}
public static Car getTesla() {
return new Tesla();
}
}
package com.xgp.company.第二种_工厂模式.简单工厂模式;
/**
* 买车
*/
public class Consumer {
/* *//**
* 传统的方式
* @param args
*//*
public static void main(String[] args) {
//弊端:需要了解接口和所有的实现类
Car car1 = new WuLing();
Car car2 = new Tesla();
car1.name();
car2.name();
}*/
/**
* 简单工厂模式
* @param args
*/
public static void main(String[] args) {
Car car1 = CarFactory.getCar("五凌");
Car car2 = CarFactory.getCar("特斯拉");
car1.name();
car2.name();
}
}
package com.xgp.company.第二种_工厂模式.简单工厂模式;
/**
* 弊端:增加实现类时需要改工厂类的代码
*/
public class Dazhong implements Car {
@Override
public void name() {
System.out.println("大众");
}
}
五凌宏观
特斯拉

package com.xgp.company.第二种_工厂模式.工厂方法模式;
public interface Car {
void name();
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class WuLing implements Car {
@Override
public void name() {
System.out.println("五凌宏观");
}
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class Tesla implements Car {
@Override
public void name() {
System.out.println("特斯拉");
}
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public interface CarFactory {
Car getCar();
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class WuLingFactory implements CarFactory {
@Override
public Car getCar() {
return new WuLing();
}
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class TeslaFactory implements CarFactory {
@Override
public Car getCar() {
return new Tesla();
}
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
/**
* 弊端:增加实现类时需要改工厂类的代码
*/
public class Dazhong implements Car {
@Override
public void name() {
System.out.println("大众");
}
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
public class DazhongFactory implements CarFactory {
@Override
public Car getCar() {
return new Dazhong();
}
}
package com.xgp.company.第二种_工厂模式.工厂方法模式;
/**
* 买车
*/
public class Consumer {
public static void main(String[] args) {
Car car1 = new WuLingFactory().getCar();
Car car2 = new TeslaFactory().getCar();
Car car3 = new DazhongFactory().getCar();
car1.name();
car2.name();
car3.name();
}
//根据设计原则:工厂方法模式
//更据实际业务:简单工厂模式
}




package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
* 抽象产品工厂
*/
public interface IProductFactory {
//生产手机
IPhoneProduct iphoneProduct();
//生产路由器
IRouterProduct routerProduct();
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
* 手机接口
*/
public interface IPhoneProduct {
void start(); //开机
void shutdown(); //关机
void callup(); //打电话
void sendSMS(); //发短信
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
* 路由器产品接口
*/
public interface IRouterProduct {
void start(); //开机
void shutdown(); //关机
void openWifi(); //打开网络
void setting(); //设置参数
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class XiaomiFactory implements IProductFactory {
@Override
public IPhoneProduct iphoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new XiaomiRouter();
}
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
* 小米手机
*/
public class XiaomiPhone 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("小米发短信");
}
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
* 小米路由器
*/
public class XiaomiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("开启小米路由器");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
@Override
public void openWifi() {
System.out.println("小米网络");
}
@Override
public void setting() {
System.out.println("小米参数");
}
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class HuaweiFactory implements IProductFactory {
@Override
public IPhoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new HuaweiRouter();
}
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
/**
* 华为手机
*/
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("华为手机发短信");
}
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class HuaweiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("开启华为路由器");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
@Override
public void openWifi() {
System.out.println("华为网络");
}
@Override
public void setting() {
System.out.println("华为参数");
}
}
package com.xgp.company.第二种_工厂模式.抽象工厂模式;
public class Client {
public static void main(String[] args) {
System.out.println("================小米系列产品=================");
//小米工厂
XiaomiFactory xiaomiFactory = new XiaomiFactory();
//小米手机
IPhoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
iphoneProduct.start();
iphoneProduct.callup();
iphoneProduct.sendSMS();
iphoneProduct.shutdown();
//小米路由器
IRouterProduct routerProduct = xiaomiFactory.routerProduct();
routerProduct.start();
routerProduct.openWifi();
routerProduct.setting();
routerProduct.shutdown();
System.out.println("================华为系列产品=================");
//华为工厂
HuaweiFactory huaweiFactory = new HuaweiFactory();
//华为手机
iphoneProduct = huaweiFactory.iphoneProduct();
iphoneProduct.start();
iphoneProduct.callup();
iphoneProduct.sendSMS();
iphoneProduct.shutdown();
//华为路由器
routerProduct = huaweiFactory.routerProduct();
routerProduct.start();
routerProduct.openWifi();
routerProduct.setting();
routerProduct.shutdown();
}
}
================小米系列产品=================
开启小米手机
小米打电话
小米发短信
关闭小米手机
开启小米路由器
小米网络
小米参数
关闭小米路由器
================华为系列产品=================
开启华为手机
华为手机打电话
华为手机发短信
关闭华为手机
开启华为路由器
华为网络
华为参数
关闭华为路由器
进程完成,退出码 0


原文:https://www.cnblogs.com/xgp123/p/12300449.html